@ -36,6 +36,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"
|
||||
@ -137,7 +139,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);
|
||||
|
||||
|
@ -485,7 +485,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
|
||||
bulkread_data_length += addr_leng;
|
||||
for (int l = 0; l < addr_leng; l++)
|
||||
{
|
||||
//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);
|
||||
// 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);
|
||||
|
||||
read2Byte(joint_name, indirect_addr, &data16);
|
||||
if (data16 != dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l)
|
||||
{
|
||||
@ -657,8 +658,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())
|
||||
@ -1663,6 +1668,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));
|
||||
@ -1670,6 +1678,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)
|
||||
@ -1677,10 +1688,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++)
|
||||
@ -1699,6 +1713,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
|
||||
@ -1873,14 +1922,6 @@ void RobotisController::setJointCtrlModuleThread(const robotis_controller_msgs::
|
||||
|
||||
queue_mutex_.unlock();
|
||||
|
||||
// log
|
||||
// std::cout << "Enable Joint Ctrl Module : " << std::endl;
|
||||
// for(std::list<MotionModule *>::iterator _m_it = motion_modules_.begin(); _m_it != motion_modules_.end(); _m_it++)
|
||||
// {
|
||||
// if((*_m_it)->GetModuleEnable() == true)
|
||||
// std::cout << " - " << (*_m_it)->GetModuleName() << std::endl;
|
||||
// }
|
||||
|
||||
// publish current module
|
||||
robotis_controller_msgs::JointCtrlModule _current_module_msg;
|
||||
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::
|
||||
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