1 #include "std_msgs/String.h"
4 #include "../header/A_awakening.h"
15 this->pubPlat = pubPlat;
23 void A_awakening::subTouchCallback(
const look_caresses_pkg::platform_sensors &msg){
24 for(
int i=0; i<4;i++){
25 if (msg.touch_head[i] == 1 || msg.touch_body[i] == 1){
27 ROS_INFO(
"[A] Hey, you woke me up!");
47 ROS_INFO(
"[A] Started");
50 ROS_INFO(
"[A] I have a Loneliness value of: [%d]", loneliness);
56 ROS_INFO(
"[A] I go to sleep");
57 look_caresses_pkg::platform_control plat_msgs_sleeping;
58 plat_msgs_sleeping.eyelid_closure = 0.8;
59 float body_config_sleeping[4] = {0.0, 1.0, 0, -0.1};
60 float body_config_speed_sleeping[4] = {0.0, -1.0, -1.0, -1.0};
61 for (
int i =0; i<4; i++){
62 plat_msgs_sleeping.body_config[i] = body_config_sleeping[i];
63 plat_msgs_sleeping.body_config_speed[i] = body_config_speed_sleeping[i];
67 ros::Rate loop_rate(2);
69 while(ros::ok() && !touched){
71 if (loneliness > (50 + rand() % 50)){
75 if (loneliness < 100){
78 pubPlat.publish(plat_msgs_sleeping);
80 ROS_INFO(
"[A] Sleeping... loneliness = %d", loneliness);
84 ROS_INFO(
"[A] I am awake =) with Loneliness value of: %d", loneliness);
89 look_caresses_pkg::platform_control plat_msgs_awake;
90 plat_msgs_awake.eyelid_closure = 0.1;
93 float body_config_awake[4] = {0.0, 0.6, 0, -0.1};
94 float body_config_speed_awake[4] = {0.0, -1.0, -1.0, -1.0};
95 for (
int i =0; i<4; i++){
96 plat_msgs_awake.body_config[i] = body_config_awake[i];
97 plat_msgs_awake.body_config_speed[i] = body_config_speed_awake[i];
100 plat_msgs_awake.tail = -0.2;
101 plat_msgs_awake.ear_rotate[0] = 0.2;
102 plat_msgs_awake.ear_rotate[1] = 0.2;
106 ros::Rate loop_rate2(1);
107 for (
int i =0; i<5; i++){
108 plat_msgs_awake.blink_time = 5 + rand()%20;
110 plat_msgs_awake.sound_index_P2 = rand()%20;
111 pubPlat.publish(plat_msgs_awake);
118 ROS_INFO(
"[A] Finished");
125 void A_awakening::subTopics(){
130 subTouched = nh.subscribe(
"/miro/rob01/platform/sensors", 1000, &A_awakening::subTouchCallback,
this);
137 void A_awakening::unsubTopics(){
138 subTouched.shutdown();
int main(int loneliness)
Phase A: awakening. This fucntion randomly awake MiRo basising on loneliness value. While sleeping, loneliness increases, thus probability of awakening increases. Plus, if MiRo is touched, it wakes up immediately.
A_awakening(ros::NodeHandle nh, ros::Publisher pubPlat)
Costructor for phase A task.