small modification
This commit is contained in:
		| @@ -1,18 +1,18 @@ | ||||
| /******************************************************************************* | ||||
| * Copyright 2018 ROBOTIS CO., LTD. | ||||
| * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | ||||
| * You may obtain a copy of the License at | ||||
| * | ||||
| *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, software | ||||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | ||||
| *******************************************************************************/ | ||||
| /******************************************************************************* | ||||
|  | ||||
|  * Copyright 2018 ROBOTIS CO., LTD. | ||||
|  | ||||
|  * | ||||
|  | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  | ||||
|  * You may obtain a copy of the License at | ||||
|  | ||||
|  * | ||||
|  | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|  * | ||||
|  | ||||
| @@ -22,96 +22,99 @@ | ||||
|  | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  | ||||
| #define ROBOTIS_CONTROLLER_ROBOTIS_CONTROLLER_H_ | ||||
|  * See the License for the specific language governing permissions and | ||||
|  | ||||
|  * limitations under the License. | ||||
|  | ||||
|  *******************************************************************************/ | ||||
|  | ||||
| /* | ||||
|  * robotis_controller.h | ||||
|  * | ||||
|  *  Created on: 2016. 1. 15. | ||||
|  *      Author: zerom | ||||
|  */ | ||||
|  | ||||
| #ifndef ROBOTIS_CONTROLLER_ROBOTIS_CONTROLLER_H_ | ||||
| #define ROBOTIS_CONTROLLER_ROBOTIS_CONTROLLER_H_ | ||||
|  | ||||
|  | ||||
|  | ||||
| #include <ros/ros.h> | ||||
| #include <boost/thread.hpp> | ||||
| #include <yaml-cpp/yaml.h> | ||||
| #include <std_msgs/Bool.h> | ||||
| #include <std_msgs/String.h> | ||||
| #include <std_msgs/Float64.h> | ||||
| #include <sensor_msgs/JointState.h> | ||||
| #include <boost/thread.hpp> | ||||
|  | ||||
| #include <ros/ros.h> | ||||
|  | ||||
| #include <sensor_msgs/JointState.h> | ||||
|  | ||||
| #include "robotis_controller_msgs/WriteControlTable.h" | ||||
| #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_controller_msgs/LoadOffset.h" | ||||
| #include <std_msgs/Bool.h> | ||||
|  | ||||
| #include "robotis_device/robot.h" | ||||
| #include "robotis_framework_common/motion_module.h" | ||||
| #include "robotis_framework_common/sensor_module.h" | ||||
| #include "dynamixel_sdk/group_bulk_read.h" | ||||
| #include "dynamixel_sdk/group_sync_write.h" | ||||
| #include <std_msgs/Float64.h> | ||||
|  | ||||
| namespace robotis_framework | ||||
| { | ||||
|  | ||||
| enum ControllerMode | ||||
| { | ||||
|   MotionModuleMode, | ||||
|   DirectControlMode | ||||
| }; | ||||
|  | ||||
| class RobotisController : public Singleton<RobotisController> | ||||
| { | ||||
| #include <std_msgs/String.h> | ||||
|  | ||||
|   boost::thread   queue_thread_; | ||||
|   boost::thread   gazebo_thread_; | ||||
|   boost::thread   set_module_thread_; | ||||
|   boost::mutex    queue_mutex_; | ||||
| #include <yaml-cpp/yaml.h> | ||||
|  | ||||
|  | ||||
| #include "robotis_controller_msgs/GetJointModule.h" | ||||
|  | ||||
|   bool            init_pose_loaded_; | ||||
|   bool            is_timer_running_; | ||||
|   bool            is_offset_enabled_; | ||||
|   double          offset_ratio_; | ||||
|   bool            stop_timer_; | ||||
|   pthread_t       timer_thread_; | ||||
|   ControllerMode  controller_mode_; | ||||
| #include "robotis_controller_msgs/JointCtrlModule.h" | ||||
|  | ||||
| #include "robotis_controller_msgs/LoadOffset.h" | ||||
|  | ||||
| #include "robotis_controller_msgs/SetJointModule.h" | ||||
|  | ||||
| #include "robotis_controller_msgs/SetModule.h" | ||||
|  | ||||
| #include "robotis_controller_msgs/SyncWriteItem.h" | ||||
|  | ||||
|   std::vector<dynamixel::GroupSyncWrite *>  direct_sync_write_; | ||||
| #include "robotis_controller_msgs/WriteControlTable.h" | ||||
|  | ||||
|  | ||||
| #include "dynamixel_sdk/group_bulk_read.h" | ||||
|  | ||||
| #include "dynamixel_sdk/group_sync_write.h" | ||||
|  | ||||
|   void setJointCtrlModuleThread(const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg); | ||||
| #include "robotis_device/robot.h" | ||||
|  | ||||
| #include "robotis_framework_common/motion_module.h" | ||||
|  | ||||
| #include "robotis_framework_common/sensor_module.h" | ||||
|  | ||||
|  | ||||
|   const int         NONE_GAIN = 65535; | ||||
|   bool              DEBUG_PRINT; | ||||
|   Robot            *robot_; | ||||
| namespace robotis_framework { | ||||
|  | ||||
| enum ControllerMode { MotionModuleMode, DirectControlMode }; | ||||
|  | ||||
|   bool              gazebo_mode_; | ||||
|   std::string       gazebo_robot_name_; | ||||
| class RobotisController : public Singleton<RobotisController> { | ||||
| private: | ||||
|   boost::thread queue_thread_; | ||||
|   boost::thread gazebo_thread_; | ||||
|   std::map<std::string, dynamixel::GroupBulkRead *>   port_to_bulk_read_; | ||||
|   boost::thread set_module_thread_; | ||||
|   boost::mutex queue_mutex_; | ||||
|  | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_position_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_velocity_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_current_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_position_p_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_position_i_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_position_d_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_velocity_p_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_velocity_i_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *>  port_to_sync_write_velocity_d_gain_; | ||||
|   bool init_pose_loaded_; | ||||
|   bool is_timer_running_; | ||||
|   bool is_offset_enabled_; | ||||
|   double offset_ratio_; | ||||
|   bool stop_timer_; | ||||
|   pthread_t timer_thread_; | ||||
|   ControllerMode controller_mode_; | ||||
|  | ||||
|   std::list<MotionModule *> motion_modules_; | ||||
|   std::list<SensorModule *> sensor_modules_; | ||||
|   std::vector<dynamixel::GroupSyncWrite *> direct_sync_write_; | ||||
|  | ||||
|   std::map<std::string, double> sensor_result_; | ||||
|  | ||||
|   void gazeboTimerThread(); | ||||
|   void msgQueueThread(); | ||||
|   void setCtrlModuleThread(std::string ctrl_module); | ||||
|   void setJointCtrlModuleThread( | ||||
|  | ||||
|       const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg); | ||||
|   ros::Publisher  goal_joint_state_pub_; | ||||
|   ros::Publisher  present_joint_state_pub_; | ||||
|   ros::Publisher  current_module_pub_; | ||||
|  | ||||
|   bool isTimerStopped(); | ||||
|   void initializeSyncWrite(); | ||||
|  | ||||
| public: | ||||
|   const int NONE_GAIN = 65535; | ||||
| @@ -121,62 +124,84 @@ public: | ||||
|   bool gazebo_mode_; | ||||
|   std::string gazebo_robot_name_; | ||||
|  | ||||
|   bool    initialize(const std::string robot_file_path, const std::string init_file_path); | ||||
|   void    initializeDevice(const std::string init_file_path); | ||||
|   void    process(); | ||||
|   /* bulk read */ | ||||
|   std::map<std::string, dynamixel::GroupBulkRead *> port_to_bulk_read_; | ||||
|  | ||||
|   /* sync write */ | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|   void    addMotionModule(MotionModule *module); | ||||
|   void    removeMotionModule(MotionModule *module); | ||||
|   void    addSensorModule(SensorModule *module); | ||||
|   void    removeSensorModule(SensorModule *module); | ||||
|  | ||||
|       port_to_sync_write_position_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_velocity_; | ||||
|   void    startTimer(); | ||||
|   void    stopTimer(); | ||||
|   bool    isTimerRunning(); | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_current_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|   void    setCtrlModule(std::string module_name); | ||||
|   void    loadOffset(const std::string path); | ||||
|  | ||||
|       port_to_sync_write_position_p_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|   void    writeControlTableCallback(const robotis_controller_msgs::WriteControlTable::ConstPtr &msg); | ||||
|   void    syncWriteItemCallback(const robotis_controller_msgs::SyncWriteItem::ConstPtr &msg); | ||||
|   void    setControllerModeCallback(const std_msgs::String::ConstPtr &msg); | ||||
|   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); | ||||
|   void    enableOffsetCallback(const std_msgs::Bool::ConstPtr &msg); | ||||
|   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); | ||||
|   bool    loadOffsetService(robotis_controller_msgs::LoadOffset::Request &req, robotis_controller_msgs::LoadOffset::Response &res); | ||||
|       port_to_sync_write_position_i_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_position_d_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_velocity_p_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_velocity_i_gain_; | ||||
|   std::map<std::string, dynamixel::GroupSyncWrite *> | ||||
|  | ||||
|       port_to_sync_write_velocity_d_gain_; | ||||
|  | ||||
|   /* publisher */ | ||||
|   ros::Publisher goal_joint_state_pub_; | ||||
|   ros::Publisher present_joint_state_pub_; | ||||
|   ros::Publisher current_module_pub_; | ||||
|  | ||||
|   std::map<std::string, ros::Publisher> gazebo_joint_position_pub_; | ||||
|   std::map<std::string, ros::Publisher> gazebo_joint_velocity_pub_; | ||||
|   void    gazeboJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); | ||||
|   std::map<std::string, ros::Publisher> gazebo_joint_effort_pub_; | ||||
|  | ||||
|   int     ping        (const std::string joint_name, uint8_t *error = 0); | ||||
|   int     ping        (const std::string joint_name, uint16_t* model_number, uint8_t *error = 0); | ||||
|   static void *timerThread(void *param); | ||||
|  | ||||
|   RobotisController(); | ||||
|  | ||||
|   int     action      (const std::string joint_name); | ||||
|   int     reboot      (const std::string joint_name, uint8_t *error = 0); | ||||
|   int     factoryReset(const std::string joint_name, uint8_t option = 0, uint8_t *error = 0); | ||||
|   bool initialize(const std::string robot_file_path, | ||||
|  | ||||
|                   const std::string init_file_path); | ||||
|   void initializeDevice(const std::string init_file_path); | ||||
|   void process(); | ||||
|   int     read        (const std::string joint_name, uint16_t address, uint16_t length, uint8_t *data, uint8_t *error = 0); | ||||
|   int     readCtrlItem(const std::string joint_name, const std::string item_name, uint32_t *data, uint8_t *error = 0); | ||||
|  | ||||
|   void addMotionModule(MotionModule *module); | ||||
|   void removeMotionModule(MotionModule *module); | ||||
|   void addSensorModule(SensorModule *module); | ||||
|   void removeSensorModule(SensorModule *module); | ||||
|   int     read1Byte   (const std::string joint_name, uint16_t address, uint8_t *data, uint8_t *error = 0); | ||||
|   int     read2Byte   (const std::string joint_name, uint16_t address, uint16_t *data, uint8_t *error = 0); | ||||
|   int     read4Byte   (const std::string joint_name, uint16_t address, uint32_t *data, uint8_t *error = 0); | ||||
|  | ||||
|   void startTimer(); | ||||
|   void stopTimer(); | ||||
|   bool isTimerRunning(); | ||||
|  | ||||
|   void setCtrlModule(std::string module_name); | ||||
|   void loadOffset(const std::string path); | ||||
|   int     write       (const std::string joint_name, uint16_t address, uint16_t length, uint8_t *data, uint8_t *error = 0); | ||||
|   int     writeCtrlItem(const std::string joint_name, const std::string item_name, uint32_t data, uint8_t *error = 0); | ||||
|  | ||||
|   /* ROS Topic Callback Functions */ | ||||
|   void writeControlTableCallback( | ||||
|  | ||||
|       const robotis_controller_msgs::WriteControlTable::ConstPtr &msg); | ||||
|   int     write1Byte  (const std::string joint_name, uint16_t address, uint8_t data, uint8_t *error = 0); | ||||
|   int     write2Byte  (const std::string joint_name, uint16_t address, uint16_t data, uint8_t *error = 0); | ||||
|   int     write4Byte  (const std::string joint_name, uint16_t address, uint32_t data, uint8_t *error = 0); | ||||
|   void syncWriteItemCallback( | ||||
|  | ||||
|       const robotis_controller_msgs::SyncWriteItem::ConstPtr &msg); | ||||
|   void setControllerModeCallback(const std_msgs::String::ConstPtr &msg); | ||||
|   void setJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); | ||||
|   void setJointCtrlModuleCallback( | ||||
|  | ||||
|   int     regWrite    (const std::string joint_name, uint16_t address, uint16_t length, uint8_t *data, uint8_t *error = 0); | ||||
|       const robotis_controller_msgs::JointCtrlModule::ConstPtr &msg); | ||||
|   void setCtrlModuleCallback(const std_msgs::String::ConstPtr &msg); | ||||
|   void enableOffsetCallback(const std_msgs::Bool::ConstPtr &msg); | ||||
|   bool getJointCtrlModuleService( | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|       robotis_controller_msgs::GetJointModule::Request &req, | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user