diff --git a/humanoid_modules/include/humanoid_modules/search_module.h b/humanoid_modules/include/humanoid_modules/search_module.h index cea1d98e0d436e6b7e559f2903d20d5da008dcf5..83e7e4323c1cb17ee90f117fc2494679af1a41e6 100644 --- a/humanoid_modules/include/humanoid_modules/search_module.h +++ b/humanoid_modules/include/humanoid_modules/search_module.h @@ -39,6 +39,7 @@ //MODULES #include <humanoid_modules/joints_module.h> #include <humanoid_modules/walk_module.h> +#include <humanoid_modules/action_module.h> //states typedef enum {SEARCH_MODULE_IDLE, @@ -115,6 +116,8 @@ class CSearchModule : public CModule<search_module::SearchModuleConfig> //WALK MODULE CWalkModule walk_module; + //Actio module + CActionModule action_module; protected: void state_machine(void); @@ -123,7 +126,7 @@ class CSearchModule : public CModule<search_module::SearchModuleConfig> CSearchModule(const std::string &name); /*control functions */ - void start_search(std::string qr_id, double angle_rotation, double error, const double head_speed=0.5, const double head_acceleration=0.0, const double yaw_step=0.1); + void start_search(std::string qr_id, double angle_rotation, double error, const double tilt_angle=0.8, const double head_speed=0.5, const double head_acceleration=0.0, const double yaw_step=0.1); void stop_search(void); void get_position(double &pan_pos, double &tilt_pos); bool is_finished(void); diff --git a/humanoid_modules/src/search_module.cpp b/humanoid_modules/src/search_module.cpp index fa809f5af98f5c1496eb2fffc344ddb2b75519d0..2f9d7b9ebf11648acf846566475151a2fbde3006 100644 --- a/humanoid_modules/src/search_module.cpp +++ b/humanoid_modules/src/search_module.cpp @@ -14,7 +14,8 @@ CSearchModule::CSearchModule(const std::string &name) : CModule(name), joints_trajectory_module(name+"/joint_trajectory"), - walk_module(name+"/walk") + walk_module(name+"/walk"), + action_module(name+"action") { this->start_operation(); @@ -144,6 +145,8 @@ void CSearchModule::state_machine(void) { if(this->joints_trajectory_module.get_status()==JOINTS_MODULE_SUCCESS) { + //stand up + this->action_module.execute(16); angle_feedback=this->joints_trajectory_module.get_current_angle(); //ROS_INFO("Angulo pan: %f", angle_feedback[0]); this->state=SEARCH_MODULE_START_ROTATE; @@ -177,21 +180,25 @@ void CSearchModule::state_machine(void) break; case SEARCH_MODULE_START_ROTATE: ROS_INFO("CSearchModule: state START ROTATION"); + if(!this->action_module.is_finished()) + this->state=SEARCH_MODULE_START_ROTATE; + else{ ROS_INFO("num rotations: %d, total_rotations: %d", num_rotations, total_rotations); - if(num_rotations==total_rotations) - { - ROS_INFO("CSearchmodule: Search completed unsuccessfully"); - this->status=SEARCH_MODULE_FAIL; - this->state=SEARCH_MODULE_IDLE; - } - else - { - num_rotations++; - ROS_INFO("num rotations: %d", num_rotations); - // walk_module.add_whole_body(); - initial_odometry=true; - walk_module.set_steps_size(0.0,0.0,this->yaw_step); - this->state=SEARCH_MODULE_ROTATE; + if(num_rotations==total_rotations) + { + ROS_INFO("CSearchmodule: Search completed unsuccessfully"); + this->status=SEARCH_MODULE_FAIL; + this->state=SEARCH_MODULE_IDLE; + } + else + { + num_rotations++; + ROS_INFO("num rotations: %d", num_rotations); + // walk_module.add_whole_body(); + initial_odometry=true; + walk_module.set_steps_size(0.0,0.0,this->yaw_step); + this->state=SEARCH_MODULE_ROTATE; + } } break; @@ -227,14 +234,15 @@ void CSearchModule::reconfigure_callback(search_module::SearchModuleConfig &conf this->unlock(); } /* control functions */ -void CSearchModule::start_search(std::string qr_id, double angle_rotation, double error, const double head_speed, const double head_acceleration, const double yaw_step) +void CSearchModule::start_search(std::string qr_id, double angle_rotation, double error, const double tilt_angle, const double head_speed, const double head_acceleration, const double yaw_step) { /* QR ID to search */ this->qr_id=qr_id; /* rad of rotation */ this->rotate_angle = angle_rotation; //Angle of rotation this->pan_angle_search = (this->rotate_angle/2)-0.1; //pan angle to search - this->tilt_angle_search = -this->pan_angle_search; //tilt angle to search + // this->tilt_angle_search = -this->pan_angle_search; //tilt angle to search + this->angle[1]=tilt_angle; this->total_rotations = (PI/this->pan_angle_search)-1; //number of iterations this->odom_error = error; //min error in rotation ROS_INFO("Angle rotation: %f, Total rotations: %d, Pan angle: %f", rotate_angle, total_rotations, pan_angle_search); @@ -339,8 +347,8 @@ void CSearchModule::qr_pose_callback(const humanoid_common_msgs::tag_pose_array: this->pan_angle=this->current_pan_angle+atan2(msg->tags[0].position.x,msg->tags[0].position.z); this->tilt_angle=this->current_tilt_angle+atan2(msg->tags[0].position.y,msg->tags[0].position.z); - ROS_INFO("Next target pan angle: %f (%f,%f)",this->pan_angle,this->current_pan_angle,atan2(msg->tags[0].position.x,msg->tags[0].position.z)); - ROS_INFO("Next target tilt angle: %f (%f,%f)",this->tilt_angle,this->current_tilt_angle,atan2(msg->tags[0].position.y,msg->tags[0].position.z)); + // ROS_INFO("Next target pan angle: %f (%f,%f)",this->pan_angle,this->current_pan_angle,atan2(msg->tags[0].position.x,msg->tags[0].position.z)); + // ROS_INFO("Next target tilt angle: %f (%f,%f)",this->tilt_angle,this->current_tilt_angle,atan2(msg->tags[0].position.y,msg->tags[0].position.z)); /* if(this->tracking) {