@@ -485,7 +485,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
485
485
bulkread_data_length += addr_leng;
486
486
for (int l = 0 ; l < addr_leng; l++)
487
487
{
488
- // ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", joint_name.c_str(), indirect_addr, dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l);
488
+ // ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", joint_name.c_str(), indirect_addr, dxl->ctrl_table[dxl->bulk_read_items[i]->item_name]->address + _l);
489
+
489
490
read2Byte (joint_name, indirect_addr, &data16);
490
491
if (data16 != dxl->ctrl_table_ [dxl->bulk_read_items_ [i]->item_name_ ]->address_ + l)
491
492
{
@@ -657,8 +658,12 @@ void RobotisController::msgQueueThread()
657
658
}
658
659
659
660
/* service */
660
- ros::ServiceServer joint_module_server = ros_node.advertiseService (" /robotis/get_present_joint_ctrl_modules" ,
661
- &RobotisController::getCtrlModuleCallback, this );
661
+ ros::ServiceServer get_joint_module_server = ros_node.advertiseService (" /robotis/get_present_joint_ctrl_modules" ,
662
+ &RobotisController::getJointCtrlModuleService, this );
663
+ ros::ServiceServer set_joint_module_server = ros_node.advertiseService (" /robotis/set_present_joint_ctrl_modules" ,
664
+ &RobotisController::setJointCtrlModuleService, this );
665
+ ros::ServiceServer set_module_server = ros_node.advertiseService (" /robotis/set_present_ctrl_modules" ,
666
+ &RobotisController::setCtrlModuleService, this );
662
667
663
668
ros::WallDuration duration (robot_->getControlCycle () / 1000.0 );
664
669
while (ros_node.ok ())
@@ -1663,24 +1668,33 @@ void RobotisController::setJointStatesCallback(const sensor_msgs::JointState::Co
1663
1668
1664
1669
void RobotisController::setCtrlModuleCallback (const std_msgs::String::ConstPtr &msg)
1665
1670
{
1671
+ if (set_module_thread_.joinable ())
1672
+ set_module_thread_.join ();
1673
+
1666
1674
std::string _module_name_to_set = msg->data ;
1667
1675
1668
1676
set_module_thread_ = boost::thread (boost::bind (&RobotisController::setCtrlModuleThread, this , _module_name_to_set));
1669
1677
}
1670
1678
1671
1679
void RobotisController::setCtrlModule (std::string module_name)
1672
1680
{
1681
+ if (set_module_thread_.joinable ())
1682
+ set_module_thread_.join ();
1683
+
1673
1684
set_module_thread_ = boost::thread (boost::bind (&RobotisController::setCtrlModuleThread, this , module_name));
1674
1685
}
1675
1686
void RobotisController::setJointCtrlModuleCallback (const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg)
1676
1687
{
1677
1688
if (msg->joint_name .size () != msg->module_name .size ())
1678
1689
return ;
1679
1690
1691
+ if (set_module_thread_.joinable ())
1692
+ set_module_thread_.join ();
1693
+
1680
1694
set_module_thread_ = boost::thread (boost::bind (&RobotisController::setJointCtrlModuleThread, this , msg));
1681
1695
}
1682
1696
1683
- bool RobotisController::getCtrlModuleCallback (robotis_controller_msgs::GetJointModule::Request &req,
1697
+ bool RobotisController::getJointCtrlModuleService (robotis_controller_msgs::GetJointModule::Request &req,
1684
1698
robotis_controller_msgs::GetJointModule::Response &res)
1685
1699
{
1686
1700
for (unsigned int idx = 0 ; idx < req.joint_name .size (); idx++)
@@ -1699,6 +1713,41 @@ bool RobotisController::getCtrlModuleCallback(robotis_controller_msgs::GetJointM
1699
1713
return true ;
1700
1714
}
1701
1715
1716
+ bool RobotisController::setJointCtrlModuleService (robotis_controller_msgs::SetJointModule::Request &req, robotis_controller_msgs::SetJointModule::Response &res)
1717
+ {
1718
+ if (set_module_thread_.joinable ())
1719
+ set_module_thread_.join ();
1720
+
1721
+ robotis_controller_msgs::JointCtrlModule modules;
1722
+ modules.joint_name = req.joint_name ;
1723
+ modules.module_name = req.module_name ;
1724
+
1725
+ robotis_controller_msgs::JointCtrlModule::ConstPtr msg_ptr (new robotis_controller_msgs::JointCtrlModule (modules));
1726
+
1727
+ if (modules.joint_name .size () != modules.module_name .size ())
1728
+ return false ;
1729
+
1730
+ set_module_thread_ = boost::thread (boost::bind (&RobotisController::setJointCtrlModuleThread, this , msg_ptr));
1731
+
1732
+ set_module_thread_.join ();
1733
+
1734
+ return true ;
1735
+ }
1736
+
1737
+ bool RobotisController::setCtrlModuleService (robotis_controller_msgs::SetModule::Request &req, robotis_controller_msgs::SetModule::Response &res)
1738
+ {
1739
+ if (set_module_thread_.joinable ())
1740
+ set_module_thread_.join ();
1741
+
1742
+ std::string _module_name_to_set = req.module_name ;
1743
+
1744
+ set_module_thread_ = boost::thread (boost::bind (&RobotisController::setCtrlModuleThread, this , _module_name_to_set));
1745
+
1746
+ set_module_thread_.join ();
1747
+
1748
+ return true ;
1749
+ }
1750
+
1702
1751
void RobotisController::setJointCtrlModuleThread (const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg)
1703
1752
{
1704
1753
// stop module list
@@ -1873,14 +1922,6 @@ void RobotisController::setJointCtrlModuleThread(const robotis_controller_msgs::
1873
1922
1874
1923
queue_mutex_.unlock ();
1875
1924
1876
- // log
1877
- // std::cout << "Enable Joint Ctrl Module : " << std::endl;
1878
- // for(std::list<MotionModule *>::iterator _m_it = motion_modules_.begin(); _m_it != motion_modules_.end(); _m_it++)
1879
- // {
1880
- // if((*_m_it)->GetModuleEnable() == true)
1881
- // std::cout << " - " << (*_m_it)->GetModuleName() << std::endl;
1882
- // }
1883
-
1884
1925
// publish current module
1885
1926
robotis_controller_msgs::JointCtrlModule _current_module_msg;
1886
1927
for (std::map<std::string, Dynamixel *>::iterator _dxl_iter = robot_->dxls_ .begin (); _dxl_iter != robot_->dxls_ .end (); ++_dxl_iter)
@@ -1892,6 +1933,7 @@ void RobotisController::setJointCtrlModuleThread(const robotis_controller_msgs::
1892
1933
if (_current_module_msg.joint_name .size () == _current_module_msg.module_name .size ())
1893
1934
current_module_pub_.publish (_current_module_msg);
1894
1935
}
1936
+
1895
1937
void RobotisController::setCtrlModuleThread (std::string ctrl_module)
1896
1938
{
1897
1939
// stop module
0 commit comments