added serivce for setting module
This commit is contained in:
		| @@ -50,6 +50,8 @@ | ||||
| #include "robotis_controller_msgs/SyncWriteItem.h" | ||||
| #include "robotis_controller_msgs/JointCtrlModule.h" | ||||
| #include "robotis_controller_msgs/GetJointModule.h" | ||||
| #include "robotis_controller_msgs/SetJointModule.h" | ||||
| #include "robotis_controller_msgs/SetModule.h" | ||||
|  | ||||
| #include "robotis_device/robot.h" | ||||
| #include "robotis_framework_common/motion_module.h" | ||||
| @@ -151,7 +153,9 @@ public: | ||||
|   void    setJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); | ||||
|   void    setJointCtrlModuleCallback(const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg); | ||||
|   void    setCtrlModuleCallback(const std_msgs::String::ConstPtr &msg); | ||||
|   bool    getCtrlModuleCallback(robotis_controller_msgs::GetJointModule::Request &req, robotis_controller_msgs::GetJointModule::Response &res); | ||||
|   bool    getJointCtrlModuleService(robotis_controller_msgs::GetJointModule::Request &req, robotis_controller_msgs::GetJointModule::Response &res); | ||||
|   bool    setJointCtrlModuleService(robotis_controller_msgs::SetJointModule::Request &req, robotis_controller_msgs::SetJointModule::Response &res); | ||||
|   bool    setCtrlModuleService(robotis_controller_msgs::SetModule::Request &req, robotis_controller_msgs::SetModule::Response &res); | ||||
|  | ||||
|   void    gazeboJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); | ||||
|  | ||||
|   | ||||
| @@ -671,8 +671,12 @@ void RobotisController::msgQueueThread() | ||||
|   } | ||||
|  | ||||
|   /* service */ | ||||
|   ros::ServiceServer joint_module_server = ros_node.advertiseService("/robotis/get_present_joint_ctrl_modules", | ||||
|                                                         &RobotisController::getCtrlModuleCallback, this); | ||||
|   ros::ServiceServer get_joint_module_server = ros_node.advertiseService("/robotis/get_present_joint_ctrl_modules", | ||||
|                                                         &RobotisController::getJointCtrlModuleService, this); | ||||
|   ros::ServiceServer set_joint_module_server = ros_node.advertiseService("/robotis/set_present_joint_ctrl_modules", | ||||
|                                                         &RobotisController::setJointCtrlModuleService, this); | ||||
|   ros::ServiceServer set_module_server = ros_node.advertiseService("/robotis/set_present_ctrl_modules", | ||||
|                                                         &RobotisController::setCtrlModuleService, this); | ||||
|  | ||||
|   ros::WallDuration duration(robot_->getControlCycle() / 1000.0); | ||||
|   while(ros_node.ok()) | ||||
| @@ -1677,6 +1681,9 @@ void RobotisController::setJointStatesCallback(const sensor_msgs::JointState::Co | ||||
|  | ||||
| void RobotisController::setCtrlModuleCallback(const std_msgs::String::ConstPtr &msg) | ||||
| { | ||||
|   if(set_module_thread_.joinable()) | ||||
|     set_module_thread_.join(); | ||||
|  | ||||
|   std::string _module_name_to_set = msg->data; | ||||
|  | ||||
|   set_module_thread_ = boost::thread(boost::bind(&RobotisController::setCtrlModuleThread, this, _module_name_to_set)); | ||||
| @@ -1684,6 +1691,9 @@ void RobotisController::setCtrlModuleCallback(const std_msgs::String::ConstPtr & | ||||
|  | ||||
| void RobotisController::setCtrlModule(std::string module_name) | ||||
| { | ||||
|   if(set_module_thread_.joinable()) | ||||
|     set_module_thread_.join(); | ||||
|  | ||||
|   set_module_thread_ = boost::thread(boost::bind(&RobotisController::setCtrlModuleThread, this, module_name)); | ||||
| } | ||||
| void RobotisController::setJointCtrlModuleCallback(const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg) | ||||
| @@ -1691,10 +1701,13 @@ void RobotisController::setJointCtrlModuleCallback(const robotis_controller_msgs | ||||
|   if (msg->joint_name.size() != msg->module_name.size()) | ||||
|     return; | ||||
|  | ||||
|   if(set_module_thread_.joinable()) | ||||
|     set_module_thread_.join(); | ||||
|  | ||||
|   set_module_thread_ = boost::thread(boost::bind(&RobotisController::setJointCtrlModuleThread, this, msg)); | ||||
| } | ||||
|  | ||||
| bool RobotisController::getCtrlModuleCallback(robotis_controller_msgs::GetJointModule::Request &req, | ||||
| bool RobotisController::getJointCtrlModuleService(robotis_controller_msgs::GetJointModule::Request &req, | ||||
|     robotis_controller_msgs::GetJointModule::Response &res) | ||||
| { | ||||
|   for (unsigned int idx = 0; idx < req.joint_name.size(); idx++) | ||||
| @@ -1713,6 +1726,41 @@ bool RobotisController::getCtrlModuleCallback(robotis_controller_msgs::GetJointM | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| bool RobotisController::setJointCtrlModuleService(robotis_controller_msgs::SetJointModule::Request &req, robotis_controller_msgs::SetJointModule::Response &res) | ||||
| { | ||||
|   if(set_module_thread_.joinable()) | ||||
|     set_module_thread_.join(); | ||||
|  | ||||
|   robotis_controller_msgs::JointCtrlModule modules; | ||||
|   modules.joint_name = req.joint_name; | ||||
|   modules.module_name = req.module_name; | ||||
|  | ||||
|   robotis_controller_msgs::JointCtrlModule::ConstPtr msg_ptr(new robotis_controller_msgs::JointCtrlModule(modules)); | ||||
|  | ||||
|   if (modules.joint_name.size() != modules.module_name.size()) | ||||
|     return false; | ||||
|  | ||||
|   set_module_thread_ = boost::thread(boost::bind(&RobotisController::setJointCtrlModuleThread, this, msg_ptr)); | ||||
|  | ||||
|   set_module_thread_.join(); | ||||
|  | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| bool RobotisController::setCtrlModuleService(robotis_controller_msgs::SetModule::Request &req, robotis_controller_msgs::SetModule::Response &res) | ||||
| { | ||||
|   if(set_module_thread_.joinable()) | ||||
|     set_module_thread_.join(); | ||||
|  | ||||
|   std::string _module_name_to_set = req.module_name; | ||||
|  | ||||
|   set_module_thread_ = boost::thread(boost::bind(&RobotisController::setCtrlModuleThread, this, _module_name_to_set)); | ||||
|  | ||||
|   set_module_thread_.join(); | ||||
|  | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| void RobotisController::setJointCtrlModuleThread(const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg) | ||||
| { | ||||
|   // stop module list | ||||
| @@ -1906,6 +1954,7 @@ void RobotisController::setJointCtrlModuleThread(const robotis_controller_msgs:: | ||||
|   if(_current_module_msg.joint_name.size() == _current_module_msg.module_name.size()) | ||||
|     current_module_pub_.publish(_current_module_msg); | ||||
| } | ||||
|  | ||||
| void RobotisController::setCtrlModuleThread(std::string ctrl_module) | ||||
| { | ||||
|   // stop module | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kayman
					Kayman