From 78356262fb3c9e5faf236f1b11c9d2ddd963ae82 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 14 Oct 2025 12:10:07 +0900 Subject: [PATCH 01/26] Refactor: Update Dynamixel interface to support communication ID handling - Modified data structures to use pairs of communication ID and device ID for torque states and enabled IDs. - Updated methods in Dynamixel and DynamixelInfo classes to accommodate the new communication ID parameter. - Enhanced model file reading functions to include communication ID for better organization and access. - Added new model files for hand controllers and fingers, including control tables and unit information for pressure sensors. --- .../dynamixel/dynamixel.hpp | 39 +- .../dynamixel/dynamixel_info.hpp | 57 +- .../dynamixel_hardware_interface.hpp | 29 +- param/dxl_model/dynamixel.model | 27 + param/dxl_model/hand_controller.model | 868 ++++++++++++++++++ param/dxl_model/hand_finger_joint_1.model | 15 + param/dxl_model/hand_finger_joint_11.model | 15 + param/dxl_model/hand_finger_joint_12.model | 15 + param/dxl_model/hand_finger_joint_13.model | 15 + param/dxl_model/hand_finger_joint_14.model | 15 + param/dxl_model/hand_finger_joint_16.model | 15 + param/dxl_model/hand_finger_joint_17.model | 15 + param/dxl_model/hand_finger_joint_18.model | 15 + param/dxl_model/hand_finger_joint_19.model | 15 + param/dxl_model/hand_finger_joint_2.model | 15 + param/dxl_model/hand_finger_joint_21.model | 15 + param/dxl_model/hand_finger_joint_22.model | 15 + param/dxl_model/hand_finger_joint_23.model | 15 + param/dxl_model/hand_finger_joint_24.model | 15 + param/dxl_model/hand_finger_joint_3.model | 15 + param/dxl_model/hand_finger_joint_4.model | 15 + param/dxl_model/hand_finger_joint_6.model | 15 + param/dxl_model/hand_finger_joint_7.model | 15 + param/dxl_model/hand_finger_joint_8.model | 15 + param/dxl_model/hand_finger_joint_9.model | 15 + param/dxl_model/hand_pressure_sensor_10.model | 23 + param/dxl_model/hand_pressure_sensor_15.model | 23 + param/dxl_model/hand_pressure_sensor_20.model | 23 + param/dxl_model/hand_pressure_sensor_25.model | 23 + param/dxl_model/hand_pressure_sensor_5.model | 23 + param/dxl_model/xc335_t332.model | 130 +++ src/dynamixel/dynamixel.cpp | 360 ++++---- src/dynamixel/dynamixel_info.cpp | 143 ++- src/dynamixel_hardware_interface.cpp | 261 ++++-- 34 files changed, 1959 insertions(+), 370 deletions(-) create mode 100644 param/dxl_model/hand_controller.model create mode 100644 param/dxl_model/hand_finger_joint_1.model create mode 100644 param/dxl_model/hand_finger_joint_11.model create mode 100644 param/dxl_model/hand_finger_joint_12.model create mode 100644 param/dxl_model/hand_finger_joint_13.model create mode 100644 param/dxl_model/hand_finger_joint_14.model create mode 100644 param/dxl_model/hand_finger_joint_16.model create mode 100644 param/dxl_model/hand_finger_joint_17.model create mode 100644 param/dxl_model/hand_finger_joint_18.model create mode 100644 param/dxl_model/hand_finger_joint_19.model create mode 100644 param/dxl_model/hand_finger_joint_2.model create mode 100644 param/dxl_model/hand_finger_joint_21.model create mode 100644 param/dxl_model/hand_finger_joint_22.model create mode 100644 param/dxl_model/hand_finger_joint_23.model create mode 100644 param/dxl_model/hand_finger_joint_24.model create mode 100644 param/dxl_model/hand_finger_joint_3.model create mode 100644 param/dxl_model/hand_finger_joint_4.model create mode 100644 param/dxl_model/hand_finger_joint_6.model create mode 100644 param/dxl_model/hand_finger_joint_7.model create mode 100644 param/dxl_model/hand_finger_joint_8.model create mode 100644 param/dxl_model/hand_finger_joint_9.model create mode 100644 param/dxl_model/hand_pressure_sensor_10.model create mode 100644 param/dxl_model/hand_pressure_sensor_15.model create mode 100644 param/dxl_model/hand_pressure_sensor_20.model create mode 100644 param/dxl_model/hand_pressure_sensor_25.model create mode 100644 param/dxl_model/hand_pressure_sensor_5.model create mode 100644 param/dxl_model/xc335_t332.model diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index 99586f5..80d78bf 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp @@ -164,6 +164,7 @@ typedef struct */ typedef struct { + uint8_t comm_id; ///< Communication ID used to reach the device. uint8_t id; ///< ID of the Dynamixel motor. ControlItem control_item; ///< Control item details. uint32_t data; ///< Data associated with the control item. @@ -197,7 +198,7 @@ class Dynamixel // item write variable std::vector write_item_buf_; std::vector read_item_buf_; - std::map torque_state_; + std::map, bool> torque_state_; // read item (sync or bulk) variable bool read_type_; @@ -234,26 +235,25 @@ class Dynamixel // direct inform for bulk write std::map direct_info_write_; - std::map comm_id_; - public: explicit Dynamixel(const char * path); ~Dynamixel(); // DXL Communication Setting - DxlError InitDxlComm(std::vector id_arr, std::string port_name, std::string baudrate); + DxlError InitDxlComm(std::vector> comm_id_id_arr, + std::string port_name, std::string baudrate); DxlError Reboot(uint8_t id); void RWDataReset(); // DXL Read Setting DxlError SetDxlReadItems( - uint8_t id, uint8_t comm_id, std::vector item_names, + uint8_t comm_id, uint8_t id, std::vector item_names, std::vector> data_vec_ptr); DxlError SetMultiDxlRead(); // DXL Write Setting DxlError SetDxlWriteItems( - uint8_t id, uint8_t comm_id, std::vector item_names, + uint8_t comm_id, uint8_t id, std::vector item_names, std::vector> data_vec_ptr); DxlError SetMultiDxlWrite(); @@ -264,34 +264,33 @@ class Dynamixel // Set Dxl Option // DxlError SetOperatingMode(uint8_t id, uint8_t dynamixel_mode); - DxlError DynamixelEnable(std::vector id_arr); - DxlError DynamixelDisable(std::vector id_arr); + DxlError DynamixelEnable(const std::vector> & comm_id_id_arr); + DxlError DynamixelDisable(const std::vector> & comm_id_id_arr); // DXL Item Write - DxlError WriteItem(uint8_t id, std::string item_name, uint32_t data); - DxlError WriteItem(uint8_t id, uint16_t addr, uint8_t size, uint32_t data); + DxlError WriteItem(uint8_t comm_id, uint8_t id, std::string item_name, uint32_t data); + DxlError WriteItem(uint8_t comm_id, uint8_t id, uint16_t addr, uint8_t size, uint32_t data); DxlError InsertWriteItemBuf(uint8_t id, std::string item_name, uint32_t data); DxlError WriteItemBuf(); // DXL Item Read - DxlError ReadItem(uint8_t id, std::string item_name, uint32_t & data); + DxlError ReadItem(uint8_t comm_id, uint8_t id, std::string item_name, uint32_t & data); DxlError InsertReadItemBuf(uint8_t id, std::string item_name); DxlError ReadItemBuf(); bool CheckReadItemBuf(uint8_t id, std::string item_name); uint32_t GetReadItemDataBuf(uint8_t id, std::string item_name); DynamixelInfo GetDxlInfo() {return dxl_info_;} - std::map GetDxlTorqueState() {return torque_state_;} + std::map, bool> GetDxlTorqueState() {return torque_state_;} static std::string DxlErrorToString(DxlError error_num); - DxlError ReadDxlModelFile(uint8_t id, uint16_t model_num); - DxlError ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t firmware_version); - DxlError ReadFirmwareVersion(uint8_t id, uint8_t & firmware_version); - - void SetCommId(uint8_t id, uint8_t comm_id) {comm_id_[id] = comm_id;} + DxlError ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num); + DxlError ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version); + DxlError ReadFirmwareVersion(uint8_t comm_id, uint8_t id, uint8_t & firmware_version); - DxlError InitTorqueStates(std::vector id_arr, bool disable_torque = false); + DxlError InitTorqueStates(std::vector> comm_id_id_arr, + bool disable_torque = false); private: bool checkReadType(); @@ -334,7 +333,7 @@ class Dynamixel std::function get_data_func); DxlError ProcessDirectReadData( - uint8_t id, + uint8_t comm_id, const std::vector & item_addrs, const std::vector & item_names, const std::vector & item_sizes, @@ -372,6 +371,7 @@ class Dynamixel // Helper function for value conversion with unit info double ConvertValueWithUnitInfo( + uint8_t comm_id, uint8_t id, std::string item_name, uint32_t raw_value, @@ -380,6 +380,7 @@ class Dynamixel // Helper function for converting unit values to raw values uint32_t ConvertUnitValueToRawValue( + uint8_t comm_id, uint8_t id, std::string item_name, double unit_value, diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp index 282c1d9..90ec669 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp @@ -52,6 +52,7 @@ typedef struct std::vector item; std::map unit_map; std::map sign_type_map; + std::map offset_map; } DxlInfo; class DynamixelInfo @@ -69,8 +70,8 @@ class DynamixelInfo uint8_t ExtractFirmwareVersionFromFilename(const std::string & filename); public: - // Id, Control table - std::map dxl_info_; + // comm_id -> (id -> Control table) + std::map> dxl_info_by_comm_; DynamixelInfo() {} ~DynamixelInfo() {} @@ -78,47 +79,59 @@ class DynamixelInfo void SetDxlModelFolderPath(const char * path); void InitDxlModelInfo(); - void ReadDxlModelFile(uint8_t id, uint16_t model_num); - void ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t firmware_version); - bool GetDxlControlItem(uint8_t id, std::string item_name, uint16_t & addr, uint8_t & size); - bool CheckDxlControlItem(uint8_t id, std::string item_name); + void ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num); + void ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version); + bool GetDxlControlItem(uint8_t comm_id, uint8_t id, std::string item_name, uint16_t & addr, uint8_t & size); + bool CheckDxlControlItem(uint8_t comm_id, uint8_t id, std::string item_name); - bool GetDxlUnitValue(uint8_t id, std::string data_name, double & unit_value); - bool GetDxlSignType(uint8_t id, std::string data_name, bool & is_signed); + bool GetDxlUnitValue(uint8_t comm_id, uint8_t id, std::string data_name, double & unit_value); + bool GetDxlSignType(uint8_t comm_id, uint8_t id, std::string data_name, bool & is_signed); + bool GetDxlOffsetValue(uint8_t comm_id, uint8_t id, std::string data_name, double & offset_value); - // Template-based conversion methods template - double ConvertValueToUnit(uint8_t id, std::string data_name, T value); + double ConvertValueToUnit(uint8_t comm_id, uint8_t id, std::string data_name, T value); template - T ConvertUnitToValue(uint8_t id, std::string data_name, double unit_value); + T ConvertUnitToValue(uint8_t comm_id, uint8_t id, std::string data_name, double unit_value); // Helper method for internal use - double GetUnitMultiplier(uint8_t id, std::string data_name); + double GetUnitMultiplier(uint8_t comm_id, uint8_t id, std::string data_name); - int32_t ConvertRadianToValue(uint8_t id, double radian); - double ConvertValueToRadian(uint8_t id, int32_t value); + int32_t ConvertRadianToValue(uint8_t comm_id, uint8_t id, double radian); + double ConvertValueToRadian(uint8_t comm_id, uint8_t id, int32_t value); std::string GetModelName(uint16_t model_number) const; }; // Template implementations template -double DynamixelInfo::ConvertValueToUnit(uint8_t id, std::string data_name, T value) +double DynamixelInfo::ConvertValueToUnit(uint8_t comm_id, uint8_t id, std::string data_name, T value) { - auto it = dxl_info_[id].unit_map.find(data_name); - if (it != dxl_info_[id].unit_map.end()) { - return static_cast(value) * it->second; + auto & info = dxl_info_by_comm_[comm_id][id]; + auto it = info.unit_map.find(data_name); + if (it != info.unit_map.end()) { + double converted_value = static_cast(value) * it->second; + auto offset_it = info.offset_map.find(data_name); + if (offset_it != info.offset_map.end()) { + converted_value += offset_it->second; + } + return converted_value; } return static_cast(value); } template -T DynamixelInfo::ConvertUnitToValue(uint8_t id, std::string data_name, double unit_value) +T DynamixelInfo::ConvertUnitToValue(uint8_t comm_id, uint8_t id, std::string data_name, double unit_value) { - auto it = dxl_info_[id].unit_map.find(data_name); - if (it != dxl_info_[id].unit_map.end()) { - return static_cast(unit_value / it->second); + auto & info = dxl_info_by_comm_[comm_id][id]; + auto it = info.unit_map.find(data_name); + if (it != info.unit_map.end()) { + double adjusted_value = unit_value; + auto offset_it = info.offset_map.find(data_name); + if (offset_it != info.offset_map.end()) { + adjusted_value -= offset_it->second; + } + return static_cast(adjusted_value / it->second); } return static_cast(unit_value); } diff --git a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp index 31cd246..6bd1a95 100644 --- a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp +++ b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp @@ -182,8 +182,8 @@ class DynamixelHardware : public std::map dxl_hw_err_; std::map dxl_error_code_; DxlTorqueStatus dxl_torque_status_; - std::map dxl_torque_state_; - std::vector torque_enabled_ids_; + std::map, bool /*enable*/> dxl_torque_state_; + std::vector> torque_enabled_comm_id_id_; double err_timeout_ms_; rclcpp::Duration read_error_duration_{0, 0}; rclcpp::Duration write_error_duration_{0, 0}; @@ -228,13 +228,13 @@ class DynamixelHardware : public ///// dxl variable std::string port_name_; std::string baud_rate_; - std::vector dxl_id_; - std::vector virtual_dxl_id_; + std::vector> dxl_comm_id_id_; + std::vector> virtual_dxl_comm_id_id_; - std::vector sensor_id_; + std::vector> sensor_comm_id_id_; std::map sensor_item_; - std::vector controller_id_; + std::vector> controller_comm_id_id_; std::map controller_item_; ///// handler variable @@ -260,23 +260,10 @@ class DynamixelHardware : public double ** joint_to_transmission_matrix_; /** - * @brief Helper function to initialize items for a specific type. - * @param type_filter The type of items to initialize ("controller" or "dxl" or "sensor"). + * @brief Helper function to initialize items * @return True if initialization was successful, false otherwise. */ - bool initItems(const std::string & type_filter); - - /** - * @brief Initializes Dynamixel items. - * @return True if initialization was successful, false otherwise. - */ - bool InitDxlItems(); - - /** - * @brief Initializes the controller items. - * @return True if initialization was successful, false otherwise. - */ - bool InitControllerItems(); + bool InitItems(); /** * @brief Initializes the read items for Dynamixel. diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index 9d45f88..dec5b3a 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -3,6 +3,32 @@ Number Name 220 omy_hat.model 230 omy_end.model 231 omy_end_rh_p12_rn.model +260 hand_controller.model +261 hand_finger_joint_1.model +262 hand_finger_joint_2.model +263 hand_finger_joint_3.model +264 hand_finger_joint_4.model +265 hand_pressure_sensor_5.model +266 hand_finger_joint_6.model +267 hand_finger_joint_7.model +268 hand_finger_joint_8.model +269 hand_finger_joint_9.model +270 hand_pressure_sensor_10.model +271 hand_finger_joint_11.model +272 hand_finger_joint_12.model +273 hand_finger_joint_13.model +274 hand_finger_joint_14.model +275 hand_pressure_sensor_15.model +276 hand_finger_joint_16.model +277 hand_finger_joint_17.model +278 hand_finger_joint_18.model +279 hand_finger_joint_19.model +280 hand_pressure_sensor_20.model +281 hand_finger_joint_21.model +282 hand_finger_joint_22.model +283 hand_finger_joint_23.model +284 hand_finger_joint_24.model +285 hand_pressure_sensor_25.model 311 mx_64.model 321 mx_106.model 350 xl320.model @@ -50,6 +76,7 @@ Number Name 1240 xc330_m288.model 1270 xw430_t333.model 1310 xw540_h260.model +1700 xc335_t332.model 2000 ph42_020_s300.model 2010 ph54_100_s500.model 2020 ph54_200_s500.model diff --git a/param/dxl_model/hand_controller.model b/param/dxl_model/hand_controller.model new file mode 100644 index 0000000..a5c1457 --- /dev/null +++ b/param/dxl_model/hand_controller.model @@ -0,0 +1,868 @@ +[control table] +Address Size Data Name +0 2 Model Number +2 4 Model Information +6 1 Firmware Version +7 1 ID +8 1 Bus Watchdog +12 1 Baud Rate (Bus) +13 1 Return Delay Time +15 1 Status Return Level +16 1 Registered Instruction +20 1 Baud Rate (DXL) +65 1 LED +70 1 Table Sync Enable +100 2 Realtime Tick +102 2 Present Input Voltage +106 1 Status +122 2 Indirect Address 1 +634 1 Indirect Data 1 +122 2 Indirect Address Read +634 1 Indirect Data Read +452 2 Indirect Address Write +799 1 Indirect Data Write +1024 1 SyncTable 1 ID 1 +1025 1 SyncTable 1 ID 2 +1026 1 SyncTable 1 ID 3 +1027 1 SyncTable 1 ID 4 +1028 1 SyncTable 1 ID 5 +1029 2 SyncTable 1 Read Address 1 +1031 2 SyncTable 1 Read Address 2 +1033 2 SyncTable 1 Read Address 3 +1035 2 SyncTable 1 Read Address 4 +1037 2 SyncTable 1 Read Address 5 +1039 2 SyncTable 1 Read Size 1 +1041 2 SyncTable 1 Read Size 2 +1043 2 SyncTable 1 Read Size 3 +1045 2 SyncTable 1 Read Size 4 +1047 2 SyncTable 1 Read Size 5 +1049 2 SyncTable 1 Write Address 1 +1051 2 SyncTable 1 Write Address 2 +1053 2 SyncTable 1 Write Address 3 +1055 2 SyncTable 1 Write Address 4 +1057 2 SyncTable 1 Write Address 5 +1059 2 SyncTable 1 Write Size 1 +1061 2 SyncTable 1 Write Size 2 +1063 2 SyncTable 1 Write Size 3 +1065 2 SyncTable 1 Write Size 4 +1067 2 SyncTable 1 Write Size 5 +1069 1 SyncTable 1 Read Data 1 +1070 1 SyncTable 1 Read Data 2 +1071 1 SyncTable 1 Read Data 3 +1072 1 SyncTable 1 Read Data 4 +1073 1 SyncTable 1 Read Data 5 +1074 1 SyncTable 1 Read Data 6 +1075 1 SyncTable 1 Read Data 7 +1076 1 SyncTable 1 Read Data 8 +1077 1 SyncTable 1 Read Data 9 +1078 1 SyncTable 1 Read Data 10 +1079 1 SyncTable 1 Read Data 11 +1080 1 SyncTable 1 Read Data 12 +1081 1 SyncTable 1 Read Data 13 +1082 1 SyncTable 1 Read Data 14 +1083 1 SyncTable 1 Read Data 15 +1084 1 SyncTable 1 Read Data 16 +1085 1 SyncTable 1 Read Data 17 +1086 1 SyncTable 1 Read Data 18 +1087 1 SyncTable 1 Read Data 19 +1088 1 SyncTable 1 Read Data 20 +1089 1 SyncTable 1 Read Data 21 +1090 1 SyncTable 1 Read Data 22 +1091 1 SyncTable 1 Read Data 23 +1092 1 SyncTable 1 Read Data 24 +1093 1 SyncTable 1 Read Data 25 +1094 1 SyncTable 1 Read Data 26 +1095 1 SyncTable 1 Read Data 27 +1096 1 SyncTable 1 Read Data 28 +1097 1 SyncTable 1 Read Data 29 +1098 1 SyncTable 1 Read Data 30 +1099 1 SyncTable 1 Read Data 31 +1100 1 SyncTable 1 Read Data 32 +1101 1 SyncTable 1 Read Data 33 +1102 1 SyncTable 1 Read Data 34 +1103 1 SyncTable 1 Read Data 35 +1104 1 SyncTable 1 Read Data 36 +1105 1 SyncTable 1 Read Data 37 +1106 1 SyncTable 1 Read Data 38 +1107 1 SyncTable 1 Read Data 39 +1108 1 SyncTable 1 Read Data 40 +1109 1 SyncTable 1 Read Data 41 +1110 1 SyncTable 1 Read Data 42 +1111 1 SyncTable 1 Read Data 43 +1112 1 SyncTable 1 Read Data 44 +1113 1 SyncTable 1 Read Data 45 +1114 1 SyncTable 1 Read Data 46 +1115 1 SyncTable 1 Read Data 47 +1116 1 SyncTable 1 Read Data 48 +1117 1 SyncTable 1 Read Data 49 +1118 1 SyncTable 1 Read Data 50 +1119 1 SyncTable 1 Read Data 51 +1120 1 SyncTable 1 Read Data 52 +1121 1 SyncTable 1 Read Data 53 +1122 1 SyncTable 1 Read Data 54 +1123 1 SyncTable 1 Read Data 55 +1124 1 SyncTable 1 Read Data 56 +1125 1 SyncTable 1 Read Data 57 +1126 1 SyncTable 1 Read Data 58 +1127 1 SyncTable 1 Read Data 59 +1128 1 SyncTable 1 Read Data 60 +1129 1 SyncTable 1 Read Data 61 +1130 1 SyncTable 1 Read Data 62 +1131 1 SyncTable 1 Read Data 63 +1132 1 SyncTable 1 Read Data 64 +1133 1 SyncTable 1 Read Data 65 +1134 1 SyncTable 1 Read Data 66 +1135 1 SyncTable 1 Read Data 67 +1136 1 SyncTable 1 Read Data 68 +1137 1 SyncTable 1 Read Data 69 +1138 1 SyncTable 1 Read Data 70 +1139 1 SyncTable 1 Read Data 71 +1140 1 SyncTable 1 Read Data 72 +1141 1 SyncTable 1 Write Data 1 +1142 1 SyncTable 1 Write Data 2 +1143 1 SyncTable 1 Write Data 3 +1144 1 SyncTable 1 Write Data 4 +1145 1 SyncTable 1 Write Data 5 +1146 1 SyncTable 1 Write Data 6 +1147 1 SyncTable 1 Write Data 7 +1148 1 SyncTable 1 Write Data 8 +1149 1 SyncTable 1 Write Data 9 +1150 1 SyncTable 1 Write Data 10 +1151 1 SyncTable 1 Write Data 11 +1152 1 SyncTable 1 Write Data 12 +1153 1 SyncTable 1 Write Data 13 +1154 1 SyncTable 1 Write Data 14 +1155 1 SyncTable 1 Write Data 15 +1156 1 SyncTable 1 Write Data 16 +1157 1 SyncTable 1 Write Data 17 +1158 1 SyncTable 1 Write Data 18 +1159 1 SyncTable 1 Write Data 19 +1160 1 SyncTable 1 Write Data 20 +1161 1 SyncTable 1 Write Data 21 +1162 1 SyncTable 1 Write Data 22 +1163 1 SyncTable 1 Write Data 23 +1164 1 SyncTable 1 Write Data 24 +1165 1 SyncTable 1 Write Data 25 +1166 1 SyncTable 1 Write Data 26 +1167 1 SyncTable 1 Write Data 27 +1168 1 SyncTable 1 Write Data 28 +1169 1 SyncTable 1 Write Data 29 +1170 1 SyncTable 1 Write Data 30 +1171 1 SyncTable 1 Write Data 31 +1172 1 SyncTable 1 Write Data 32 +1173 1 SyncTable 1 Write Data 33 +1174 1 SyncTable 1 Write Data 34 +1175 1 SyncTable 1 Write Data 35 +1176 1 SyncTable 1 Write Data 36 +1177 1 SyncTable 1 Write Data 37 +1178 1 SyncTable 1 Write Data 38 +1179 1 SyncTable 1 Write Data 39 +1180 1 SyncTable 1 Write Data 40 +1181 1 SyncTable 1 Write Data 41 +1182 1 SyncTable 1 Write Data 42 +1183 1 SyncTable 1 Write Data 43 +1184 1 SyncTable 1 Write Data 44 +1185 1 SyncTable 1 Write Data 45 +1186 1 SyncTable 1 Write Data 46 +1187 1 SyncTable 1 Write Data 47 +1188 1 SyncTable 1 Write Data 48 +1189 1 SyncTable 1 Write Data 49 +1190 1 SyncTable 1 Write Data 50 +1191 1 SyncTable 1 Write Data 51 +1192 1 SyncTable 1 Write Data 52 +1193 1 SyncTable 1 Write Data 53 +1194 1 SyncTable 1 Write Data 54 +1195 1 SyncTable 1 Write Data 55 +1196 1 SyncTable 1 Write Data 56 +1197 1 SyncTable 1 Write Data 57 +1198 1 SyncTable 1 Write Data 58 +1199 1 SyncTable 1 Write Data 59 +1200 1 SyncTable 1 Write Data 60 +1201 1 SyncTable 1 Write Data 61 +1202 1 SyncTable 1 Write Data 62 +1203 1 SyncTable 1 Write Data 63 +1204 1 SyncTable 1 Write Data 64 +1205 1 SyncTable 1 Write Data 65 +1206 1 SyncTable 1 Write Data 66 +1207 1 SyncTable 1 Write Data 67 +1208 1 SyncTable 1 Write Data 68 +1209 1 SyncTable 1 Write Data 69 +1210 1 SyncTable 1 Write Data 70 +1211 1 SyncTable 1 Write Data 71 +1212 1 SyncTable 1 Write Data 72 +1213 1 SyncTable 2 ID 1 +1214 1 SyncTable 2 ID 2 +1215 1 SyncTable 2 ID 3 +1216 1 SyncTable 2 ID 4 +1217 1 SyncTable 2 ID 5 +1218 2 SyncTable 2 Read Address 1 +1220 2 SyncTable 2 Read Address 2 +1222 2 SyncTable 2 Read Address 3 +1224 2 SyncTable 2 Read Address 4 +1226 2 SyncTable 2 Read Address 5 +1228 2 SyncTable 2 Read Size 1 +1230 2 SyncTable 2 Read Size 2 +1232 2 SyncTable 2 Read Size 3 +1234 2 SyncTable 2 Read Size 4 +1236 2 SyncTable 2 Read Size 5 +1238 2 SyncTable 2 Write Address 1 +1240 2 SyncTable 2 Write Address 2 +1242 2 SyncTable 2 Write Address 3 +1244 2 SyncTable 2 Write Address 4 +1246 2 SyncTable 2 Write Address 5 +1248 2 SyncTable 2 Write Size 1 +1250 2 SyncTable 2 Write Size 2 +1252 2 SyncTable 2 Write Size 3 +1254 2 SyncTable 2 Write Size 4 +1256 2 SyncTable 2 Write Size 5 +1258 1 SyncTable 2 Read Data 1 +1259 1 SyncTable 2 Read Data 2 +1260 1 SyncTable 2 Read Data 3 +1261 1 SyncTable 2 Read Data 4 +1262 1 SyncTable 2 Read Data 5 +1263 1 SyncTable 2 Read Data 6 +1264 1 SyncTable 2 Read Data 7 +1265 1 SyncTable 2 Read Data 8 +1266 1 SyncTable 2 Read Data 9 +1267 1 SyncTable 2 Read Data 10 +1268 1 SyncTable 2 Read Data 11 +1269 1 SyncTable 2 Read Data 12 +1270 1 SyncTable 2 Read Data 13 +1271 1 SyncTable 2 Read Data 14 +1272 1 SyncTable 2 Read Data 15 +1273 1 SyncTable 2 Read Data 16 +1274 1 SyncTable 2 Read Data 17 +1275 1 SyncTable 2 Read Data 18 +1276 1 SyncTable 2 Read Data 19 +1277 1 SyncTable 2 Read Data 20 +1278 1 SyncTable 2 Read Data 21 +1279 1 SyncTable 2 Read Data 22 +1280 1 SyncTable 2 Read Data 23 +1281 1 SyncTable 2 Read Data 24 +1282 1 SyncTable 2 Read Data 25 +1283 1 SyncTable 2 Read Data 26 +1284 1 SyncTable 2 Read Data 27 +1285 1 SyncTable 2 Read Data 28 +1286 1 SyncTable 2 Read Data 29 +1287 1 SyncTable 2 Read Data 30 +1288 1 SyncTable 2 Read Data 31 +1289 1 SyncTable 2 Read Data 32 +1290 1 SyncTable 2 Read Data 33 +1291 1 SyncTable 2 Read Data 34 +1292 1 SyncTable 2 Read Data 35 +1293 1 SyncTable 2 Read Data 36 +1294 1 SyncTable 2 Read Data 37 +1295 1 SyncTable 2 Read Data 38 +1296 1 SyncTable 2 Read Data 39 +1297 1 SyncTable 2 Read Data 40 +1298 1 SyncTable 2 Read Data 41 +1299 1 SyncTable 2 Read Data 42 +1300 1 SyncTable 2 Read Data 43 +1301 1 SyncTable 2 Read Data 44 +1302 1 SyncTable 2 Read Data 45 +1303 1 SyncTable 2 Read Data 46 +1304 1 SyncTable 2 Read Data 47 +1305 1 SyncTable 2 Read Data 48 +1306 1 SyncTable 2 Read Data 49 +1307 1 SyncTable 2 Read Data 50 +1308 1 SyncTable 2 Read Data 51 +1309 1 SyncTable 2 Read Data 52 +1310 1 SyncTable 2 Read Data 53 +1311 1 SyncTable 2 Read Data 54 +1312 1 SyncTable 2 Read Data 55 +1313 1 SyncTable 2 Read Data 56 +1314 1 SyncTable 2 Read Data 57 +1315 1 SyncTable 2 Read Data 58 +1316 1 SyncTable 2 Read Data 59 +1317 1 SyncTable 2 Read Data 60 +1318 1 SyncTable 2 Read Data 61 +1319 1 SyncTable 2 Read Data 62 +1320 1 SyncTable 2 Read Data 63 +1321 1 SyncTable 2 Read Data 64 +1322 1 SyncTable 2 Read Data 65 +1323 1 SyncTable 2 Read Data 66 +1324 1 SyncTable 2 Read Data 67 +1325 1 SyncTable 2 Read Data 68 +1326 1 SyncTable 2 Read Data 69 +1327 1 SyncTable 2 Read Data 70 +1328 1 SyncTable 2 Read Data 71 +1329 1 SyncTable 2 Read Data 72 +1330 1 SyncTable 2 Write Data 1 +1331 1 SyncTable 2 Write Data 2 +1332 1 SyncTable 2 Write Data 3 +1333 1 SyncTable 2 Write Data 4 +1334 1 SyncTable 2 Write Data 5 +1335 1 SyncTable 2 Write Data 6 +1336 1 SyncTable 2 Write Data 7 +1337 1 SyncTable 2 Write Data 8 +1338 1 SyncTable 2 Write Data 9 +1339 1 SyncTable 2 Write Data 10 +1340 1 SyncTable 2 Write Data 11 +1341 1 SyncTable 2 Write Data 12 +1342 1 SyncTable 2 Write Data 13 +1343 1 SyncTable 2 Write Data 14 +1344 1 SyncTable 2 Write Data 15 +1345 1 SyncTable 2 Write Data 16 +1346 1 SyncTable 2 Write Data 17 +1347 1 SyncTable 2 Write Data 18 +1348 1 SyncTable 2 Write Data 19 +1349 1 SyncTable 2 Write Data 20 +1350 1 SyncTable 2 Write Data 21 +1351 1 SyncTable 2 Write Data 22 +1352 1 SyncTable 2 Write Data 23 +1353 1 SyncTable 2 Write Data 24 +1354 1 SyncTable 2 Write Data 25 +1355 1 SyncTable 2 Write Data 26 +1356 1 SyncTable 2 Write Data 27 +1357 1 SyncTable 2 Write Data 28 +1358 1 SyncTable 2 Write Data 29 +1359 1 SyncTable 2 Write Data 30 +1360 1 SyncTable 2 Write Data 31 +1361 1 SyncTable 2 Write Data 32 +1362 1 SyncTable 2 Write Data 33 +1363 1 SyncTable 2 Write Data 34 +1364 1 SyncTable 2 Write Data 35 +1365 1 SyncTable 2 Write Data 36 +1366 1 SyncTable 2 Write Data 37 +1367 1 SyncTable 2 Write Data 38 +1368 1 SyncTable 2 Write Data 39 +1369 1 SyncTable 2 Write Data 40 +1370 1 SyncTable 2 Write Data 41 +1371 1 SyncTable 2 Write Data 42 +1372 1 SyncTable 2 Write Data 43 +1373 1 SyncTable 2 Write Data 44 +1374 1 SyncTable 2 Write Data 45 +1375 1 SyncTable 2 Write Data 46 +1376 1 SyncTable 2 Write Data 47 +1377 1 SyncTable 2 Write Data 48 +1378 1 SyncTable 2 Write Data 49 +1379 1 SyncTable 2 Write Data 50 +1380 1 SyncTable 2 Write Data 51 +1381 1 SyncTable 2 Write Data 52 +1382 1 SyncTable 2 Write Data 53 +1383 1 SyncTable 2 Write Data 54 +1384 1 SyncTable 2 Write Data 55 +1385 1 SyncTable 2 Write Data 56 +1386 1 SyncTable 2 Write Data 57 +1387 1 SyncTable 2 Write Data 58 +1388 1 SyncTable 2 Write Data 59 +1389 1 SyncTable 2 Write Data 60 +1390 1 SyncTable 2 Write Data 61 +1391 1 SyncTable 2 Write Data 62 +1392 1 SyncTable 2 Write Data 63 +1393 1 SyncTable 2 Write Data 64 +1394 1 SyncTable 2 Write Data 65 +1395 1 SyncTable 2 Write Data 66 +1396 1 SyncTable 2 Write Data 67 +1397 1 SyncTable 2 Write Data 68 +1398 1 SyncTable 2 Write Data 69 +1399 1 SyncTable 2 Write Data 70 +1400 1 SyncTable 2 Write Data 71 +1401 1 SyncTable 2 Write Data 72 +1402 1 SyncTable 3 ID 1 +1403 1 SyncTable 3 ID 2 +1404 1 SyncTable 3 ID 3 +1405 1 SyncTable 3 ID 4 +1406 1 SyncTable 3 ID 5 +1407 2 SyncTable 3 Read Address 1 +1409 2 SyncTable 3 Read Address 2 +1411 2 SyncTable 3 Read Address 3 +1413 2 SyncTable 3 Read Address 4 +1415 2 SyncTable 3 Read Address 5 +1417 2 SyncTable 3 Read Size 1 +1419 2 SyncTable 3 Read Size 2 +1421 2 SyncTable 3 Read Size 3 +1423 2 SyncTable 3 Read Size 4 +1425 2 SyncTable 3 Read Size 5 +1427 2 SyncTable 3 Write Address 1 +1429 2 SyncTable 3 Write Address 2 +1431 2 SyncTable 3 Write Address 3 +1433 2 SyncTable 3 Write Address 4 +1435 2 SyncTable 3 Write Address 5 +1437 2 SyncTable 3 Write Size 1 +1439 2 SyncTable 3 Write Size 2 +1441 2 SyncTable 3 Write Size 3 +1443 2 SyncTable 3 Write Size 4 +1445 2 SyncTable 3 Write Size 5 +1447 1 SyncTable 3 Read Data 1 +1448 1 SyncTable 3 Read Data 2 +1449 1 SyncTable 3 Read Data 3 +1450 1 SyncTable 3 Read Data 4 +1451 1 SyncTable 3 Read Data 5 +1452 1 SyncTable 3 Read Data 6 +1453 1 SyncTable 3 Read Data 7 +1454 1 SyncTable 3 Read Data 8 +1455 1 SyncTable 3 Read Data 9 +1456 1 SyncTable 3 Read Data 10 +1457 1 SyncTable 3 Read Data 11 +1458 1 SyncTable 3 Read Data 12 +1459 1 SyncTable 3 Read Data 13 +1460 1 SyncTable 3 Read Data 14 +1461 1 SyncTable 3 Read Data 15 +1462 1 SyncTable 3 Read Data 16 +1463 1 SyncTable 3 Read Data 17 +1464 1 SyncTable 3 Read Data 18 +1465 1 SyncTable 3 Read Data 19 +1466 1 SyncTable 3 Read Data 20 +1467 1 SyncTable 3 Read Data 21 +1468 1 SyncTable 3 Read Data 22 +1469 1 SyncTable 3 Read Data 23 +1470 1 SyncTable 3 Read Data 24 +1471 1 SyncTable 3 Read Data 25 +1472 1 SyncTable 3 Read Data 26 +1473 1 SyncTable 3 Read Data 27 +1474 1 SyncTable 3 Read Data 28 +1475 1 SyncTable 3 Read Data 29 +1476 1 SyncTable 3 Read Data 30 +1477 1 SyncTable 3 Read Data 31 +1478 1 SyncTable 3 Read Data 32 +1479 1 SyncTable 3 Read Data 33 +1480 1 SyncTable 3 Read Data 34 +1481 1 SyncTable 3 Read Data 35 +1482 1 SyncTable 3 Read Data 36 +1483 1 SyncTable 3 Read Data 37 +1484 1 SyncTable 3 Read Data 38 +1485 1 SyncTable 3 Read Data 39 +1486 1 SyncTable 3 Read Data 40 +1487 1 SyncTable 3 Read Data 41 +1488 1 SyncTable 3 Read Data 42 +1489 1 SyncTable 3 Read Data 43 +1490 1 SyncTable 3 Read Data 44 +1491 1 SyncTable 3 Read Data 45 +1492 1 SyncTable 3 Read Data 46 +1493 1 SyncTable 3 Read Data 47 +1494 1 SyncTable 3 Read Data 48 +1495 1 SyncTable 3 Read Data 49 +1496 1 SyncTable 3 Read Data 50 +1497 1 SyncTable 3 Read Data 51 +1498 1 SyncTable 3 Read Data 52 +1499 1 SyncTable 3 Read Data 53 +1500 1 SyncTable 3 Read Data 54 +1501 1 SyncTable 3 Read Data 55 +1502 1 SyncTable 3 Read Data 56 +1503 1 SyncTable 3 Read Data 57 +1504 1 SyncTable 3 Read Data 58 +1505 1 SyncTable 3 Read Data 59 +1506 1 SyncTable 3 Read Data 60 +1507 1 SyncTable 3 Read Data 61 +1508 1 SyncTable 3 Read Data 62 +1509 1 SyncTable 3 Read Data 63 +1510 1 SyncTable 3 Read Data 64 +1511 1 SyncTable 3 Read Data 65 +1512 1 SyncTable 3 Read Data 66 +1513 1 SyncTable 3 Read Data 67 +1514 1 SyncTable 3 Read Data 68 +1515 1 SyncTable 3 Read Data 69 +1516 1 SyncTable 3 Read Data 70 +1517 1 SyncTable 3 Read Data 71 +1518 1 SyncTable 3 Read Data 72 +1519 1 SyncTable 3 Write Data 1 +1520 1 SyncTable 3 Write Data 2 +1521 1 SyncTable 3 Write Data 3 +1522 1 SyncTable 3 Write Data 4 +1523 1 SyncTable 3 Write Data 5 +1524 1 SyncTable 3 Write Data 6 +1525 1 SyncTable 3 Write Data 7 +1526 1 SyncTable 3 Write Data 8 +1527 1 SyncTable 3 Write Data 9 +1528 1 SyncTable 3 Write Data 10 +1529 1 SyncTable 3 Write Data 11 +1530 1 SyncTable 3 Write Data 12 +1531 1 SyncTable 3 Write Data 13 +1532 1 SyncTable 3 Write Data 14 +1533 1 SyncTable 3 Write Data 15 +1534 1 SyncTable 3 Write Data 16 +1535 1 SyncTable 3 Write Data 17 +1536 1 SyncTable 3 Write Data 18 +1537 1 SyncTable 3 Write Data 19 +1538 1 SyncTable 3 Write Data 20 +1539 1 SyncTable 3 Write Data 21 +1540 1 SyncTable 3 Write Data 22 +1541 1 SyncTable 3 Write Data 23 +1542 1 SyncTable 3 Write Data 24 +1543 1 SyncTable 3 Write Data 25 +1544 1 SyncTable 3 Write Data 26 +1545 1 SyncTable 3 Write Data 27 +1546 1 SyncTable 3 Write Data 28 +1547 1 SyncTable 3 Write Data 29 +1548 1 SyncTable 3 Write Data 30 +1549 1 SyncTable 3 Write Data 31 +1550 1 SyncTable 3 Write Data 32 +1551 1 SyncTable 3 Write Data 33 +1552 1 SyncTable 3 Write Data 34 +1553 1 SyncTable 3 Write Data 35 +1554 1 SyncTable 3 Write Data 36 +1555 1 SyncTable 3 Write Data 37 +1556 1 SyncTable 3 Write Data 38 +1557 1 SyncTable 3 Write Data 39 +1558 1 SyncTable 3 Write Data 40 +1559 1 SyncTable 3 Write Data 41 +1560 1 SyncTable 3 Write Data 42 +1561 1 SyncTable 3 Write Data 43 +1562 1 SyncTable 3 Write Data 44 +1563 1 SyncTable 3 Write Data 45 +1564 1 SyncTable 3 Write Data 46 +1565 1 SyncTable 3 Write Data 47 +1566 1 SyncTable 3 Write Data 48 +1567 1 SyncTable 3 Write Data 49 +1568 1 SyncTable 3 Write Data 50 +1569 1 SyncTable 3 Write Data 51 +1570 1 SyncTable 3 Write Data 52 +1571 1 SyncTable 3 Write Data 53 +1572 1 SyncTable 3 Write Data 54 +1573 1 SyncTable 3 Write Data 55 +1574 1 SyncTable 3 Write Data 56 +1575 1 SyncTable 3 Write Data 57 +1576 1 SyncTable 3 Write Data 58 +1577 1 SyncTable 3 Write Data 59 +1578 1 SyncTable 3 Write Data 60 +1579 1 SyncTable 3 Write Data 61 +1580 1 SyncTable 3 Write Data 62 +1581 1 SyncTable 3 Write Data 63 +1582 1 SyncTable 3 Write Data 64 +1583 1 SyncTable 3 Write Data 65 +1584 1 SyncTable 3 Write Data 66 +1585 1 SyncTable 3 Write Data 67 +1586 1 SyncTable 3 Write Data 68 +1587 1 SyncTable 3 Write Data 69 +1588 1 SyncTable 3 Write Data 70 +1589 1 SyncTable 3 Write Data 71 +1590 1 SyncTable 3 Write Data 72 +1591 1 SyncTable 4 ID 1 +1592 1 SyncTable 4 ID 2 +1593 1 SyncTable 4 ID 3 +1594 1 SyncTable 4 ID 4 +1595 1 SyncTable 4 ID 5 +1596 2 SyncTable 4 Read Address 1 +1598 2 SyncTable 4 Read Address 2 +1600 2 SyncTable 4 Read Address 3 +1602 2 SyncTable 4 Read Address 4 +1604 2 SyncTable 4 Read Address 5 +1606 2 SyncTable 4 Read Size 1 +1608 2 SyncTable 4 Read Size 2 +1610 2 SyncTable 4 Read Size 3 +1612 2 SyncTable 4 Read Size 4 +1614 2 SyncTable 4 Read Size 5 +1616 2 SyncTable 4 Write Address 1 +1618 2 SyncTable 4 Write Address 2 +1620 2 SyncTable 4 Write Address 3 +1622 2 SyncTable 4 Write Address 4 +1624 2 SyncTable 4 Write Address 5 +1626 2 SyncTable 4 Write Size 1 +1628 2 SyncTable 4 Write Size 2 +1630 2 SyncTable 4 Write Size 3 +1632 2 SyncTable 4 Write Size 4 +1634 2 SyncTable 4 Write Size 5 +1636 1 SyncTable 4 Read Data 1 +1637 1 SyncTable 4 Read Data 2 +1638 1 SyncTable 4 Read Data 3 +1639 1 SyncTable 4 Read Data 4 +1640 1 SyncTable 4 Read Data 5 +1641 1 SyncTable 4 Read Data 6 +1642 1 SyncTable 4 Read Data 7 +1643 1 SyncTable 4 Read Data 8 +1644 1 SyncTable 4 Read Data 9 +1645 1 SyncTable 4 Read Data 10 +1646 1 SyncTable 4 Read Data 11 +1647 1 SyncTable 4 Read Data 12 +1648 1 SyncTable 4 Read Data 13 +1649 1 SyncTable 4 Read Data 14 +1650 1 SyncTable 4 Read Data 15 +1651 1 SyncTable 4 Read Data 16 +1652 1 SyncTable 4 Read Data 17 +1653 1 SyncTable 4 Read Data 18 +1654 1 SyncTable 4 Read Data 19 +1655 1 SyncTable 4 Read Data 20 +1656 1 SyncTable 4 Read Data 21 +1657 1 SyncTable 4 Read Data 22 +1658 1 SyncTable 4 Read Data 23 +1659 1 SyncTable 4 Read Data 24 +1660 1 SyncTable 4 Read Data 25 +1661 1 SyncTable 4 Read Data 26 +1662 1 SyncTable 4 Read Data 27 +1663 1 SyncTable 4 Read Data 28 +1664 1 SyncTable 4 Read Data 29 +1665 1 SyncTable 4 Read Data 30 +1666 1 SyncTable 4 Read Data 31 +1667 1 SyncTable 4 Read Data 32 +1668 1 SyncTable 4 Read Data 33 +1669 1 SyncTable 4 Read Data 34 +1670 1 SyncTable 4 Read Data 35 +1671 1 SyncTable 4 Read Data 36 +1672 1 SyncTable 4 Read Data 37 +1673 1 SyncTable 4 Read Data 38 +1674 1 SyncTable 4 Read Data 39 +1675 1 SyncTable 4 Read Data 40 +1676 1 SyncTable 4 Read Data 41 +1677 1 SyncTable 4 Read Data 42 +1678 1 SyncTable 4 Read Data 43 +1679 1 SyncTable 4 Read Data 44 +1680 1 SyncTable 4 Read Data 45 +1681 1 SyncTable 4 Read Data 46 +1682 1 SyncTable 4 Read Data 47 +1683 1 SyncTable 4 Read Data 48 +1684 1 SyncTable 4 Read Data 49 +1685 1 SyncTable 4 Read Data 50 +1686 1 SyncTable 4 Read Data 51 +1687 1 SyncTable 4 Read Data 52 +1688 1 SyncTable 4 Read Data 53 +1689 1 SyncTable 4 Read Data 54 +1690 1 SyncTable 4 Read Data 55 +1691 1 SyncTable 4 Read Data 56 +1692 1 SyncTable 4 Read Data 57 +1693 1 SyncTable 4 Read Data 58 +1694 1 SyncTable 4 Read Data 59 +1695 1 SyncTable 4 Read Data 60 +1696 1 SyncTable 4 Read Data 61 +1697 1 SyncTable 4 Read Data 62 +1698 1 SyncTable 4 Read Data 63 +1699 1 SyncTable 4 Read Data 64 +1700 1 SyncTable 4 Read Data 65 +1701 1 SyncTable 4 Read Data 66 +1702 1 SyncTable 4 Read Data 67 +1703 1 SyncTable 4 Read Data 68 +1704 1 SyncTable 4 Read Data 69 +1705 1 SyncTable 4 Read Data 70 +1706 1 SyncTable 4 Read Data 71 +1707 1 SyncTable 4 Read Data 72 +1708 1 SyncTable 4 Write Data 1 +1709 1 SyncTable 4 Write Data 2 +1710 1 SyncTable 4 Write Data 3 +1711 1 SyncTable 4 Write Data 4 +1712 1 SyncTable 4 Write Data 5 +1713 1 SyncTable 4 Write Data 6 +1714 1 SyncTable 4 Write Data 7 +1715 1 SyncTable 4 Write Data 8 +1716 1 SyncTable 4 Write Data 9 +1717 1 SyncTable 4 Write Data 10 +1718 1 SyncTable 4 Write Data 11 +1719 1 SyncTable 4 Write Data 12 +1720 1 SyncTable 4 Write Data 13 +1721 1 SyncTable 4 Write Data 14 +1722 1 SyncTable 4 Write Data 15 +1723 1 SyncTable 4 Write Data 16 +1724 1 SyncTable 4 Write Data 17 +1725 1 SyncTable 4 Write Data 18 +1726 1 SyncTable 4 Write Data 19 +1727 1 SyncTable 4 Write Data 20 +1728 1 SyncTable 4 Write Data 21 +1729 1 SyncTable 4 Write Data 22 +1730 1 SyncTable 4 Write Data 23 +1731 1 SyncTable 4 Write Data 24 +1732 1 SyncTable 4 Write Data 25 +1733 1 SyncTable 4 Write Data 26 +1734 1 SyncTable 4 Write Data 27 +1735 1 SyncTable 4 Write Data 28 +1736 1 SyncTable 4 Write Data 29 +1737 1 SyncTable 4 Write Data 30 +1738 1 SyncTable 4 Write Data 31 +1739 1 SyncTable 4 Write Data 32 +1740 1 SyncTable 4 Write Data 33 +1741 1 SyncTable 4 Write Data 34 +1742 1 SyncTable 4 Write Data 35 +1743 1 SyncTable 4 Write Data 36 +1744 1 SyncTable 4 Write Data 37 +1745 1 SyncTable 4 Write Data 38 +1746 1 SyncTable 4 Write Data 39 +1747 1 SyncTable 4 Write Data 40 +1748 1 SyncTable 4 Write Data 41 +1749 1 SyncTable 4 Write Data 42 +1750 1 SyncTable 4 Write Data 43 +1751 1 SyncTable 4 Write Data 44 +1752 1 SyncTable 4 Write Data 45 +1753 1 SyncTable 4 Write Data 46 +1754 1 SyncTable 4 Write Data 47 +1755 1 SyncTable 4 Write Data 48 +1756 1 SyncTable 4 Write Data 49 +1757 1 SyncTable 4 Write Data 50 +1758 1 SyncTable 4 Write Data 51 +1759 1 SyncTable 4 Write Data 52 +1760 1 SyncTable 4 Write Data 53 +1761 1 SyncTable 4 Write Data 54 +1762 1 SyncTable 4 Write Data 55 +1763 1 SyncTable 4 Write Data 56 +1764 1 SyncTable 4 Write Data 57 +1765 1 SyncTable 4 Write Data 58 +1766 1 SyncTable 4 Write Data 59 +1767 1 SyncTable 4 Write Data 60 +1768 1 SyncTable 4 Write Data 61 +1769 1 SyncTable 4 Write Data 62 +1770 1 SyncTable 4 Write Data 63 +1771 1 SyncTable 4 Write Data 64 +1772 1 SyncTable 4 Write Data 65 +1773 1 SyncTable 4 Write Data 66 +1774 1 SyncTable 4 Write Data 67 +1775 1 SyncTable 4 Write Data 68 +1776 1 SyncTable 4 Write Data 69 +1777 1 SyncTable 4 Write Data 70 +1778 1 SyncTable 4 Write Data 71 +1779 1 SyncTable 4 Write Data 72 +1780 1 SyncTable 5 ID 1 +1781 1 SyncTable 5 ID 2 +1782 1 SyncTable 5 ID 3 +1783 1 SyncTable 5 ID 4 +1784 1 SyncTable 5 ID 5 +1785 2 SyncTable 5 Read Address 1 +1787 2 SyncTable 5 Read Address 2 +1789 2 SyncTable 5 Read Address 3 +1791 2 SyncTable 5 Read Address 4 +1793 2 SyncTable 5 Read Address 5 +1795 2 SyncTable 5 Read Size 1 +1797 2 SyncTable 5 Read Size 2 +1799 2 SyncTable 5 Read Size 3 +1801 2 SyncTable 5 Read Size 4 +1803 2 SyncTable 5 Read Size 5 +1805 2 SyncTable 5 Write Address 1 +1807 2 SyncTable 5 Write Address 2 +1809 2 SyncTable 5 Write Address 3 +1811 2 SyncTable 5 Write Address 4 +1813 2 SyncTable 5 Write Address 5 +1815 2 SyncTable 5 Write Size 1 +1817 2 SyncTable 5 Write Size 2 +1819 2 SyncTable 5 Write Size 3 +1821 2 SyncTable 5 Write Size 4 +1823 2 SyncTable 5 Write Size 5 +1825 1 SyncTable 5 Read Data 1 +1826 1 SyncTable 5 Read Data 2 +1827 1 SyncTable 5 Read Data 3 +1828 1 SyncTable 5 Read Data 4 +1829 1 SyncTable 5 Read Data 5 +1830 1 SyncTable 5 Read Data 6 +1831 1 SyncTable 5 Read Data 7 +1832 1 SyncTable 5 Read Data 8 +1833 1 SyncTable 5 Read Data 9 +1834 1 SyncTable 5 Read Data 10 +1835 1 SyncTable 5 Read Data 11 +1836 1 SyncTable 5 Read Data 12 +1837 1 SyncTable 5 Read Data 13 +1838 1 SyncTable 5 Read Data 14 +1839 1 SyncTable 5 Read Data 15 +1840 1 SyncTable 5 Read Data 16 +1841 1 SyncTable 5 Read Data 17 +1842 1 SyncTable 5 Read Data 18 +1843 1 SyncTable 5 Read Data 19 +1844 1 SyncTable 5 Read Data 20 +1845 1 SyncTable 5 Read Data 21 +1846 1 SyncTable 5 Read Data 22 +1847 1 SyncTable 5 Read Data 23 +1848 1 SyncTable 5 Read Data 24 +1849 1 SyncTable 5 Read Data 25 +1850 1 SyncTable 5 Read Data 26 +1851 1 SyncTable 5 Read Data 27 +1852 1 SyncTable 5 Read Data 28 +1853 1 SyncTable 5 Read Data 29 +1854 1 SyncTable 5 Read Data 30 +1855 1 SyncTable 5 Read Data 31 +1856 1 SyncTable 5 Read Data 32 +1857 1 SyncTable 5 Read Data 33 +1858 1 SyncTable 5 Read Data 34 +1859 1 SyncTable 5 Read Data 35 +1860 1 SyncTable 5 Read Data 36 +1861 1 SyncTable 5 Read Data 37 +1862 1 SyncTable 5 Read Data 38 +1863 1 SyncTable 5 Read Data 39 +1864 1 SyncTable 5 Read Data 40 +1865 1 SyncTable 5 Read Data 41 +1866 1 SyncTable 5 Read Data 42 +1867 1 SyncTable 5 Read Data 43 +1868 1 SyncTable 5 Read Data 44 +1869 1 SyncTable 5 Read Data 45 +1870 1 SyncTable 5 Read Data 46 +1871 1 SyncTable 5 Read Data 47 +1872 1 SyncTable 5 Read Data 48 +1873 1 SyncTable 5 Read Data 49 +1874 1 SyncTable 5 Read Data 50 +1875 1 SyncTable 5 Read Data 51 +1876 1 SyncTable 5 Read Data 52 +1877 1 SyncTable 5 Read Data 53 +1878 1 SyncTable 5 Read Data 54 +1879 1 SyncTable 5 Read Data 55 +1880 1 SyncTable 5 Read Data 56 +1881 1 SyncTable 5 Read Data 57 +1882 1 SyncTable 5 Read Data 58 +1883 1 SyncTable 5 Read Data 59 +1884 1 SyncTable 5 Read Data 60 +1885 1 SyncTable 5 Read Data 61 +1886 1 SyncTable 5 Read Data 62 +1887 1 SyncTable 5 Read Data 63 +1888 1 SyncTable 5 Read Data 64 +1889 1 SyncTable 5 Read Data 65 +1890 1 SyncTable 5 Read Data 66 +1891 1 SyncTable 5 Read Data 67 +1892 1 SyncTable 5 Read Data 68 +1893 1 SyncTable 5 Read Data 69 +1894 1 SyncTable 5 Read Data 70 +1895 1 SyncTable 5 Read Data 71 +1896 1 SyncTable 5 Read Data 72 +1897 1 SyncTable 5 Write Data 1 +1898 1 SyncTable 5 Write Data 2 +1899 1 SyncTable 5 Write Data 3 +1900 1 SyncTable 5 Write Data 4 +1901 1 SyncTable 5 Write Data 5 +1902 1 SyncTable 5 Write Data 6 +1903 1 SyncTable 5 Write Data 7 +1904 1 SyncTable 5 Write Data 8 +1905 1 SyncTable 5 Write Data 9 +1906 1 SyncTable 5 Write Data 10 +1907 1 SyncTable 5 Write Data 11 +1908 1 SyncTable 5 Write Data 12 +1909 1 SyncTable 5 Write Data 13 +1910 1 SyncTable 5 Write Data 14 +1911 1 SyncTable 5 Write Data 15 +1912 1 SyncTable 5 Write Data 16 +1913 1 SyncTable 5 Write Data 17 +1914 1 SyncTable 5 Write Data 18 +1915 1 SyncTable 5 Write Data 19 +1916 1 SyncTable 5 Write Data 20 +1917 1 SyncTable 5 Write Data 21 +1918 1 SyncTable 5 Write Data 22 +1919 1 SyncTable 5 Write Data 23 +1920 1 SyncTable 5 Write Data 24 +1921 1 SyncTable 5 Write Data 25 +1922 1 SyncTable 5 Write Data 26 +1923 1 SyncTable 5 Write Data 27 +1924 1 SyncTable 5 Write Data 28 +1925 1 SyncTable 5 Write Data 29 +1926 1 SyncTable 5 Write Data 30 +1927 1 SyncTable 5 Write Data 31 +1928 1 SyncTable 5 Write Data 32 +1929 1 SyncTable 5 Write Data 33 +1930 1 SyncTable 5 Write Data 34 +1931 1 SyncTable 5 Write Data 35 +1932 1 SyncTable 5 Write Data 36 +1933 1 SyncTable 5 Write Data 37 +1934 1 SyncTable 5 Write Data 38 +1935 1 SyncTable 5 Write Data 39 +1936 1 SyncTable 5 Write Data 40 +1937 1 SyncTable 5 Write Data 41 +1938 1 SyncTable 5 Write Data 42 +1939 1 SyncTable 5 Write Data 43 +1940 1 SyncTable 5 Write Data 44 +1941 1 SyncTable 5 Write Data 45 +1942 1 SyncTable 5 Write Data 46 +1943 1 SyncTable 5 Write Data 47 +1944 1 SyncTable 5 Write Data 48 +1945 1 SyncTable 5 Write Data 49 +1946 1 SyncTable 5 Write Data 50 +1947 1 SyncTable 5 Write Data 51 +1948 1 SyncTable 5 Write Data 52 +1949 1 SyncTable 5 Write Data 53 +1950 1 SyncTable 5 Write Data 54 +1951 1 SyncTable 5 Write Data 55 +1952 1 SyncTable 5 Write Data 56 +1953 1 SyncTable 5 Write Data 57 +1954 1 SyncTable 5 Write Data 58 +1955 1 SyncTable 5 Write Data 59 +1956 1 SyncTable 5 Write Data 60 +1957 1 SyncTable 5 Write Data 61 +1958 1 SyncTable 5 Write Data 62 +1959 1 SyncTable 5 Write Data 63 +1960 1 SyncTable 5 Write Data 64 +1961 1 SyncTable 5 Write Data 65 +1962 1 SyncTable 5 Write Data 66 +1963 1 SyncTable 5 Write Data 67 +1964 1 SyncTable 5 Write Data 68 +1965 1 SyncTable 5 Write Data 69 +1966 1 SyncTable 5 Write Data 70 +1967 1 SyncTable 5 Write Data 71 +1968 1 SyncTable 5 Write Data 72 diff --git a/param/dxl_model/hand_finger_joint_1.model b/param/dxl_model/hand_finger_joint_1.model new file mode 100644 index 0000000..863eee9 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_1.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1447 2 Present Current +1449 2 Present Velocity +1451 2 Present Position +1519 2 Goal Current +1521 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_11.model b/param/dxl_model/hand_finger_joint_11.model new file mode 100644 index 0000000..b87b6cf --- /dev/null +++ b/param/dxl_model/hand_finger_joint_11.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1258 2 Present Current +1260 2 Present Velocity +1262 2 Present Position +1330 2 Goal Current +1332 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_12.model b/param/dxl_model/hand_finger_joint_12.model new file mode 100644 index 0000000..f0ddc5c --- /dev/null +++ b/param/dxl_model/hand_finger_joint_12.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1264 2 Present Current +1266 2 Present Velocity +1268 2 Present Position +1334 2 Goal Current +1336 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_13.model b/param/dxl_model/hand_finger_joint_13.model new file mode 100644 index 0000000..83ab76c --- /dev/null +++ b/param/dxl_model/hand_finger_joint_13.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1270 2 Present Current +1272 2 Present Velocity +1274 2 Present Position +1338 2 Goal Current +1340 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_14.model b/param/dxl_model/hand_finger_joint_14.model new file mode 100644 index 0000000..7910a58 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_14.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1276 2 Present Current +1278 2 Present Velocity +1280 2 Present Position +1342 2 Goal Current +1344 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_16.model b/param/dxl_model/hand_finger_joint_16.model new file mode 100644 index 0000000..0e43acb --- /dev/null +++ b/param/dxl_model/hand_finger_joint_16.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1636 2 Present Current +1638 2 Present Velocity +1640 2 Present Position +1708 2 Goal Current +1710 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_17.model b/param/dxl_model/hand_finger_joint_17.model new file mode 100644 index 0000000..459fc46 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_17.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1642 2 Present Current +1644 2 Present Velocity +1646 2 Present Position +1712 2 Goal Current +1714 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_18.model b/param/dxl_model/hand_finger_joint_18.model new file mode 100644 index 0000000..3f8a811 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_18.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1648 2 Present Current +1650 2 Present Velocity +1652 2 Present Position +1716 2 Goal Current +1718 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_19.model b/param/dxl_model/hand_finger_joint_19.model new file mode 100644 index 0000000..527a369 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_19.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1654 2 Present Current +1656 2 Present Velocity +1658 2 Present Position +1720 2 Goal Current +1722 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_2.model b/param/dxl_model/hand_finger_joint_2.model new file mode 100644 index 0000000..79c55d9 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_2.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1453 2 Present Current +1455 2 Present Velocity +1457 2 Present Position +1523 2 Goal Current +1525 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_21.model b/param/dxl_model/hand_finger_joint_21.model new file mode 100644 index 0000000..a0ac3cf --- /dev/null +++ b/param/dxl_model/hand_finger_joint_21.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1069 2 Present Current +1071 2 Present Velocity +1073 2 Present Position +1141 2 Goal Current +1143 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_22.model b/param/dxl_model/hand_finger_joint_22.model new file mode 100644 index 0000000..a920089 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_22.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1075 2 Present Current +1077 2 Present Velocity +1079 2 Present Position +1145 2 Goal Current +1147 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_23.model b/param/dxl_model/hand_finger_joint_23.model new file mode 100644 index 0000000..7562c8c --- /dev/null +++ b/param/dxl_model/hand_finger_joint_23.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1081 2 Present Current +1083 2 Present Velocity +1085 2 Present Position +1149 2 Goal Current +1151 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_24.model b/param/dxl_model/hand_finger_joint_24.model new file mode 100644 index 0000000..7e0732c --- /dev/null +++ b/param/dxl_model/hand_finger_joint_24.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1087 2 Present Current +1089 2 Present Velocity +1091 2 Present Position +1153 2 Goal Current +1155 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_3.model b/param/dxl_model/hand_finger_joint_3.model new file mode 100644 index 0000000..7d8a0d2 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_3.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1459 2 Present Current +1461 2 Present Velocity +1463 2 Present Position +1527 2 Goal Current +1529 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_4.model b/param/dxl_model/hand_finger_joint_4.model new file mode 100644 index 0000000..eabfe56 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_4.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1465 2 Present Current +1467 2 Present Velocity +1469 2 Present Position +1531 2 Goal Current +1533 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_6.model b/param/dxl_model/hand_finger_joint_6.model new file mode 100644 index 0000000..fd50e1e --- /dev/null +++ b/param/dxl_model/hand_finger_joint_6.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1825 2 Present Current +1827 2 Present Velocity +1829 2 Present Position +1897 2 Goal Current +1899 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_7.model b/param/dxl_model/hand_finger_joint_7.model new file mode 100644 index 0000000..83136e2 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_7.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1831 2 Present Current +1833 2 Present Velocity +1835 2 Present Position +1901 2 Goal Current +1903 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_8.model b/param/dxl_model/hand_finger_joint_8.model new file mode 100644 index 0000000..93ec434 --- /dev/null +++ b/param/dxl_model/hand_finger_joint_8.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1837 2 Present Current +1839 2 Present Velocity +1841 2 Present Position +1905 2 Goal Current +1907 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_9.model b/param/dxl_model/hand_finger_joint_9.model new file mode 100644 index 0000000..f710ddf --- /dev/null +++ b/param/dxl_model/hand_finger_joint_9.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1843 2 Present Current +1845 2 Present Velocity +1847 2 Present Position +1909 2 Goal Current +1911 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_10.model b/param/dxl_model/hand_pressure_sensor_10.model new file mode 100644 index 0000000..edf833b --- /dev/null +++ b/param/dxl_model/hand_pressure_sensor_10.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1849 1 Present Pressure 1 +1850 1 Present Pressure 2 +1851 1 Present Pressure 3 +1852 1 Present Pressure 4 +1853 1 Present Pressure 5 +1854 1 Present Pressure 6 +1855 1 Present Pressure 7 +1856 1 Present Pressure 8 +1857 1 Present Pressure 9 diff --git a/param/dxl_model/hand_pressure_sensor_15.model b/param/dxl_model/hand_pressure_sensor_15.model new file mode 100644 index 0000000..ace29f5 --- /dev/null +++ b/param/dxl_model/hand_pressure_sensor_15.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1282 1 Present Pressure 1 +1283 1 Present Pressure 2 +1284 1 Present Pressure 3 +1285 1 Present Pressure 4 +1286 1 Present Pressure 5 +1287 1 Present Pressure 6 +1288 1 Present Pressure 7 +1289 1 Present Pressure 8 +1290 1 Present Pressure 9 diff --git a/param/dxl_model/hand_pressure_sensor_20.model b/param/dxl_model/hand_pressure_sensor_20.model new file mode 100644 index 0000000..52cb655 --- /dev/null +++ b/param/dxl_model/hand_pressure_sensor_20.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1660 1 Present Pressure 1 +1661 1 Present Pressure 2 +1662 1 Present Pressure 3 +1663 1 Present Pressure 4 +1664 1 Present Pressure 5 +1665 1 Present Pressure 6 +1666 1 Present Pressure 7 +1667 1 Present Pressure 8 +1668 1 Present Pressure 9 diff --git a/param/dxl_model/hand_pressure_sensor_25.model b/param/dxl_model/hand_pressure_sensor_25.model new file mode 100644 index 0000000..02232c0 --- /dev/null +++ b/param/dxl_model/hand_pressure_sensor_25.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1093 1 Present Pressure 1 +1094 1 Present Pressure 2 +1095 1 Present Pressure 3 +1096 1 Present Pressure 4 +1097 1 Present Pressure 5 +1098 1 Present Pressure 6 +1099 1 Present Pressure 7 +1100 1 Present Pressure 8 +1101 1 Present Pressure 9 diff --git a/param/dxl_model/hand_pressure_sensor_5.model b/param/dxl_model/hand_pressure_sensor_5.model new file mode 100644 index 0000000..f2e21c4 --- /dev/null +++ b/param/dxl_model/hand_pressure_sensor_5.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1471 1 Present Pressure 1 +1472 1 Present Pressure 2 +1473 1 Present Pressure 3 +1474 1 Present Pressure 4 +1475 1 Present Pressure 5 +1476 1 Present Pressure 6 +1477 1 Present Pressure 7 +1478 1 Present Pressure 8 +1479 1 Present Pressure 9 diff --git a/param/dxl_model/xc335_t332.model b/param/dxl_model/xc335_t332.model new file mode 100644 index 0000000..dc255e9 --- /dev/null +++ b/param/dxl_model/xc335_t332.model @@ -0,0 +1,130 @@ +[type info] +name value +value_of_zero_radian_position 2048 +value_of_max_radian_position 4095 +value_of_min_radian_position 0 +min_radian -3.14159265 +max_radian 3.14159265 + +[unit info] +Data Name value unit Sign Type +Present Velocity 0.0239691227 rad/s signed +Goal Velocity 0.0239691227 rad/s signed +Present Current 1.0 raw signed +Goal Current 1.0 raw signed + +[control table] +Address Size Data Name +0 2 Model Number +2 4 Model Information +6 1 Firmware Version +7 1 ID +8 1 Baud Rate +9 1 Return Delay Time +10 1 Drive Mode +11 1 Operating Mode +12 1 Secondary(Shadow) ID +13 1 Protocol Type +20 4 Homing Offset +24 4 Moving Threshold +31 1 Temperature Limit +32 2 Max Voltage Limit +34 2 Min Voltage Limit +36 2 PWM Limit +38 2 Current Limit +44 4 Velocity Limit +48 4 Max Position Limit +52 4 Min Position Limit +60 2 Startup Configuration +62 1 PWM Slope +63 1 Shutdown +64 1 Torque Enable +65 1 LED +68 1 Status Return Level +69 1 Registered Instruction +70 1 Hardware Error Status +76 2 Velocity I Gain +78 2 Velocity P Gain +80 2 Position D Gain +82 2 Position I Gain +84 2 Position P Gain +88 2 Feedforward 2nd Gain +90 2 Feedforward 1st Gain +98 1 Bus Watchdog +100 2 Goal PWM +102 2 Goal Current +104 4 Goal Velocity +108 4 Profile Acceleration +112 4 Profile Velocity +116 4 Goal Position +120 2 Realtime Tick +122 1 Moving +123 1 Moving Status +124 2 Present PWM +126 2 Present Current +128 4 Present Velocity +132 4 Present Position +136 4 Velocity Trajectory +140 4 Position Trajectory +144 2 Present Input Voltage +146 1 Present Temperature +168 2 Indirect Address 1 +170 2 Indirect Address 2 +172 2 Indirect Address 3 +174 2 Indirect Address 4 +176 2 Indirect Address 5 +178 2 Indirect Address 6 +180 2 Indirect Address 7 +182 2 Indirect Address 8 +184 2 Indirect Address 9 +186 2 Indirect Address 10 +188 2 Indirect Address 11 +190 2 Indirect Address 12 +192 2 Indirect Address 13 +194 2 Indirect Address 14 +196 2 Indirect Address 15 +198 2 Indirect Address 16 +200 2 Indirect Address 17 +202 2 Indirect Address 18 +204 2 Indirect Address 19 +206 2 Indirect Address 20 +208 2 Indirect Address 21 +210 2 Indirect Address 22 +212 2 Indirect Address 23 +214 2 Indirect Address 24 +216 2 Indirect Address 25 +218 2 Indirect Address 26 +220 2 Indirect Address 27 +222 2 Indirect Address 28 +224 1 Indirect Data 1 +226 1 Indirect Data 2 +228 1 Indirect Data 3 +230 1 Indirect Data 4 +232 1 Indirect Data 5 +234 1 Indirect Data 6 +236 1 Indirect Data 7 +238 1 Indirect Data 8 +240 1 Indirect Data 9 +242 1 Indirect Data 10 +244 1 Indirect Data 11 +246 1 Indirect Data 12 +248 1 Indirect Data 13 +250 1 Indirect Data 14 +252 1 Indirect Data 15 +254 1 Indirect Data 16 +256 1 Indirect Data 17 +258 1 Indirect Data 18 +260 1 Indirect Data 19 +262 1 Indirect Data 20 +264 1 Indirect Data 21 +266 1 Indirect Data 22 +268 1 Indirect Data 23 +270 1 Indirect Data 24 +272 1 Indirect Data 25 +274 1 Indirect Data 26 +276 1 Indirect Data 27 +278 1 Indirect Data 28 +168 2 Indirect Address Write +224 1 Indirect Data Write +180 2 Indirect Address Read +230 1 Indirect Data Read diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 87234d2..7c7ed66 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -80,86 +80,86 @@ Dynamixel::~Dynamixel() fprintf(stderr, "Dynamixel destructor end\n"); } -DxlError Dynamixel::ReadDxlModelFile(uint8_t id, uint16_t model_num) +DxlError Dynamixel::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num) { try { - dxl_info_.ReadDxlModelFile(id, model_num); + dxl_info_.ReadDxlModelFile(comm_id, id, model_num); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][ID:%03d] Error reading model file: %s\n", id, e.what()); + fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } -DxlError Dynamixel::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t firmware_version) +DxlError Dynamixel::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version) { try { - dxl_info_.ReadDxlModelFile(id, model_num, firmware_version); + dxl_info_.ReadDxlModelFile(comm_id, id, model_num, firmware_version); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][ID:%03d] Error reading model file: %s\n", id, e.what()); + fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } -DxlError Dynamixel::ReadFirmwareVersion(uint8_t id, uint8_t & firmware_version) +DxlError Dynamixel::ReadFirmwareVersion(uint8_t comm_id, uint8_t id, uint8_t & firmware_version) { uint32_t fw_version_data; - DxlError result = ReadItem(id, "Firmware Version", fw_version_data); + DxlError result = ReadItem(comm_id, id, "Firmware Version", fw_version_data); if (result == DxlError::OK) { firmware_version = static_cast(fw_version_data); - // fprintf(stderr, "[ReadFirmwareVersion][ID:%03d] Firmware Version: %d\n", - // id, firmware_version); } else { - fprintf(stderr, "[ReadFirmwareVersion][ID:%03d] Failed to read firmware version\n", id); + fprintf(stderr, "[ReadFirmwareVersion][comm_id:%03d][ID:%03d] Failed to read firmware version\n", comm_id, id); } return result; } -DxlError Dynamixel::InitTorqueStates(std::vector id_arr, bool disable_torque) +DxlError Dynamixel::InitTorqueStates(std::vector> comm_id_id_arr, + bool disable_torque) { - for (auto it_id : id_arr) { + for (auto it_pair : comm_id_id_arr) { + uint8_t it_comm = it_pair.first; + uint8_t it_id = it_pair.second; try { - if (dxl_info_.CheckDxlControlItem(it_id, "Torque Enable")) { + if (dxl_info_.CheckDxlControlItem(it_comm, it_id, "Torque Enable")) { uint32_t torque_state = 0; - DxlError result = ReadItem(it_id, "Torque Enable", torque_state); + DxlError result = ReadItem(it_comm, it_id, "Torque Enable", torque_state); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][ID:%03d] Error reading torque state\n", it_id); + fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error reading torque state\n", it_comm, it_id); return result; } - torque_state_[it_id] = torque_state; + torque_state_[{it_comm, it_id}] = torque_state; - if (torque_state_[it_id] == TORQUE_ON) { + if (torque_state_[{it_comm, it_id}] == TORQUE_ON) { if (disable_torque) { fprintf( - stderr, "[InitTorqueStates][ID:%03d] Torque is enabled, disabling torque\n", - it_id); - result = WriteItem(it_id, "Torque Enable", TORQUE_OFF); + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, disabling torque\n", it_comm, it_id); + result = WriteItem(it_comm, it_id, "Torque Enable", TORQUE_OFF); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][ID:%03d] Error disabling torque\n", it_id); + fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error disabling torque\n", it_comm, it_id); return result; } - torque_state_[it_id] = TORQUE_OFF; + torque_state_[{it_comm, it_id}] = TORQUE_OFF; } else { - torque_state_[it_id] = TORQUE_OFF; + torque_state_[{it_comm, it_id}] = TORQUE_OFF; fprintf( stderr, - "[InitTorqueStates][ID:%03d] Torque is enabled, cannot proceed. Set " + "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, cannot proceed. Set " "'disable_torque_at_init' parameter to 'true' to disable torque at initialization " "or disable torque manually.\n", - it_id); + it_comm, it_id); return DxlError::DXL_HARDWARE_ERROR; } } fprintf( - stderr, "[InitTorqueStates][ID:%03d] Current torque state: %s\n", it_id, - torque_state_[it_id] ? "ON" : "OFF"); + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Current torque state: %s\n", it_comm, it_id, + torque_state_[{it_comm, it_id}] ? "ON" : "OFF"); } } catch (const std::exception & e) { fprintf( - stderr, "[InitTorqueStates][ID:%03d] Error checking control item: %s\n", it_id, + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error checking control item: %s\n", it_comm, it_id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -168,34 +168,36 @@ DxlError Dynamixel::InitTorqueStates(std::vector id_arr, bool disable_t } DxlError Dynamixel::InitDxlComm( - std::vector id_arr, + std::vector> comm_id_id_arr, std::string port_name, std::string baudrate) { - port_handler_ = dynamixel::PortHandler::getPortHandler(port_name.c_str()); // port name + port_handler_ = dynamixel::PortHandler::getPortHandler(port_name.c_str()); packet_handler_ = dynamixel::PacketHandler::getPacketHandler(); if (port_handler_->openPort()) { - fprintf(stderr, "Succeeded to open the port!\n"); + fprintf(stderr, "Succeeded to open the port [%s]!\n", port_name.c_str()); } else { - fprintf(stderr, "Failed to open the port!\n"); + fprintf(stderr, "Failed to open the port [%s]!\n", port_name.c_str()); return DxlError::OPEN_PORT_FAIL; } if (port_handler_->setBaudRate(stoi(baudrate))) { - fprintf(stderr, "Succeeded to change the [%d] baudrate!\n", stoi(baudrate)); + fprintf(stderr, "Succeeded to change the baudrate [%s]!\n", baudrate.c_str()); } else { - fprintf(stderr, "Failed to change the baudrate!\n"); + fprintf(stderr, "Failed to change the baudrate [%s]!\n", baudrate.c_str()); return DxlError::OPEN_PORT_FAIL; } uint16_t dxl_model_number; uint8_t dxl_error = 0; - for (auto it_id : id_arr) { - fprintf(stderr, "[ID:%03d] Request ping\t", it_id); + for (auto pr : comm_id_id_arr) { + uint8_t comm_id = pr.first; + uint8_t id = pr.second; + fprintf(stderr, "[comm_id:%03d][ID:%03d] Request ping\t", comm_id, id); int dxl_comm_result = packet_handler_->ping( - port_handler_, it_id, &dxl_model_number, &dxl_error); + port_handler_, comm_id, &dxl_model_number, &dxl_error); if (dxl_comm_result != COMM_SUCCESS) { fprintf(stderr, " - COMM_ERROR : %s\n", packet_handler_->getTxRxResult(dxl_comm_result)); return DxlError::CANNOT_FIND_CONTROL_ITEM; @@ -203,9 +205,9 @@ DxlError Dynamixel::InitDxlComm( // First, read the model file to get the control table structure try { - dxl_info_.ReadDxlModelFile(it_id, dxl_model_number); + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][ID:%03d] Error reading model file: %s\n", it_id, e.what()); + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -216,13 +218,13 @@ DxlError Dynamixel::InitDxlComm( uint16_t hw_error_addr, error_code_addr; uint8_t hw_error_size, error_code_size; bool hw_error_exists = dxl_info_.GetDxlControlItem( - it_id, "Hardware Error Status", hw_error_addr, hw_error_size); + comm_id, id, "Hardware Error Status", hw_error_addr, hw_error_size); bool error_code_exists = dxl_info_.GetDxlControlItem( - it_id, "Error Code", error_code_addr, error_code_size); + comm_id, id, "Error Code", error_code_addr, error_code_size); if (hw_error_exists) { uint32_t hw_error_status = 0; - ReadItem(it_id, "Hardware Error Status", hw_error_status); + ReadItem(comm_id, id, "Hardware Error Status", hw_error_status); std::string error_string = ""; uint8_t hw_error_byte = static_cast(hw_error_status); @@ -241,35 +243,35 @@ DxlError Dynamixel::InitDxlComm( if (!error_string.empty()) { fprintf( - stderr, "[ID:%03d] Hardware Error Details: 0x%x (%d): %s\n", - it_id, hw_error_byte, hw_error_byte, error_string.c_str()); + stderr, "[comm_id:%03d][ID:%03d] Hardware Error Details: 0x%x (%d): %s\n", + comm_id, id, hw_error_byte, hw_error_byte, error_string.c_str()); } } else if (error_code_exists) { uint32_t error_code = 0; - ReadItem(it_id, "Error Code", error_code); + ReadItem(comm_id, id, "Error Code", error_code); uint8_t error_code_byte = static_cast(error_code); if (error_code_byte != 0x00) { const ErrorCodeInfo * error_info = get_error_code_info(error_code_byte); if (error_info) { fprintf( - stderr, "[ID:%03d] Error Code Details: 0x%x (%s): %s\n", - it_id, error_code_byte, error_info->label, error_info->description); + stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (%s): %s\n", + comm_id, id, error_code_byte, error_info->label, error_info->description); } else { fprintf( - stderr, "[ID:%03d] Error Code Details: 0x%x (Unknown Error Code)\n", - it_id, error_code_byte); + stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (Unknown Error Code)\n", + comm_id, id, error_code_byte); } } } else { fprintf( stderr, - "[ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", - it_id + "[comm_id:%03d][ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", + comm_id, id ); } - Reboot(it_id); + Reboot(id); return DxlError::DXL_HARDWARE_ERROR; } else { std::string model_name = dxl_info_.GetModelName(dxl_model_number); @@ -278,26 +280,28 @@ DxlError Dynamixel::InitDxlComm( model_name.c_str()); } - // Read firmware version and reload model file with firmware-specific version if available + try { + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); + } catch (const std::exception & e) { + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + return DxlError::CANNOT_FIND_CONTROL_ITEM; + } + uint8_t firmware_version = 0; - DxlError fw_result = ReadFirmwareVersion(it_id, firmware_version); + DxlError fw_result = ReadFirmwareVersion(comm_id, id, firmware_version); if (fw_result == DxlError::OK && firmware_version > 0) { - // fprintf(stderr, "[InitDxlComm][ID:%03d] Reloading model file with firmware version %d\n", - // it_id, firmware_version); try { - dxl_info_.ReadDxlModelFile(it_id, dxl_model_number, firmware_version); + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number, firmware_version); } catch (const std::exception & e) { fprintf( - stderr, "[InitDxlComm][ID:%03d] Error reading firmware-specific model file: %s\n", - it_id, e.what()); - // Continue with the base model file if firmware-specific file fails + stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", + comm_id, id, e.what()); } } } read_data_list_.clear(); write_data_list_.clear(); - return DxlError::OK; } @@ -332,13 +336,13 @@ void Dynamixel::RWDataReset() } DxlError Dynamixel::SetDxlReadItems( - uint8_t id, uint8_t comm_id, + uint8_t id, std::vector item_names, std::vector> data_vec_ptr) { if (item_names.size() == 0) { - fprintf(stderr, "[ID:%03d] No (Sync or Bulk) Read Item\n", id); + fprintf(stderr, "[comm_id:%03d][ID:%03d] No (Sync or Bulk) Read Item\n", comm_id, id); return DxlError::OK; } @@ -356,9 +360,9 @@ DxlError Dynamixel::SetDxlReadItems( for (auto it_name : item_names) { uint16_t ITEM_ADDR; uint8_t ITEM_SIZE; - if (dxl_info_.GetDxlControlItem(id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[ID:%03d] Cannot find control item in model file : %s\n", id, + stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -441,13 +445,13 @@ DxlError Dynamixel::SetMultiDxlRead() } DxlError Dynamixel::SetDxlWriteItems( - uint8_t id, uint8_t comm_id, + uint8_t id, std::vector item_names, std::vector> data_vec_ptr) { if (item_names.size() == 0) { - fprintf(stderr, "[ID:%03d] No (Sync or Bulk) Write Item\n", id); + fprintf(stderr, "[comm_id:%03d][ID:%03d] No (Sync or Bulk) Write Item\n", comm_id, id); return DxlError::OK; } @@ -464,9 +468,9 @@ DxlError Dynamixel::SetDxlWriteItems( for (auto it_name : item_names) { uint16_t ITEM_ADDR; uint8_t ITEM_SIZE; - if (dxl_info_.GetDxlControlItem(id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[ID:%03d] Cannot find control item in model file : %s\n", id, + stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -546,38 +550,42 @@ DxlError Dynamixel::SetMultiDxlWrite() } } -DxlError Dynamixel::DynamixelEnable(std::vector id_arr) +DxlError Dynamixel::DynamixelEnable(const std::vector> & comm_id_id_arr) { - for (auto it_id : id_arr) { - if (dxl_info_.CheckDxlControlItem(it_id, "Torque Enable") == false) { + for (auto p : comm_id_id_arr) { + uint8_t comm_id = p.first; + uint8_t id = p.second; + if (dxl_info_.CheckDxlControlItem(comm_id, id, "Torque Enable") == false) { continue; } - if (torque_state_[it_id] == TORQUE_OFF) { - if (WriteItem(it_id, "Torque Enable", TORQUE_ON) < 0) { - fprintf(stderr, "[ID:%03d] Cannot write \"Torque On\" command!\n", it_id); + if (torque_state_[{comm_id, id}] == TORQUE_OFF) { + if (WriteItem(comm_id, id, "Torque Enable", TORQUE_ON) < 0) { + fprintf(stderr, "[comm_id:%03d][ID:%03d] Cannot write \"Torque On\" command!\n", comm_id, id); return DxlError::ITEM_WRITE_FAIL; } - torque_state_[it_id] = TORQUE_ON; - fprintf(stderr, "[ID:%03d] Torque ON\n", it_id); + torque_state_[{comm_id, id}] = TORQUE_ON; + fprintf(stderr, "[comm_id:%03d][ID:%03d] Torque ON\n", comm_id, id); } } return DxlError::OK; } -DxlError Dynamixel::DynamixelDisable(std::vector id_arr) +DxlError Dynamixel::DynamixelDisable(const std::vector> & comm_id_id_arr) { DxlError result = DxlError::OK; - for (auto it_id : id_arr) { - if (dxl_info_.CheckDxlControlItem(it_id, "Torque Enable") == false) { + for (auto p : comm_id_id_arr) { + uint8_t comm_id = p.first; + uint8_t id = p.second; + if (dxl_info_.CheckDxlControlItem(comm_id, id, "Torque Enable") == false) { continue; } - if (torque_state_[it_id] == TORQUE_ON) { - if (WriteItem(it_id, "Torque Enable", TORQUE_OFF) < 0) { - fprintf(stderr, "[ID:%03d] Cannot write \"Torque Off\" command!\n", it_id); + if (torque_state_[{comm_id, id}] == TORQUE_ON) { + if (WriteItem(comm_id, id, "Torque Enable", TORQUE_OFF) < 0) { + fprintf(stderr, "[comm_id:%03d][ID:%03d] Cannot write \"Torque Off\" command!\n", comm_id, id); result = DxlError::ITEM_WRITE_FAIL; } else { - torque_state_[it_id] = TORQUE_OFF; - fprintf(stderr, "[ID:%03d] Torque OFF\n", it_id); + torque_state_[{comm_id, id}] = TORQUE_OFF; + fprintf(stderr, "[comm_id:%03d][ID:%03d] Torque OFF\n", comm_id, id); } } } @@ -604,23 +612,21 @@ DxlError Dynamixel::DynamixelDisable(std::vector id_arr) // return DxlError::OK; // } -DxlError Dynamixel::WriteItem(uint8_t id, std::string item_name, uint32_t data) +DxlError Dynamixel::WriteItem(uint8_t comm_id, uint8_t id, std::string item_name, uint32_t data) { uint16_t ITEM_ADDR; uint8_t ITEM_SIZE; - if (dxl_info_.GetDxlControlItem(id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(comm_id, id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[WriteItem][ID:%03d] Cannot find control item in model file. : %s\n", id, + stderr, "[WriteItem][comm_id:%03d][ID:%03d] Cannot find control item in model file. : %s\n", comm_id, id, item_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } - - return WriteItem(id, ITEM_ADDR, ITEM_SIZE, data); + return WriteItem(comm_id, id, ITEM_ADDR, ITEM_SIZE, data); } -DxlError Dynamixel::WriteItem(uint8_t id, uint16_t addr, uint8_t size, uint32_t data) +DxlError Dynamixel::WriteItem(uint8_t comm_id, uint8_t id, uint16_t addr, uint8_t size, uint32_t data) { - uint8_t comm_id = comm_id_[id]; for (int i = 0; i < MAX_COMM_RETRIES; i++) { int dxl_comm_result = COMM_TX_FAIL; uint8_t dxl_error = 0; @@ -673,12 +679,13 @@ DxlError Dynamixel::InsertWriteItemBuf(uint8_t id, std::string item_name, uint32 { RWItemBufInfo item; + item.comm_id = id; item.id = id; item.control_item.item_name = item_name; item.data = data; if (dxl_info_.GetDxlControlItem( - id, item_name, item.control_item.address, + id, id, item_name, item.control_item.address, item.control_item.size) == false) { fprintf(stderr, "Cannot find control item in model file.\n"); @@ -695,32 +702,32 @@ DxlError Dynamixel::WriteItemBuf() // set torque state variable (ON or OFF) if (strcmp(it_write_item.control_item.item_name.c_str(), "Torque Enable") == 0) { if (WriteItem( - it_write_item.id, it_write_item.control_item.address, + it_write_item.comm_id, it_write_item.id, it_write_item.control_item.address, it_write_item.control_item.size, it_write_item.data) < 0) { return DxlError::ITEM_WRITE_FAIL; } - torque_state_[it_write_item.id] = it_write_item.data; + torque_state_[{it_write_item.comm_id, it_write_item.id}] = it_write_item.data; fprintf( - stderr, "[ID:%03d] Set Torque %s\n", it_write_item.id, - torque_state_[it_write_item.id] ? "ON" : "OFF"); + stderr, "[comm_id:%03d][ID:%03d] Set Torque %s\n", it_write_item.comm_id, it_write_item.id, + torque_state_[{it_write_item.comm_id, it_write_item.id}] ? "ON" : "OFF"); } else { - if ((dxl_info_.CheckDxlControlItem(it_write_item.id, "Torque Enable")) && - torque_state_[it_write_item.id] == TORQUE_ON) + if ((dxl_info_.CheckDxlControlItem(it_write_item.comm_id, it_write_item.id, "Torque Enable")) && + torque_state_[{it_write_item.comm_id, it_write_item.id}] == TORQUE_ON) { - if (WriteItem(it_write_item.id, "Torque Enable", TORQUE_OFF) < 0) { + if (WriteItem(it_write_item.comm_id, it_write_item.id, "Torque Enable", TORQUE_OFF) < 0) { fprintf( stderr, - "[ID:%03d] Cannot write \"Torque Off\" command! Cannot write a Item.\n", - it_write_item.id); + "[comm_id:%03d][ID:%03d] Cannot write \"Torque Off\" command! Cannot write a Item.\n", + it_write_item.comm_id, it_write_item.id); return DxlError::ITEM_WRITE_FAIL; } - torque_state_[it_write_item.id] = TORQUE_OFF; + torque_state_[{it_write_item.comm_id, it_write_item.id}] = TORQUE_OFF; } if (WriteItem( - it_write_item.id, it_write_item.control_item.address, + it_write_item.comm_id, it_write_item.id, it_write_item.control_item.address, it_write_item.control_item.size, it_write_item.data) < 0) { return DxlError::ITEM_WRITE_FAIL; @@ -731,18 +738,17 @@ DxlError Dynamixel::WriteItemBuf() return DxlError::OK; } -DxlError Dynamixel::ReadItem(uint8_t id, std::string item_name, uint32_t & data) +DxlError Dynamixel::ReadItem(uint8_t comm_id, uint8_t id, std::string item_name, uint32_t & data) { uint16_t ITEM_ADDR; uint8_t ITEM_SIZE; - if (dxl_info_.GetDxlControlItem(id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(comm_id, id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[ReadItem][ID:%03d] Cannot find control item in model file. : %s\n", id, + stderr, "[ReadItem][comm_id:%03d][ID:%03d] Cannot find control item in model file. : %s\n", comm_id, id, item_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } - uint8_t comm_id = comm_id_[id]; for (int i = 0; i < MAX_COMM_RETRIES; i++) { int dxl_comm_result = COMM_TX_FAIL; uint8_t dxl_error = 0; @@ -814,12 +820,14 @@ DxlError Dynamixel::InsertReadItemBuf(uint8_t id, std::string item_name) { RWItemBufInfo item; + uint8_t comm_id = id; + item.comm_id = comm_id; item.id = id; item.control_item.item_name = item_name; item.read_flag = false; if (dxl_info_.GetDxlControlItem( - id, item_name, item.control_item.address, + comm_id, id, item_name, item.control_item.address, item.control_item.size) == false) { fprintf(stderr, "Cannot find control item in model file.\n"); @@ -992,11 +1000,11 @@ bool Dynamixel::checkReadType() } if (!dxl_info_.GetDxlControlItem( - read_data_list_.at(dxl_index).comm_id, "Indirect Data Read", indirect_addr[1], - indirect_size[1]) || + read_data_list_.at(dxl_index).comm_id, read_data_list_.at(dxl_index).comm_id, + "Indirect Data Read", indirect_addr[1], indirect_size[1]) || !dxl_info_.GetDxlControlItem( - read_data_list_.at(dxl_index - 1).comm_id, "Indirect Data Read", indirect_addr[0], - indirect_size[0])) + read_data_list_.at(dxl_index - 1).comm_id, read_data_list_.at(dxl_index - 1).comm_id, + "Indirect Data Read", indirect_addr[0], indirect_size[0])) { return BULK; } @@ -1040,11 +1048,11 @@ bool Dynamixel::checkWriteType() } if (!dxl_info_.GetDxlControlItem( - write_data_list_.at(dxl_index).comm_id, "Indirect Data Write", indirect_addr[1], - indirect_size[1]) || + write_data_list_.at(dxl_index).comm_id, write_data_list_.at(dxl_index).comm_id, + "Indirect Data Write", indirect_addr[1], indirect_size[1]) || !dxl_info_.GetDxlControlItem( - write_data_list_.at(dxl_index - 1).comm_id, "Indirect Data Write", indirect_addr[0], - indirect_size[0])) + write_data_list_.at(dxl_index - 1).comm_id, write_data_list_.at(dxl_index - 1).comm_id, + "Indirect Data Write", indirect_addr[0], indirect_size[0])) { return BULK; } @@ -1075,7 +1083,7 @@ DxlError Dynamixel::CheckIndirectWriteAvailable(uint8_t id) uint16_t INDIRECT_ADDR; uint8_t INDIRECT_SIZE; if (dxl_info_.GetDxlControlItem( - id, "Indirect Address Write", + id, id, "Indirect Address Write", INDIRECT_ADDR, INDIRECT_SIZE) == false) { return DxlError::CANNOT_FIND_CONTROL_ITEM; @@ -1090,7 +1098,13 @@ DxlError Dynamixel::SetSyncReadItemAndHandler() id_arr.push_back(it_read_data.comm_id); } - DynamixelDisable(id_arr); + { + std::vector> pairs; + for (auto it_read_data : read_data_list_) { + pairs.emplace_back(it_read_data.comm_id, it_read_data.comm_id); + } + DynamixelDisable(pairs); + } ResetIndirectRead(id_arr); for (auto it_read_data : read_data_list_) { @@ -1132,7 +1146,7 @@ DxlError Dynamixel::SetFastSyncReadHandler(std::vector id_arr) uint8_t IN_SIZE = 0; for (auto it_id : id_arr) { - if (dxl_info_.GetDxlControlItem(it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( stderr, "Fail to set indirect address fast sync read. " @@ -1188,7 +1202,7 @@ DxlError Dynamixel::SetSyncReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( stderr, "Fail to set indirect address sync read. " @@ -1362,7 +1376,11 @@ DxlError Dynamixel::SetBulkReadItemAndHandler() min_addr, total_size); } - DynamixelDisable(indirect_id_arr); + { + std::vector> pairs; + for (auto cid : indirect_id_arr) pairs.emplace_back(cid, cid); + DynamixelDisable(pairs); + } ResetIndirectRead(indirect_id_arr); for (auto it_read_data : indirect_read_data_list) { @@ -1418,7 +1436,7 @@ DxlError Dynamixel::SetFastBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( stderr, "Fail to set indirect address fast bulk read. " @@ -1470,7 +1488,7 @@ DxlError Dynamixel::SetBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( stderr, "Fail to set indirect address bulk read. " @@ -1746,17 +1764,18 @@ DxlError Dynamixel::ProcessReadData( // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(ID, item_names[item_index], unit_value) && - dxl_info_.GetDxlSignType(ID, item_names[item_index], is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_names[item_index], unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_names[item_index], is_signed)) { // Use unit info and sign type to properly convert the value *data_ptrs[item_index] = ConvertValueWithUnitInfo( - ID, item_names[item_index], dxl_getdata, + comm_id, ID, item_names[item_index], dxl_getdata, size, is_signed); } else { // Fallback to existing logic for compatibility if (item_names[item_index] == "Present Position") { *data_ptrs[item_index] = dxl_info_.ConvertValueToRadian( + comm_id, ID, static_cast(dxl_getdata)); } else { @@ -1785,17 +1804,18 @@ DxlError Dynamixel::ProcessDirectReadData( // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(ID, item_names[item_index], unit_value) && - dxl_info_.GetDxlSignType(ID, item_names[item_index], is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_names[item_index], unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_names[item_index], is_signed)) { // Use unit info and sign type to properly convert the value *data_ptrs[item_index] = ConvertValueWithUnitInfo( - ID, item_names[item_index], dxl_getdata, + comm_id, ID, item_names[item_index], dxl_getdata, size, is_signed); } else { // Fallback to existing logic for compatibility if (item_names[item_index] == "Present Position") { *data_ptrs[item_index] = dxl_info_.ConvertValueToRadian( + comm_id, ID, static_cast(dxl_getdata)); } else { @@ -1824,7 +1844,7 @@ DxlError Dynamixel::CheckIndirectReadAvailable(uint8_t id) uint16_t INDIRECT_ADDR; uint8_t INDIRECT_SIZE; if (dxl_info_.GetDxlControlItem( - id, "Indirect Address Read", + id, id, "Indirect Address Read", INDIRECT_ADDR, INDIRECT_SIZE) == false) { return DxlError::CANNOT_FIND_CONTROL_ITEM; @@ -1842,7 +1862,7 @@ DxlError Dynamixel::AddIndirectRead( uint16_t INDIRECT_ADDR; uint8_t INDIRECT_SIZE; if (dxl_info_.GetDxlControlItem( - id, "Indirect Address Read", + id, id, "Indirect Address Read", INDIRECT_ADDR, INDIRECT_SIZE) == true) { uint8_t using_size = indirect_info_read_[id].size; @@ -1852,7 +1872,7 @@ DxlError Dynamixel::AddIndirectRead( uint16_t addr = static_cast(INDIRECT_ADDR + (using_size * 2)); uint16_t item_addr_i = item_addr + i; - write_result = WriteItem(id, addr, 2, item_addr_i); + write_result = WriteItem(id, id, addr, 2, item_addr_i); if (write_result != DxlError::OK) { fprintf(stderr, "[AddIndirectRead][ID:%03d] WriteItem failed\n", id); @@ -1878,7 +1898,11 @@ DxlError Dynamixel::SetSyncWriteItemAndHandler() id_arr.push_back(it_write_data.comm_id); } - DynamixelDisable(id_arr); + { + std::vector> pairs; + for (auto cid : id_arr) pairs.emplace_back(cid, cid); + DynamixelDisable(pairs); + } ResetIndirectWrite(id_arr); for (auto it_write_data : write_data_list_) { @@ -1919,7 +1943,7 @@ DxlError Dynamixel::SetSyncWriteHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. if (dxl_info_.GetDxlControlItem( - it_id, "Indirect Data Write", INDIRECT_ADDR, + it_id, it_id, "Indirect Data Write", INDIRECT_ADDR, INDIRECT_SIZE) == false) { fprintf( @@ -1959,16 +1983,16 @@ DxlError Dynamixel::SetDxlValueToSyncWrite() // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(ID, item_name, unit_value) && - dxl_info_.GetDxlSignType(ID, item_name, is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_name, unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility if (item_name == "Goal Position") { - int32_t goal_position = dxl_info_.ConvertRadianToValue(ID, data); + int32_t goal_position = dxl_info_.ConvertRadianToValue(comm_id, ID, data); WriteValueToBuffer( param_write_value, added_byte, static_cast(goal_position), 4); @@ -2074,7 +2098,11 @@ DxlError Dynamixel::SetBulkWriteItemAndHandler() } // Handle indirect writes - DynamixelDisable(indirect_id_arr); + { + std::vector> pairs; + for (auto cid : indirect_id_arr) pairs.emplace_back(cid, cid); + DynamixelDisable(pairs); + } ResetIndirectWrite(indirect_id_arr); for (auto it_write_data : indirect_write_data_list) { @@ -2114,7 +2142,7 @@ DxlError Dynamixel::SetBulkWriteHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, "Indirect Data Write", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Write", IN_ADDR, IN_SIZE) == false) { fprintf( stderr, "Fail to set indirect address bulk write. " @@ -2153,16 +2181,16 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(ID, item_name, unit_value) && - dxl_info_.GetDxlSignType(ID, item_name, is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_name, unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility if (item_name == "Goal Position") { - int32_t goal_position = dxl_info_.ConvertRadianToValue(ID, data); + int32_t goal_position = dxl_info_.ConvertRadianToValue(comm_id, ID, data); WriteValueToBuffer( param_write_value, added_byte, static_cast(goal_position), 4); @@ -2195,16 +2223,16 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(ID, item_name, unit_value) && - dxl_info_.GetDxlSignType(ID, item_name, is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_name, unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility if (item_name == "Goal Position") { - int32_t goal_position = dxl_info_.ConvertRadianToValue(ID, data); + int32_t goal_position = dxl_info_.ConvertRadianToValue(comm_id, ID, data); WriteValueToBuffer( param_write_value, added_byte, static_cast(goal_position), 4); @@ -2260,13 +2288,13 @@ DxlError Dynamixel::AddIndirectWrite( // write address to indirect addr control item uint16_t INDIRECT_ADDR; uint8_t INDIRECT_SIZE; - dxl_info_.GetDxlControlItem(id, "Indirect Address Write", INDIRECT_ADDR, INDIRECT_SIZE); + dxl_info_.GetDxlControlItem(id, id, "Indirect Address Write", INDIRECT_ADDR, INDIRECT_SIZE); uint8_t using_size = indirect_info_write_[id].size; for (uint16_t i = 0; i < item_size; i++) { if (WriteItem( - id, static_cast(INDIRECT_ADDR + (using_size * 2)), 2, + id, id, static_cast(INDIRECT_ADDR + (using_size * 2)), 2, item_addr + i) != DxlError::OK) { return DxlError::SET_BULK_WRITE_FAIL; @@ -2295,32 +2323,32 @@ void Dynamixel::ResetDirectWrite(std::vector id_arr) } double Dynamixel::ConvertValueWithUnitInfo( - uint8_t id, std::string item_name, uint32_t raw_value, + uint8_t comm_id, uint8_t id, std::string item_name, uint32_t raw_value, uint8_t size, bool is_signed) { if (size == 1) { if (is_signed) { int8_t signed_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, signed_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, signed_value); } else { uint8_t unsigned_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, unsigned_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, unsigned_value); } } else if (size == 2) { if (is_signed) { int16_t signed_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, signed_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, signed_value); } else { uint16_t unsigned_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, unsigned_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, unsigned_value); } } else if (size == 4) { if (is_signed) { int32_t signed_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, signed_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, signed_value); } else { uint32_t unsigned_value = static_cast(raw_value); - return dxl_info_.ConvertValueToUnit(id, item_name, unsigned_value); + return dxl_info_.ConvertValueToUnit(comm_id, id, item_name, unsigned_value); } } @@ -2331,31 +2359,31 @@ double Dynamixel::ConvertValueWithUnitInfo( } uint32_t Dynamixel::ConvertUnitValueToRawValue( - uint8_t id, std::string item_name, double unit_value, + uint8_t comm_id, uint8_t id, std::string item_name, double unit_value, uint8_t size, bool is_signed) { if (size == 1) { if (is_signed) { - int8_t signed_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + int8_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return static_cast(signed_value); } else { - uint8_t unsigned_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + uint8_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return static_cast(unsigned_value); } } else if (size == 2) { if (is_signed) { - int16_t signed_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + int16_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return static_cast(signed_value); } else { - uint16_t unsigned_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + uint16_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return static_cast(unsigned_value); } } else if (size == 4) { if (is_signed) { - int32_t signed_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + int32_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return static_cast(signed_value); } else { - uint32_t unsigned_value = dxl_info_.ConvertUnitToValue(id, item_name, unit_value); + uint32_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); return unsigned_value; } } diff --git a/src/dynamixel/dynamixel_info.cpp b/src/dynamixel/dynamixel_info.cpp index b64e07a..d15b974 100644 --- a/src/dynamixel/dynamixel_info.cpp +++ b/src/dynamixel/dynamixel_info.cpp @@ -53,12 +53,12 @@ void DynamixelInfo::InitDxlModelInfo() open_file.close(); } -void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num) +void DynamixelInfo::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num) { - ReadDxlModelFile(id, model_num, 0); // Default to firmware version 0 (unknown) + ReadDxlModelFile(comm_id, id, model_num, 0); } -void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t firmware_version) +void DynamixelInfo::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version) { std::string path = dxl_model_file_dir + "/"; @@ -144,7 +144,7 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t fir } if (unit_info_found) { - getline(open_file, line); // Skip header line "Data Name value unit Sign Type" + getline(open_file, line); // Skip header line while (!open_file.eof() ) { getline(open_file, line); if (strcmp(line.c_str(), "[control table]") == 0) { @@ -166,6 +166,12 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t fir bool is_signed = (sign_type_str == "signed"); temp_dxl_info.unit_map[data_name] = unit_value; temp_dxl_info.sign_type_map[data_name] = is_signed; + if (strs.size() >= 5) { + double offset_value = static_cast(stod(strs.at(4))); + temp_dxl_info.offset_map[data_name] = offset_value; + } else { + temp_dxl_info.offset_map[data_name] = 0.0; + } } catch (const std::exception & e) { std::string error_msg = "Error processing unit info line: " + line + "\nError: " + e.what(); @@ -214,7 +220,7 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t fir throw std::runtime_error(error_msg); } - dxl_info_[id] = temp_dxl_info; + dxl_info_by_comm_[comm_id][id] = temp_dxl_info; open_file.close(); } @@ -321,89 +327,130 @@ uint8_t DynamixelInfo::ExtractFirmwareVersionFromFilename(const std::string & fi } bool DynamixelInfo::GetDxlControlItem( - uint8_t id, std::string item_name, uint16_t & addr, + uint8_t comm_id, uint8_t id, std::string item_name, uint16_t & addr, uint8_t & size) { - for (size_t i = 0; i < dxl_info_[id].item.size(); i++) { - if (strcmp(item_name.c_str(), dxl_info_[id].item.at(i).item_name.c_str()) == 0) { - addr = dxl_info_[id].item.at(i).address; - size = dxl_info_[id].item.at(i).size; - return true; + auto cit = dxl_info_by_comm_.find(comm_id); + if (cit != dxl_info_by_comm_.end()) { + auto iit = cit->second.find(id); + if (iit != cit->second.end()) { + for (size_t i = 0; i < iit->second.item.size(); i++) { + if (strcmp(item_name.c_str(), iit->second.item.at(i).item_name.c_str()) == 0) { + addr = iit->second.item.at(i).address; + size = iit->second.item.at(i).size; + return true; + } + } } } return false; } -bool DynamixelInfo::CheckDxlControlItem(uint8_t id, std::string item_name) +bool DynamixelInfo::CheckDxlControlItem(uint8_t comm_id, uint8_t id, std::string item_name) { - for (size_t i = 0; i < dxl_info_[id].item.size(); i++) { - if (strcmp(item_name.c_str(), dxl_info_[id].item.at(i).item_name.c_str()) == 0) { - return true; + auto cit = dxl_info_by_comm_.find(comm_id); + if (cit != dxl_info_by_comm_.end()) { + auto iit = cit->second.find(id); + if (iit != cit->second.end()) { + for (size_t i = 0; i < iit->second.item.size(); i++) { + if (strcmp(item_name.c_str(), iit->second.item.at(i).item_name.c_str()) == 0) { + return true; + } + } } } return false; } -int32_t DynamixelInfo::ConvertRadianToValue(uint8_t id, double radian) +int32_t DynamixelInfo::ConvertRadianToValue(uint8_t comm_id, uint8_t id, double radian) { + const auto & info = dxl_info_by_comm_[comm_id][id]; if (radian > 0) { return static_cast(radian * - (dxl_info_[id].value_of_max_radian_position - - dxl_info_[id].value_of_zero_radian_position) / dxl_info_[id].max_radian) + - dxl_info_[id].value_of_zero_radian_position; + (info.value_of_max_radian_position - + info.value_of_zero_radian_position) / info.max_radian) + + info.value_of_zero_radian_position; } else if (radian < 0) { return static_cast(radian * - (dxl_info_[id].value_of_min_radian_position - - dxl_info_[id].value_of_zero_radian_position) / dxl_info_[id].min_radian) + - dxl_info_[id].value_of_zero_radian_position; + (info.value_of_min_radian_position - + info.value_of_zero_radian_position) / info.min_radian) + + info.value_of_zero_radian_position; } else { - return dxl_info_[id].value_of_zero_radian_position; + return info.value_of_zero_radian_position; } } -double DynamixelInfo::ConvertValueToRadian(uint8_t id, int32_t value) +double DynamixelInfo::ConvertValueToRadian(uint8_t comm_id, uint8_t id, int32_t value) { - if (value > dxl_info_[id].value_of_zero_radian_position) { - return static_cast(value - dxl_info_[id].value_of_zero_radian_position) * - dxl_info_[id].max_radian / - static_cast(dxl_info_[id].value_of_max_radian_position - - dxl_info_[id].value_of_zero_radian_position); - } else if (value < dxl_info_[id].value_of_zero_radian_position) { - return static_cast(value - dxl_info_[id].value_of_zero_radian_position) * - dxl_info_[id].min_radian / - static_cast(dxl_info_[id].value_of_min_radian_position - - dxl_info_[id].value_of_zero_radian_position); + const auto & info = dxl_info_by_comm_[comm_id][id]; + if (value > info.value_of_zero_radian_position) { + return static_cast(value - info.value_of_zero_radian_position) * + info.max_radian / + static_cast(info.value_of_max_radian_position - + info.value_of_zero_radian_position); + } else if (value < info.value_of_zero_radian_position) { + return static_cast(value - info.value_of_zero_radian_position) * + info.min_radian / + static_cast(info.value_of_min_radian_position - + info.value_of_zero_radian_position); } else { return 0.0; } } -bool DynamixelInfo::GetDxlUnitValue(uint8_t id, std::string data_name, double & unit_value) +bool DynamixelInfo::GetDxlUnitValue(uint8_t comm_id, uint8_t id, std::string data_name, double & unit_value) { - auto it = dxl_info_[id].unit_map.find(data_name); - if (it != dxl_info_[id].unit_map.end()) { - unit_value = it->second; - return true; + auto cit = dxl_info_by_comm_.find(comm_id); + if (cit != dxl_info_by_comm_.end()) { + auto iit = cit->second.find(id); + if (iit != cit->second.end()) { + auto it = iit->second.unit_map.find(data_name); + if (it != iit->second.unit_map.end()) { + unit_value = it->second; + return true; + } + } } return false; } -bool DynamixelInfo::GetDxlSignType(uint8_t id, std::string data_name, bool & is_signed) +bool DynamixelInfo::GetDxlSignType(uint8_t comm_id, uint8_t id, std::string data_name, bool & is_signed) { - auto it = dxl_info_[id].sign_type_map.find(data_name); - if (it != dxl_info_[id].sign_type_map.end()) { - is_signed = it->second; - return true; + auto cit = dxl_info_by_comm_.find(comm_id); + if (cit != dxl_info_by_comm_.end()) { + auto iit = cit->second.find(id); + if (iit != cit->second.end()) { + auto it = iit->second.sign_type_map.find(data_name); + if (it != iit->second.sign_type_map.end()) { + is_signed = it->second; + return true; + } + } } return false; } -double DynamixelInfo::GetUnitMultiplier(uint8_t id, std::string data_name) +bool DynamixelInfo::GetDxlOffsetValue(uint8_t comm_id, uint8_t id, std::string data_name, double & offset_value) { - auto it = dxl_info_[id].unit_map.find(data_name); - if (it != dxl_info_[id].unit_map.end()) { - return it->second; + auto cit = dxl_info_by_comm_.find(comm_id); + if (cit != dxl_info_by_comm_.end()) { + auto iit = cit->second.find(id); + if (iit != cit->second.end()) { + auto it = iit->second.offset_map.find(data_name); + if (it != iit->second.offset_map.end()) { + offset_value = it->second; + return true; + } + } } + return false; +} + +double DynamixelInfo::GetUnitMultiplier(uint8_t comm_id, uint8_t id, std::string data_name) +{ + auto & info = dxl_info_by_comm_[comm_id][id]; + auto it = info.unit_map.find(data_name); + if (it != info.unit_map.end()) {return it->second;} return 1.0; } diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index a1c6aa1..93eff86 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -169,34 +169,34 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? + static_cast(stoi(gpio.parameters.at("comm_id"))) : id; const std::string & type = gpio.parameters.at("type"); if (type == "dxl") { - dxl_id_.push_back(id); + dxl_comm_id_id_.emplace_back(comm_id, id); } else if (type == "sensor") { - sensor_id_.push_back(id); + sensor_comm_id_id_.emplace_back(comm_id, id); } else if (type == "controller") { - controller_id_.push_back(id); + controller_comm_id_id_.emplace_back(comm_id, id); } else if (type == "virtual_dxl") { - dxl_comm_->ReadDxlModelFile(id, static_cast(stoi(gpio.parameters.at("model_num")))); - virtual_dxl_id_.push_back(id); + dxl_comm_->ReadDxlModelFile(comm_id, id, static_cast(stoi(gpio.parameters.at("model_num")))); + virtual_dxl_comm_id_id_.emplace_back(comm_id, id); + } else if (type == "virtual_sensor") { + dxl_comm_->ReadDxlModelFile(comm_id, id, static_cast(stoi(gpio.parameters.at("model_num")))); } else { RCLCPP_ERROR_STREAM(logger_, "Invalid DXL / Sensor type"); exit(-1); } - - uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? - static_cast(stoi(gpio.parameters.at("comm_id"))) : id; - dxl_comm_->SetCommId(id, comm_id); } - if (controller_id_.size() > 0) { + if (controller_comm_id_id_.size() > 0) { for (int i = 0; i < 10; i++) { - std::vector id_arr; - for (auto controller : controller_id_) { - id_arr.push_back(controller); + std::vector> comm_id_id_arr; + for (auto pr : controller_comm_id_id_) { + comm_id_id_arr.emplace_back(pr.first, pr.second); } - if (dxl_comm_->InitDxlComm(id_arr, port_name_, baud_rate_) == DxlError::OK) { + if (dxl_comm_->InitDxlComm(comm_id_id_arr, port_name_, baud_rate_) == DxlError::OK) { RCLCPP_INFO_STREAM(logger_, "Trying to connect to the communication port..."); break; } else { @@ -209,20 +209,20 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } } - if (!InitControllerItems()) { - RCLCPP_ERROR_STREAM(logger_, "Error: InitControllerItems"); - return hardware_interface::CallbackReturn::ERROR; - } + // if (!InitControllerItems()) { + // RCLCPP_ERROR_STREAM(logger_, "Error: InitControllerItems"); + // return hardware_interface::CallbackReturn::ERROR; + // } for (int i = 0; i < 10; i++) { - std::vector id_arr; - for (auto dxl : dxl_id_) { - id_arr.push_back(dxl); + std::vector> comm_id_id_arr; + for (auto pr : dxl_comm_id_id_) { + comm_id_id_arr.emplace_back(pr.first, pr.second); } - for (auto sensor : sensor_id_) { - id_arr.push_back(sensor); + for (auto pr : sensor_comm_id_id_) { + comm_id_id_arr.emplace_back(pr.first, pr.second); } - if (dxl_comm_->InitDxlComm(id_arr, port_name_, baud_rate_) == DxlError::OK) { + if (dxl_comm_->InitDxlComm(comm_id_id_arr, port_name_, baud_rate_) == DxlError::OK) { RCLCPP_INFO_STREAM(logger_, "Trying to connect to the communication port..."); break; } else { @@ -234,21 +234,33 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } } - std::vector dxl_id_with_virtual_dxl; - dxl_id_with_virtual_dxl.insert(dxl_id_with_virtual_dxl.end(), dxl_id_.begin(), dxl_id_.end()); - dxl_id_with_virtual_dxl.insert( - dxl_id_with_virtual_dxl.end(), virtual_dxl_id_.begin(), - virtual_dxl_id_.end()); + std::vector> torque_init_pairs; + for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { + if (gpio.parameters.find("ID") == gpio.parameters.end() || + gpio.parameters.find("type") == gpio.parameters.end()) + { + continue; + } + uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? + static_cast(stoi(gpio.parameters.at("comm_id"))) : id; + const std::string & type = gpio.parameters.at("type"); + + // Include both real and virtual_dxl in torque init (per user request) + if (type == "dxl" || type == "virtual_dxl") { + torque_init_pairs.emplace_back(comm_id, id); + } + } if (dxl_comm_->InitTorqueStates( - dxl_id_with_virtual_dxl, + torque_init_pairs, disable_torque_at_init) != DxlError::OK) { RCLCPP_ERROR_STREAM(logger_, "Error: InitTorqueStates"); return hardware_interface::CallbackReturn::ERROR; } - if (!InitDxlItems()) { - RCLCPP_ERROR_STREAM(logger_, "Error: InitDxlItems"); + if (!InitItems()) { + RCLCPP_ERROR_STREAM(logger_, "Error: InitItems"); return hardware_interface::CallbackReturn::ERROR; } @@ -566,10 +578,10 @@ hardware_interface::CallbackReturn DynamixelHardware::start() dxl_comm_->WriteMultiDxlData(); - if (torque_enabled_ids_.size() > 0) { + if (torque_enabled_comm_id_id_.size() > 0) { RCLCPP_INFO_STREAM(logger_, "Enabling torque for Dynamixels"); for (int i = 0; i < 10; i++) { - if (dxl_comm_->DynamixelEnable(torque_enabled_ids_) == DxlError::OK) { + if (dxl_comm_->DynamixelEnable(torque_enabled_comm_id_id_) == DxlError::OK) { break; } RCLCPP_ERROR_STREAM(logger_, "Failed to enable torque for Dynamixels, retry..."); @@ -585,8 +597,8 @@ hardware_interface::CallbackReturn DynamixelHardware::start() hardware_interface::CallbackReturn DynamixelHardware::stop() { if (dxl_comm_) { - dxl_comm_->DynamixelDisable(dxl_id_); - dxl_comm_->DynamixelDisable(virtual_dxl_id_); + dxl_comm_->DynamixelDisable(dxl_comm_id_id_); + dxl_comm_->DynamixelDisable(virtual_dxl_comm_id_id_); } else { RCLCPP_ERROR_STREAM(logger_, "Dynamixel Hardware Stop Fail : dxl_comm_ is nullptr"); return hardware_interface::CallbackReturn::ERROR; @@ -643,7 +655,9 @@ hardware_interface::return_type DynamixelHardware::read( for (auto it : hdl_trans_states_) { dxl_state_pub_uni_ptr_->msg_.id.at(index) = it.id; dxl_state_pub_uni_ptr_->msg_.dxl_hw_state.at(index) = dxl_hw_err_[it.id]; - dxl_state_pub_uni_ptr_->msg_.torque_state.at(index) = dxl_torque_state_[it.id]; + auto ts_it = dxl_torque_state_.find({it.comm_id, it.id}); + bool ts = (ts_it != dxl_torque_state_.end()) ? ts_it->second : false; + dxl_state_pub_uni_ptr_->msg_.torque_state.at(index) = ts; index++; } dxl_state_pub_uni_ptr_->unlockAndPublish(); @@ -784,8 +798,8 @@ bool DynamixelHardware::CommReset() std::this_thread::sleep_for(std::chrono::milliseconds(200)); RCLCPP_INFO_STREAM(logger_, "Reset Start"); bool result = true; - for (auto id : dxl_id_) { - if (dxl_comm_->Reboot(id) != DxlError::OK) { + for (auto pr : dxl_comm_id_id_) { + if (dxl_comm_->Reboot(pr.first) != DxlError::OK) { RCLCPP_ERROR_STREAM(logger_, "Cannot reboot dynamixel! :("); result = false; break; @@ -793,8 +807,8 @@ bool DynamixelHardware::CommReset() std::this_thread::sleep_for(std::chrono::milliseconds(200)); } if (!result) {continue;} - if (!InitControllerItems()) {continue;} - if (!InitDxlItems()) {continue;} + // if (!InitControllerItems()) {continue;} + // if (!InitDxlItems()) {continue;} if (!InitDxlReadItems()) {continue;} if (!InitDxlWriteItems()) {continue;} @@ -810,22 +824,37 @@ bool DynamixelHardware::CommReset() return false; } -bool DynamixelHardware::initItems(const std::string & type_filter) +bool DynamixelHardware::InitItems() { - RCLCPP_INFO_STREAM(logger_, "$$$$$ Init Items for type: " << type_filter); + std::vector reboot_comm_id_id_; for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { - if (gpio.parameters.at("type") != type_filter) { - continue; + uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + bool reboot_enabled = (gpio.parameters.find("Reboot") != gpio.parameters.end() && std::stoi(gpio.parameters.at("Reboot")) != 0); + if (reboot_enabled) { + reboot_comm_id_id_.emplace_back(id); + } + } + for (auto id : reboot_comm_id_id_) { + for (int i = 0; i < 5; i++) { + if (dxl_comm_->Reboot(id) != DxlError::OK) { + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } else { + break; + } } + } + for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? + static_cast(stoi(gpio.parameters.at("comm_id"))) : id; // Handle torque enable parameter - bool torque_enabled = type_filter == "dxl" || type_filter == "virtual_dxl"; + bool torque_enabled = (gpio.parameters.find("type") != gpio.parameters.end() && (gpio.parameters.at("type") == "dxl" || gpio.parameters.at("type") == "virtual_dxl")); if (gpio.parameters.find("Torque Enable") != gpio.parameters.end()) { torque_enabled = std::stoi(gpio.parameters.at("Torque Enable")) != 0; } if (torque_enabled) { - torque_enabled_ids_.push_back(id); + torque_enabled_comm_id_id_.emplace_back(comm_id, id); } // 1. First pass: Write Operating Mode parameters @@ -837,7 +866,7 @@ bool DynamixelHardware::initItems(const std::string & type_filter) "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << param.second); if (dxl_comm_->WriteItem( - id, param_name, + comm_id, id, param_name, static_cast(stoi(param.second))) != DxlError::OK) { return false; @@ -850,7 +879,7 @@ bool DynamixelHardware::initItems(const std::string & type_filter) const std::string & param_name = param.first; if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable" || param_name == "Operating Mode" || - param_name == "model_num" || param_name == "comm_id") + param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot") { continue; } @@ -860,7 +889,7 @@ bool DynamixelHardware::initItems(const std::string & type_filter) "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << param.second); if (dxl_comm_->WriteItem( - id, param_name, + comm_id, id, param_name, static_cast(stoi(param.second))) != DxlError::OK) { return false; @@ -873,7 +902,7 @@ bool DynamixelHardware::initItems(const std::string & type_filter) const std::string & param_name = param.first; if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable" || param_name == "Operating Mode" || - param_name == "model_num" || param_name == "comm_id" || + param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot" || param_name.find("Limit") != std::string::npos) { continue; @@ -883,7 +912,7 @@ bool DynamixelHardware::initItems(const std::string & type_filter) "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << param.second); if (dxl_comm_->WriteItem( - id, param_name, + comm_id, id, param_name, static_cast(stoi(param.second))) != DxlError::OK) { return false; @@ -893,16 +922,6 @@ bool DynamixelHardware::initItems(const std::string & type_filter) return true; } -bool DynamixelHardware::InitControllerItems() -{ - return initItems("controller") && initItems("virtual_dxl"); -} - -bool DynamixelHardware::InitDxlItems() -{ - return initItems("dxl") && initItems("sensor"); -} - bool DynamixelHardware::InitDxlReadItems() { RCLCPP_INFO_STREAM(logger_, "$$$$$ Init Dxl Read Items"); @@ -970,13 +989,26 @@ bool DynamixelHardware::InitDxlReadItems() } } hdl_trans_states_.push_back(temp_read); + } else if (gpio.parameters.at("type") == "virtual_sensor") { + uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + uint8_t comm_id = static_cast(stoi(gpio.parameters.at("comm_id"))); + HandlerVarType temp_sensor; + temp_sensor.id = id; + temp_sensor.comm_id = comm_id; + temp_sensor.name = gpio.name; + + for (auto it : gpio.state_interfaces) { + temp_sensor.interface_name_vec.push_back(it.name); + temp_sensor.value_ptr_vec.push_back(std::make_shared(0.0)); + } + hdl_gpio_sensor_states_.push_back(temp_sensor); } } is_set_hdl_ = true; } for (auto it : hdl_gpio_controller_states_) { if (dxl_comm_->SetDxlReadItems( - it.id, it.comm_id, it.interface_name_vec, + it.comm_id, it.id, it.interface_name_vec, it.value_ptr_vec) != DxlError::OK) { return false; @@ -984,7 +1016,7 @@ bool DynamixelHardware::InitDxlReadItems() } for (auto it : hdl_trans_states_) { if (dxl_comm_->SetDxlReadItems( - it.id, it.comm_id, it.interface_name_vec, + it.comm_id, it.id, it.interface_name_vec, it.value_ptr_vec) != DxlError::OK) { return false; @@ -992,7 +1024,7 @@ bool DynamixelHardware::InitDxlReadItems() } for (auto it : hdl_gpio_sensor_states_) { if (dxl_comm_->SetDxlReadItems( - it.id, it.comm_id, it.interface_name_vec, + it.comm_id, it.id, it.interface_name_vec, it.value_ptr_vec) != DxlError::OK) { return false; @@ -1069,7 +1101,7 @@ bool DynamixelHardware::InitDxlWriteItems() for (auto it : hdl_trans_commands_) { if (dxl_comm_->SetDxlWriteItems( - it.id, it.comm_id, it.interface_name_vec, + it.comm_id, it.id, it.interface_name_vec, it.value_ptr_vec) != DxlError::OK) { return false; @@ -1078,7 +1110,7 @@ bool DynamixelHardware::InitDxlWriteItems() for (auto it : hdl_gpio_controller_commands_) { if (dxl_comm_->SetDxlWriteItems( - it.id, it.comm_id, it.interface_name_vec, + it.comm_id, it.id, it.interface_name_vec, it.value_ptr_vec) != DxlError::OK) { return false; @@ -1121,18 +1153,38 @@ bool DynamixelHardware::SetMatrix() if (info_.hardware_parameters.find("transmission_to_joint_matrix") == info_.hardware_parameters.end()) { - RCLCPP_ERROR_STREAM( + RCLCPP_WARN_STREAM( logger_, - "Required parameter 'transmission_to_joint_matrix' not found in hardware parameters"); - return false; - } - std::stringstream ss_tj(info_.hardware_parameters["transmission_to_joint_matrix"]); - while (std::getline(ss_tj, str, ',')) { - d_vec.push_back(stod(str)); - } - for (size_t i = 0; i < num_of_joints_; i++) { - for (size_t j = 0; j < num_of_transmissions_; j++) { - transmission_to_joint_matrix_[i][j] = d_vec.at(i * num_of_transmissions_ + j); + "Parameter 'transmission_to_joint_matrix' not provided. Using identity matrix by default."); + for (size_t i = 0; i < num_of_joints_; i++) { + for (size_t j = 0; j < num_of_transmissions_; j++) { + transmission_to_joint_matrix_[i][j] = (i == j) ? 1.0 : 0.0; + } + } + } else { + try { + std::stringstream ss_tj(info_.hardware_parameters["transmission_to_joint_matrix"]); + while (std::getline(ss_tj, str, ',')) { + d_vec.push_back(stod(str)); + } + } catch (const std::exception & e) { + RCLCPP_ERROR_STREAM( + logger_, + "Failed to parse 'transmission_to_joint_matrix': " << e.what()); + return false; + } + const size_t expected_tj = num_of_joints_ * num_of_transmissions_; + if (d_vec.size() != expected_tj) { + RCLCPP_ERROR_STREAM( + logger_, + "Parameter 'transmission_to_joint_matrix' has " << d_vec.size() + << " elements, expected " << expected_tj); + return false; + } + for (size_t i = 0; i < num_of_joints_; i++) { + for (size_t j = 0; j < num_of_transmissions_; j++) { + transmission_to_joint_matrix_[i][j] = d_vec.at(i * num_of_transmissions_ + j); + } } } @@ -1153,18 +1205,38 @@ bool DynamixelHardware::SetMatrix() if (info_.hardware_parameters.find("joint_to_transmission_matrix") == info_.hardware_parameters.end()) { - RCLCPP_ERROR_STREAM( + RCLCPP_WARN_STREAM( logger_, - "Required parameter 'joint_to_transmission_matrix' not found in hardware parameters"); - return false; - } - std::stringstream ss_jt(info_.hardware_parameters["joint_to_transmission_matrix"]); - while (std::getline(ss_jt, str, ',')) { - d_vec.push_back(stod(str)); - } - for (size_t i = 0; i < num_of_transmissions_; i++) { - for (size_t j = 0; j < num_of_joints_; j++) { - joint_to_transmission_matrix_[i][j] = d_vec.at(i * num_of_joints_ + j); + "Parameter 'joint_to_transmission_matrix' not provided. Using identity matrix by default."); + for (size_t i = 0; i < num_of_transmissions_; i++) { + for (size_t j = 0; j < num_of_joints_; j++) { + joint_to_transmission_matrix_[i][j] = (i == j) ? 1.0 : 0.0; + } + } + } else { + try { + std::stringstream ss_jt(info_.hardware_parameters["joint_to_transmission_matrix"]); + while (std::getline(ss_jt, str, ',')) { + d_vec.push_back(stod(str)); + } + } catch (const std::exception & e) { + RCLCPP_ERROR_STREAM( + logger_, + "Failed to parse 'joint_to_transmission_matrix': " << e.what()); + return false; + } + const size_t expected_jt = num_of_transmissions_ * num_of_joints_; + if (d_vec.size() != expected_jt) { + RCLCPP_ERROR_STREAM( + logger_, + "Parameter 'joint_to_transmission_matrix' has " << d_vec.size() + << " elements, expected " << expected_jt); + return false; + } + for (size_t i = 0; i < num_of_transmissions_; i++) { + for (size_t j = 0; j < num_of_joints_; j++) { + joint_to_transmission_matrix_[i][j] = d_vec.at(i * num_of_joints_ + j); + } } } @@ -1321,22 +1393,23 @@ void DynamixelHardware::SyncJointCommandWithStates() void DynamixelHardware::ChangeDxlTorqueState() { - if (torque_enabled_ids_.size() == 0) { + if (torque_enabled_comm_id_id_.size() == 0) { return; } if (dxl_torque_status_ == REQUESTED_TO_ENABLE) { RCLCPP_WARN_STREAM(logger_, "Requested to enable torque, Enabling torque for all Dynamixels"); - dxl_comm_->DynamixelEnable(torque_enabled_ids_); + dxl_comm_->DynamixelEnable(torque_enabled_comm_id_id_); SyncJointCommandWithStates(); } else if (dxl_torque_status_ == REQUESTED_TO_DISABLE) { RCLCPP_WARN_STREAM(logger_, "Requested to disable torque, Disabling torque for all Dynamixels"); - dxl_comm_->DynamixelDisable(torque_enabled_ids_); + dxl_comm_->DynamixelDisable(torque_enabled_comm_id_id_); SyncJointCommandWithStates(); } - dxl_torque_state_ = dxl_comm_->GetDxlTorqueState(); - for (auto single_torque_state : dxl_torque_state_) { + // Aggregate across all devices; if any OFF, report DISABLED + auto torque_state_map = dxl_comm_->GetDxlTorqueState(); + for (const auto & single_torque_state : torque_state_map) { if (single_torque_state.second == TORQUE_OFF) { dxl_torque_status_ = TORQUE_DISABLED; return; From ab4879c184add111265754b8794b2856a87040b4 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 14 Oct 2025 20:19:24 +0900 Subject: [PATCH 02/26] Update Dynamixel model file to reflect new model number for hand joints and pressure sensors --- param/dxl_model/dynamixel.model | 50 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index dec5b3a..8c1a555 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -4,31 +4,31 @@ Number Name 230 omy_end.model 231 omy_end_rh_p12_rn.model 260 hand_controller.model -261 hand_finger_joint_1.model -262 hand_finger_joint_2.model -263 hand_finger_joint_3.model -264 hand_finger_joint_4.model -265 hand_pressure_sensor_5.model -266 hand_finger_joint_6.model -267 hand_finger_joint_7.model -268 hand_finger_joint_8.model -269 hand_finger_joint_9.model -270 hand_pressure_sensor_10.model -271 hand_finger_joint_11.model -272 hand_finger_joint_12.model -273 hand_finger_joint_13.model -274 hand_finger_joint_14.model -275 hand_pressure_sensor_15.model -276 hand_finger_joint_16.model -277 hand_finger_joint_17.model -278 hand_finger_joint_18.model -279 hand_finger_joint_19.model -280 hand_pressure_sensor_20.model -281 hand_finger_joint_21.model -282 hand_finger_joint_22.model -283 hand_finger_joint_23.model -284 hand_finger_joint_24.model -285 hand_pressure_sensor_25.model +6001 hand_finger_joint_1.model +6002 hand_finger_joint_2.model +6003 hand_finger_joint_3.model +6004 hand_finger_joint_4.model +6005 hand_pressure_sensor_5.model +6006 hand_finger_joint_6.model +6007 hand_finger_joint_7.model +6008 hand_finger_joint_8.model +6009 hand_finger_joint_9.model +6010 hand_pressure_sensor_10.model +6011 hand_finger_joint_11.model +6012 hand_finger_joint_12.model +6013 hand_finger_joint_13.model +6014 hand_finger_joint_14.model +6015 hand_pressure_sensor_15.model +6016 hand_finger_joint_16.model +6017 hand_finger_joint_17.model +6018 hand_finger_joint_18.model +6019 hand_finger_joint_19.model +6020 hand_pressure_sensor_20.model +6021 hand_finger_joint_21.model +6022 hand_finger_joint_22.model +6023 hand_finger_joint_23.model +6024 hand_finger_joint_24.model +6025 hand_pressure_sensor_25.model 311 mx_64.model 321 mx_106.model 350 xl320.model From 3229677be3237460cfd20355b5e48609b32ad277 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Thu, 16 Oct 2025 16:07:37 +0900 Subject: [PATCH 03/26] Refactor Dynamixel model files --- param/dxl_model/dynamixel.model | 53 +- param/dxl_model/hand_controller.model | 868 ----------------- param/dxl_model/hand_finger_joint_16.model | 15 - param/dxl_model/hand_finger_joint_17.model | 15 - param/dxl_model/hand_finger_joint_18.model | 15 - param/dxl_model/hand_finger_joint_19.model | 15 - param/dxl_model/hand_finger_joint_2.model | 15 - param/dxl_model/hand_finger_joint_21.model | 15 - param/dxl_model/hand_finger_joint_22.model | 15 - param/dxl_model/hand_finger_joint_23.model | 15 - param/dxl_model/hand_finger_joint_24.model | 15 - param/dxl_model/hand_finger_joint_3.model | 15 - param/dxl_model/hand_finger_joint_4.model | 15 - param/dxl_model/hand_finger_joint_6.model | 15 - param/dxl_model/hand_finger_joint_7.model | 15 - param/dxl_model/hand_finger_joint_8.model | 15 - param/dxl_model/hand_finger_joint_9.model | 15 - param/dxl_model/hand_pressure_sensor_5.model | 23 - ...l => hx5_d20_r_synctable_1_device_1.model} | 10 +- ...l => hx5_d20_r_synctable_1_device_2.model} | 10 +- ...l => hx5_d20_r_synctable_1_device_3.model} | 10 +- ...l => hx5_d20_r_synctable_1_device_4.model} | 10 +- ...l => hx5_d20_r_synctable_1_device_5.model} | 18 +- ...l => hx5_d20_r_synctable_2_device_1.model} | 4 +- .../hx5_d20_r_synctable_2_device_2.model | 15 + .../hx5_d20_r_synctable_2_device_3.model | 15 + .../hx5_d20_r_synctable_2_device_4.model | 15 + ...l => hx5_d20_r_synctable_2_device_5.model} | 18 +- .../hx5_d20_r_synctable_3_device_1.model | 15 + .../hx5_d20_r_synctable_3_device_2.model | 15 + .../hx5_d20_r_synctable_3_device_3.model | 15 + .../hx5_d20_r_synctable_3_device_4.model | 15 + ...l => hx5_d20_r_synctable_3_device_5.model} | 18 +- .../hx5_d20_r_synctable_4_device_1.model | 15 + .../hx5_d20_r_synctable_4_device_2.model | 15 + .../hx5_d20_r_synctable_4_device_3.model | 15 + .../hx5_d20_r_synctable_4_device_4.model | 15 + ...l => hx5_d20_r_synctable_4_device_5.model} | 18 +- .../hx5_d20_r_synctable_5_device_1.model | 15 + .../hx5_d20_r_synctable_5_device_2.model | 15 + .../hx5_d20_r_synctable_5_device_3.model | 15 + .../hx5_d20_r_synctable_5_device_4.model | 15 + .../hx5_d20_r_synctable_5_device_5.model | 23 + param/dxl_model/hx5_d20_rl.model | 894 ++++++++++++++++++ param/dxl_model/hx5_d20_rr.model | 894 ++++++++++++++++++ scripts/cluster_model_files.py | 15 +- scripts/hx_synctable_model_generator.py | 410 ++++++++ scripts/xml_to_model_parser.py | 214 +++++ src/dynamixel/dynamixel_info.cpp | 7 +- 49 files changed, 2759 insertions(+), 1208 deletions(-) delete mode 100644 param/dxl_model/hand_controller.model delete mode 100644 param/dxl_model/hand_finger_joint_16.model delete mode 100644 param/dxl_model/hand_finger_joint_17.model delete mode 100644 param/dxl_model/hand_finger_joint_18.model delete mode 100644 param/dxl_model/hand_finger_joint_19.model delete mode 100644 param/dxl_model/hand_finger_joint_2.model delete mode 100644 param/dxl_model/hand_finger_joint_21.model delete mode 100644 param/dxl_model/hand_finger_joint_22.model delete mode 100644 param/dxl_model/hand_finger_joint_23.model delete mode 100644 param/dxl_model/hand_finger_joint_24.model delete mode 100644 param/dxl_model/hand_finger_joint_3.model delete mode 100644 param/dxl_model/hand_finger_joint_4.model delete mode 100644 param/dxl_model/hand_finger_joint_6.model delete mode 100644 param/dxl_model/hand_finger_joint_7.model delete mode 100644 param/dxl_model/hand_finger_joint_8.model delete mode 100644 param/dxl_model/hand_finger_joint_9.model delete mode 100644 param/dxl_model/hand_pressure_sensor_5.model rename param/dxl_model/{hand_finger_joint_13.model => hx5_d20_r_synctable_1_device_1.model} (74%) rename param/dxl_model/{hand_finger_joint_1.model => hx5_d20_r_synctable_1_device_2.model} (74%) rename param/dxl_model/{hand_finger_joint_11.model => hx5_d20_r_synctable_1_device_3.model} (74%) rename param/dxl_model/{hand_finger_joint_12.model => hx5_d20_r_synctable_1_device_4.model} (74%) rename param/dxl_model/{hand_pressure_sensor_10.model => hx5_d20_r_synctable_1_device_5.model} (65%) rename param/dxl_model/{hand_finger_joint_14.model => hx5_d20_r_synctable_2_device_1.model} (90%) create mode 100644 param/dxl_model/hx5_d20_r_synctable_2_device_2.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_2_device_3.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_2_device_4.model rename param/dxl_model/{hand_pressure_sensor_15.model => hx5_d20_r_synctable_2_device_5.model} (65%) create mode 100644 param/dxl_model/hx5_d20_r_synctable_3_device_1.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_3_device_2.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_3_device_3.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_3_device_4.model rename param/dxl_model/{hand_pressure_sensor_20.model => hx5_d20_r_synctable_3_device_5.model} (65%) create mode 100644 param/dxl_model/hx5_d20_r_synctable_4_device_1.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_4_device_2.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_4_device_3.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_4_device_4.model rename param/dxl_model/{hand_pressure_sensor_25.model => hx5_d20_r_synctable_4_device_5.model} (65%) create mode 100644 param/dxl_model/hx5_d20_r_synctable_5_device_1.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_5_device_2.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_5_device_3.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_5_device_4.model create mode 100644 param/dxl_model/hx5_d20_r_synctable_5_device_5.model create mode 100644 param/dxl_model/hx5_d20_rl.model create mode 100644 param/dxl_model/hx5_d20_rr.model create mode 100644 scripts/hx_synctable_model_generator.py create mode 100644 scripts/xml_to_model_parser.py diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index 8c1a555..c88b3ec 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -3,32 +3,33 @@ Number Name 220 omy_hat.model 230 omy_end.model 231 omy_end_rh_p12_rn.model -260 hand_controller.model -6001 hand_finger_joint_1.model -6002 hand_finger_joint_2.model -6003 hand_finger_joint_3.model -6004 hand_finger_joint_4.model -6005 hand_pressure_sensor_5.model -6006 hand_finger_joint_6.model -6007 hand_finger_joint_7.model -6008 hand_finger_joint_8.model -6009 hand_finger_joint_9.model -6010 hand_pressure_sensor_10.model -6011 hand_finger_joint_11.model -6012 hand_finger_joint_12.model -6013 hand_finger_joint_13.model -6014 hand_finger_joint_14.model -6015 hand_pressure_sensor_15.model -6016 hand_finger_joint_16.model -6017 hand_finger_joint_17.model -6018 hand_finger_joint_18.model -6019 hand_finger_joint_19.model -6020 hand_pressure_sensor_20.model -6021 hand_finger_joint_21.model -6022 hand_finger_joint_22.model -6023 hand_finger_joint_23.model -6024 hand_finger_joint_24.model -6025 hand_pressure_sensor_25.model +260 hx5_d20_rr.model +261 hx5_d20_rl.model +6001 hx5_synctable_3_device_1.model +6002 hx5_synctable_3_device_2.model +6003 hx5_synctable_3_device_3.model +6004 hx5_synctable_3_device_4.model +6005 hx5_synctable_3_device_5.model +6006 hx5_synctable_5_device_1.model +6007 hx5_synctable_5_device_2.model +6008 hx5_synctable_5_device_2.model +6009 hx5_synctable_5_device_3.model +6010 hx5_synctable_5_device_4.model +6011 hx5_synctable_2_device_1.model +6012 hx5_synctable_2_device_2.model +6013 hx5_synctable_2_device_3.model +6014 hx5_synctable_2_device_4.model +6015 hx5_synctable_2_device_5.model +6016 hx5_synctable_4_device_1.model +6017 hx5_synctable_4_device_2.model +6018 hx5_synctable_4_device_3.model +6019 hx5_synctable_4_device_4.model +6020 hx5_synctable_4_device_5.model +6021 hx5_synctable_1_device_1.model +6022 hx5_synctable_1_device_2.model +6023 hx5_synctable_1_device_3.model +6024 hx5_synctable_1_device_4.model +6025 hx5_synctable_1_device_5.model 311 mx_64.model 321 mx_106.model 350 xl320.model diff --git a/param/dxl_model/hand_controller.model b/param/dxl_model/hand_controller.model deleted file mode 100644 index a5c1457..0000000 --- a/param/dxl_model/hand_controller.model +++ /dev/null @@ -1,868 +0,0 @@ -[control table] -Address Size Data Name -0 2 Model Number -2 4 Model Information -6 1 Firmware Version -7 1 ID -8 1 Bus Watchdog -12 1 Baud Rate (Bus) -13 1 Return Delay Time -15 1 Status Return Level -16 1 Registered Instruction -20 1 Baud Rate (DXL) -65 1 LED -70 1 Table Sync Enable -100 2 Realtime Tick -102 2 Present Input Voltage -106 1 Status -122 2 Indirect Address 1 -634 1 Indirect Data 1 -122 2 Indirect Address Read -634 1 Indirect Data Read -452 2 Indirect Address Write -799 1 Indirect Data Write -1024 1 SyncTable 1 ID 1 -1025 1 SyncTable 1 ID 2 -1026 1 SyncTable 1 ID 3 -1027 1 SyncTable 1 ID 4 -1028 1 SyncTable 1 ID 5 -1029 2 SyncTable 1 Read Address 1 -1031 2 SyncTable 1 Read Address 2 -1033 2 SyncTable 1 Read Address 3 -1035 2 SyncTable 1 Read Address 4 -1037 2 SyncTable 1 Read Address 5 -1039 2 SyncTable 1 Read Size 1 -1041 2 SyncTable 1 Read Size 2 -1043 2 SyncTable 1 Read Size 3 -1045 2 SyncTable 1 Read Size 4 -1047 2 SyncTable 1 Read Size 5 -1049 2 SyncTable 1 Write Address 1 -1051 2 SyncTable 1 Write Address 2 -1053 2 SyncTable 1 Write Address 3 -1055 2 SyncTable 1 Write Address 4 -1057 2 SyncTable 1 Write Address 5 -1059 2 SyncTable 1 Write Size 1 -1061 2 SyncTable 1 Write Size 2 -1063 2 SyncTable 1 Write Size 3 -1065 2 SyncTable 1 Write Size 4 -1067 2 SyncTable 1 Write Size 5 -1069 1 SyncTable 1 Read Data 1 -1070 1 SyncTable 1 Read Data 2 -1071 1 SyncTable 1 Read Data 3 -1072 1 SyncTable 1 Read Data 4 -1073 1 SyncTable 1 Read Data 5 -1074 1 SyncTable 1 Read Data 6 -1075 1 SyncTable 1 Read Data 7 -1076 1 SyncTable 1 Read Data 8 -1077 1 SyncTable 1 Read Data 9 -1078 1 SyncTable 1 Read Data 10 -1079 1 SyncTable 1 Read Data 11 -1080 1 SyncTable 1 Read Data 12 -1081 1 SyncTable 1 Read Data 13 -1082 1 SyncTable 1 Read Data 14 -1083 1 SyncTable 1 Read Data 15 -1084 1 SyncTable 1 Read Data 16 -1085 1 SyncTable 1 Read Data 17 -1086 1 SyncTable 1 Read Data 18 -1087 1 SyncTable 1 Read Data 19 -1088 1 SyncTable 1 Read Data 20 -1089 1 SyncTable 1 Read Data 21 -1090 1 SyncTable 1 Read Data 22 -1091 1 SyncTable 1 Read Data 23 -1092 1 SyncTable 1 Read Data 24 -1093 1 SyncTable 1 Read Data 25 -1094 1 SyncTable 1 Read Data 26 -1095 1 SyncTable 1 Read Data 27 -1096 1 SyncTable 1 Read Data 28 -1097 1 SyncTable 1 Read Data 29 -1098 1 SyncTable 1 Read Data 30 -1099 1 SyncTable 1 Read Data 31 -1100 1 SyncTable 1 Read Data 32 -1101 1 SyncTable 1 Read Data 33 -1102 1 SyncTable 1 Read Data 34 -1103 1 SyncTable 1 Read Data 35 -1104 1 SyncTable 1 Read Data 36 -1105 1 SyncTable 1 Read Data 37 -1106 1 SyncTable 1 Read Data 38 -1107 1 SyncTable 1 Read Data 39 -1108 1 SyncTable 1 Read Data 40 -1109 1 SyncTable 1 Read Data 41 -1110 1 SyncTable 1 Read Data 42 -1111 1 SyncTable 1 Read Data 43 -1112 1 SyncTable 1 Read Data 44 -1113 1 SyncTable 1 Read Data 45 -1114 1 SyncTable 1 Read Data 46 -1115 1 SyncTable 1 Read Data 47 -1116 1 SyncTable 1 Read Data 48 -1117 1 SyncTable 1 Read Data 49 -1118 1 SyncTable 1 Read Data 50 -1119 1 SyncTable 1 Read Data 51 -1120 1 SyncTable 1 Read Data 52 -1121 1 SyncTable 1 Read Data 53 -1122 1 SyncTable 1 Read Data 54 -1123 1 SyncTable 1 Read Data 55 -1124 1 SyncTable 1 Read Data 56 -1125 1 SyncTable 1 Read Data 57 -1126 1 SyncTable 1 Read Data 58 -1127 1 SyncTable 1 Read Data 59 -1128 1 SyncTable 1 Read Data 60 -1129 1 SyncTable 1 Read Data 61 -1130 1 SyncTable 1 Read Data 62 -1131 1 SyncTable 1 Read Data 63 -1132 1 SyncTable 1 Read Data 64 -1133 1 SyncTable 1 Read Data 65 -1134 1 SyncTable 1 Read Data 66 -1135 1 SyncTable 1 Read Data 67 -1136 1 SyncTable 1 Read Data 68 -1137 1 SyncTable 1 Read Data 69 -1138 1 SyncTable 1 Read Data 70 -1139 1 SyncTable 1 Read Data 71 -1140 1 SyncTable 1 Read Data 72 -1141 1 SyncTable 1 Write Data 1 -1142 1 SyncTable 1 Write Data 2 -1143 1 SyncTable 1 Write Data 3 -1144 1 SyncTable 1 Write Data 4 -1145 1 SyncTable 1 Write Data 5 -1146 1 SyncTable 1 Write Data 6 -1147 1 SyncTable 1 Write Data 7 -1148 1 SyncTable 1 Write Data 8 -1149 1 SyncTable 1 Write Data 9 -1150 1 SyncTable 1 Write Data 10 -1151 1 SyncTable 1 Write Data 11 -1152 1 SyncTable 1 Write Data 12 -1153 1 SyncTable 1 Write Data 13 -1154 1 SyncTable 1 Write Data 14 -1155 1 SyncTable 1 Write Data 15 -1156 1 SyncTable 1 Write Data 16 -1157 1 SyncTable 1 Write Data 17 -1158 1 SyncTable 1 Write Data 18 -1159 1 SyncTable 1 Write Data 19 -1160 1 SyncTable 1 Write Data 20 -1161 1 SyncTable 1 Write Data 21 -1162 1 SyncTable 1 Write Data 22 -1163 1 SyncTable 1 Write Data 23 -1164 1 SyncTable 1 Write Data 24 -1165 1 SyncTable 1 Write Data 25 -1166 1 SyncTable 1 Write Data 26 -1167 1 SyncTable 1 Write Data 27 -1168 1 SyncTable 1 Write Data 28 -1169 1 SyncTable 1 Write Data 29 -1170 1 SyncTable 1 Write Data 30 -1171 1 SyncTable 1 Write Data 31 -1172 1 SyncTable 1 Write Data 32 -1173 1 SyncTable 1 Write Data 33 -1174 1 SyncTable 1 Write Data 34 -1175 1 SyncTable 1 Write Data 35 -1176 1 SyncTable 1 Write Data 36 -1177 1 SyncTable 1 Write Data 37 -1178 1 SyncTable 1 Write Data 38 -1179 1 SyncTable 1 Write Data 39 -1180 1 SyncTable 1 Write Data 40 -1181 1 SyncTable 1 Write Data 41 -1182 1 SyncTable 1 Write Data 42 -1183 1 SyncTable 1 Write Data 43 -1184 1 SyncTable 1 Write Data 44 -1185 1 SyncTable 1 Write Data 45 -1186 1 SyncTable 1 Write Data 46 -1187 1 SyncTable 1 Write Data 47 -1188 1 SyncTable 1 Write Data 48 -1189 1 SyncTable 1 Write Data 49 -1190 1 SyncTable 1 Write Data 50 -1191 1 SyncTable 1 Write Data 51 -1192 1 SyncTable 1 Write Data 52 -1193 1 SyncTable 1 Write Data 53 -1194 1 SyncTable 1 Write Data 54 -1195 1 SyncTable 1 Write Data 55 -1196 1 SyncTable 1 Write Data 56 -1197 1 SyncTable 1 Write Data 57 -1198 1 SyncTable 1 Write Data 58 -1199 1 SyncTable 1 Write Data 59 -1200 1 SyncTable 1 Write Data 60 -1201 1 SyncTable 1 Write Data 61 -1202 1 SyncTable 1 Write Data 62 -1203 1 SyncTable 1 Write Data 63 -1204 1 SyncTable 1 Write Data 64 -1205 1 SyncTable 1 Write Data 65 -1206 1 SyncTable 1 Write Data 66 -1207 1 SyncTable 1 Write Data 67 -1208 1 SyncTable 1 Write Data 68 -1209 1 SyncTable 1 Write Data 69 -1210 1 SyncTable 1 Write Data 70 -1211 1 SyncTable 1 Write Data 71 -1212 1 SyncTable 1 Write Data 72 -1213 1 SyncTable 2 ID 1 -1214 1 SyncTable 2 ID 2 -1215 1 SyncTable 2 ID 3 -1216 1 SyncTable 2 ID 4 -1217 1 SyncTable 2 ID 5 -1218 2 SyncTable 2 Read Address 1 -1220 2 SyncTable 2 Read Address 2 -1222 2 SyncTable 2 Read Address 3 -1224 2 SyncTable 2 Read Address 4 -1226 2 SyncTable 2 Read Address 5 -1228 2 SyncTable 2 Read Size 1 -1230 2 SyncTable 2 Read Size 2 -1232 2 SyncTable 2 Read Size 3 -1234 2 SyncTable 2 Read Size 4 -1236 2 SyncTable 2 Read Size 5 -1238 2 SyncTable 2 Write Address 1 -1240 2 SyncTable 2 Write Address 2 -1242 2 SyncTable 2 Write Address 3 -1244 2 SyncTable 2 Write Address 4 -1246 2 SyncTable 2 Write Address 5 -1248 2 SyncTable 2 Write Size 1 -1250 2 SyncTable 2 Write Size 2 -1252 2 SyncTable 2 Write Size 3 -1254 2 SyncTable 2 Write Size 4 -1256 2 SyncTable 2 Write Size 5 -1258 1 SyncTable 2 Read Data 1 -1259 1 SyncTable 2 Read Data 2 -1260 1 SyncTable 2 Read Data 3 -1261 1 SyncTable 2 Read Data 4 -1262 1 SyncTable 2 Read Data 5 -1263 1 SyncTable 2 Read Data 6 -1264 1 SyncTable 2 Read Data 7 -1265 1 SyncTable 2 Read Data 8 -1266 1 SyncTable 2 Read Data 9 -1267 1 SyncTable 2 Read Data 10 -1268 1 SyncTable 2 Read Data 11 -1269 1 SyncTable 2 Read Data 12 -1270 1 SyncTable 2 Read Data 13 -1271 1 SyncTable 2 Read Data 14 -1272 1 SyncTable 2 Read Data 15 -1273 1 SyncTable 2 Read Data 16 -1274 1 SyncTable 2 Read Data 17 -1275 1 SyncTable 2 Read Data 18 -1276 1 SyncTable 2 Read Data 19 -1277 1 SyncTable 2 Read Data 20 -1278 1 SyncTable 2 Read Data 21 -1279 1 SyncTable 2 Read Data 22 -1280 1 SyncTable 2 Read Data 23 -1281 1 SyncTable 2 Read Data 24 -1282 1 SyncTable 2 Read Data 25 -1283 1 SyncTable 2 Read Data 26 -1284 1 SyncTable 2 Read Data 27 -1285 1 SyncTable 2 Read Data 28 -1286 1 SyncTable 2 Read Data 29 -1287 1 SyncTable 2 Read Data 30 -1288 1 SyncTable 2 Read Data 31 -1289 1 SyncTable 2 Read Data 32 -1290 1 SyncTable 2 Read Data 33 -1291 1 SyncTable 2 Read Data 34 -1292 1 SyncTable 2 Read Data 35 -1293 1 SyncTable 2 Read Data 36 -1294 1 SyncTable 2 Read Data 37 -1295 1 SyncTable 2 Read Data 38 -1296 1 SyncTable 2 Read Data 39 -1297 1 SyncTable 2 Read Data 40 -1298 1 SyncTable 2 Read Data 41 -1299 1 SyncTable 2 Read Data 42 -1300 1 SyncTable 2 Read Data 43 -1301 1 SyncTable 2 Read Data 44 -1302 1 SyncTable 2 Read Data 45 -1303 1 SyncTable 2 Read Data 46 -1304 1 SyncTable 2 Read Data 47 -1305 1 SyncTable 2 Read Data 48 -1306 1 SyncTable 2 Read Data 49 -1307 1 SyncTable 2 Read Data 50 -1308 1 SyncTable 2 Read Data 51 -1309 1 SyncTable 2 Read Data 52 -1310 1 SyncTable 2 Read Data 53 -1311 1 SyncTable 2 Read Data 54 -1312 1 SyncTable 2 Read Data 55 -1313 1 SyncTable 2 Read Data 56 -1314 1 SyncTable 2 Read Data 57 -1315 1 SyncTable 2 Read Data 58 -1316 1 SyncTable 2 Read Data 59 -1317 1 SyncTable 2 Read Data 60 -1318 1 SyncTable 2 Read Data 61 -1319 1 SyncTable 2 Read Data 62 -1320 1 SyncTable 2 Read Data 63 -1321 1 SyncTable 2 Read Data 64 -1322 1 SyncTable 2 Read Data 65 -1323 1 SyncTable 2 Read Data 66 -1324 1 SyncTable 2 Read Data 67 -1325 1 SyncTable 2 Read Data 68 -1326 1 SyncTable 2 Read Data 69 -1327 1 SyncTable 2 Read Data 70 -1328 1 SyncTable 2 Read Data 71 -1329 1 SyncTable 2 Read Data 72 -1330 1 SyncTable 2 Write Data 1 -1331 1 SyncTable 2 Write Data 2 -1332 1 SyncTable 2 Write Data 3 -1333 1 SyncTable 2 Write Data 4 -1334 1 SyncTable 2 Write Data 5 -1335 1 SyncTable 2 Write Data 6 -1336 1 SyncTable 2 Write Data 7 -1337 1 SyncTable 2 Write Data 8 -1338 1 SyncTable 2 Write Data 9 -1339 1 SyncTable 2 Write Data 10 -1340 1 SyncTable 2 Write Data 11 -1341 1 SyncTable 2 Write Data 12 -1342 1 SyncTable 2 Write Data 13 -1343 1 SyncTable 2 Write Data 14 -1344 1 SyncTable 2 Write Data 15 -1345 1 SyncTable 2 Write Data 16 -1346 1 SyncTable 2 Write Data 17 -1347 1 SyncTable 2 Write Data 18 -1348 1 SyncTable 2 Write Data 19 -1349 1 SyncTable 2 Write Data 20 -1350 1 SyncTable 2 Write Data 21 -1351 1 SyncTable 2 Write Data 22 -1352 1 SyncTable 2 Write Data 23 -1353 1 SyncTable 2 Write Data 24 -1354 1 SyncTable 2 Write Data 25 -1355 1 SyncTable 2 Write Data 26 -1356 1 SyncTable 2 Write Data 27 -1357 1 SyncTable 2 Write Data 28 -1358 1 SyncTable 2 Write Data 29 -1359 1 SyncTable 2 Write Data 30 -1360 1 SyncTable 2 Write Data 31 -1361 1 SyncTable 2 Write Data 32 -1362 1 SyncTable 2 Write Data 33 -1363 1 SyncTable 2 Write Data 34 -1364 1 SyncTable 2 Write Data 35 -1365 1 SyncTable 2 Write Data 36 -1366 1 SyncTable 2 Write Data 37 -1367 1 SyncTable 2 Write Data 38 -1368 1 SyncTable 2 Write Data 39 -1369 1 SyncTable 2 Write Data 40 -1370 1 SyncTable 2 Write Data 41 -1371 1 SyncTable 2 Write Data 42 -1372 1 SyncTable 2 Write Data 43 -1373 1 SyncTable 2 Write Data 44 -1374 1 SyncTable 2 Write Data 45 -1375 1 SyncTable 2 Write Data 46 -1376 1 SyncTable 2 Write Data 47 -1377 1 SyncTable 2 Write Data 48 -1378 1 SyncTable 2 Write Data 49 -1379 1 SyncTable 2 Write Data 50 -1380 1 SyncTable 2 Write Data 51 -1381 1 SyncTable 2 Write Data 52 -1382 1 SyncTable 2 Write Data 53 -1383 1 SyncTable 2 Write Data 54 -1384 1 SyncTable 2 Write Data 55 -1385 1 SyncTable 2 Write Data 56 -1386 1 SyncTable 2 Write Data 57 -1387 1 SyncTable 2 Write Data 58 -1388 1 SyncTable 2 Write Data 59 -1389 1 SyncTable 2 Write Data 60 -1390 1 SyncTable 2 Write Data 61 -1391 1 SyncTable 2 Write Data 62 -1392 1 SyncTable 2 Write Data 63 -1393 1 SyncTable 2 Write Data 64 -1394 1 SyncTable 2 Write Data 65 -1395 1 SyncTable 2 Write Data 66 -1396 1 SyncTable 2 Write Data 67 -1397 1 SyncTable 2 Write Data 68 -1398 1 SyncTable 2 Write Data 69 -1399 1 SyncTable 2 Write Data 70 -1400 1 SyncTable 2 Write Data 71 -1401 1 SyncTable 2 Write Data 72 -1402 1 SyncTable 3 ID 1 -1403 1 SyncTable 3 ID 2 -1404 1 SyncTable 3 ID 3 -1405 1 SyncTable 3 ID 4 -1406 1 SyncTable 3 ID 5 -1407 2 SyncTable 3 Read Address 1 -1409 2 SyncTable 3 Read Address 2 -1411 2 SyncTable 3 Read Address 3 -1413 2 SyncTable 3 Read Address 4 -1415 2 SyncTable 3 Read Address 5 -1417 2 SyncTable 3 Read Size 1 -1419 2 SyncTable 3 Read Size 2 -1421 2 SyncTable 3 Read Size 3 -1423 2 SyncTable 3 Read Size 4 -1425 2 SyncTable 3 Read Size 5 -1427 2 SyncTable 3 Write Address 1 -1429 2 SyncTable 3 Write Address 2 -1431 2 SyncTable 3 Write Address 3 -1433 2 SyncTable 3 Write Address 4 -1435 2 SyncTable 3 Write Address 5 -1437 2 SyncTable 3 Write Size 1 -1439 2 SyncTable 3 Write Size 2 -1441 2 SyncTable 3 Write Size 3 -1443 2 SyncTable 3 Write Size 4 -1445 2 SyncTable 3 Write Size 5 -1447 1 SyncTable 3 Read Data 1 -1448 1 SyncTable 3 Read Data 2 -1449 1 SyncTable 3 Read Data 3 -1450 1 SyncTable 3 Read Data 4 -1451 1 SyncTable 3 Read Data 5 -1452 1 SyncTable 3 Read Data 6 -1453 1 SyncTable 3 Read Data 7 -1454 1 SyncTable 3 Read Data 8 -1455 1 SyncTable 3 Read Data 9 -1456 1 SyncTable 3 Read Data 10 -1457 1 SyncTable 3 Read Data 11 -1458 1 SyncTable 3 Read Data 12 -1459 1 SyncTable 3 Read Data 13 -1460 1 SyncTable 3 Read Data 14 -1461 1 SyncTable 3 Read Data 15 -1462 1 SyncTable 3 Read Data 16 -1463 1 SyncTable 3 Read Data 17 -1464 1 SyncTable 3 Read Data 18 -1465 1 SyncTable 3 Read Data 19 -1466 1 SyncTable 3 Read Data 20 -1467 1 SyncTable 3 Read Data 21 -1468 1 SyncTable 3 Read Data 22 -1469 1 SyncTable 3 Read Data 23 -1470 1 SyncTable 3 Read Data 24 -1471 1 SyncTable 3 Read Data 25 -1472 1 SyncTable 3 Read Data 26 -1473 1 SyncTable 3 Read Data 27 -1474 1 SyncTable 3 Read Data 28 -1475 1 SyncTable 3 Read Data 29 -1476 1 SyncTable 3 Read Data 30 -1477 1 SyncTable 3 Read Data 31 -1478 1 SyncTable 3 Read Data 32 -1479 1 SyncTable 3 Read Data 33 -1480 1 SyncTable 3 Read Data 34 -1481 1 SyncTable 3 Read Data 35 -1482 1 SyncTable 3 Read Data 36 -1483 1 SyncTable 3 Read Data 37 -1484 1 SyncTable 3 Read Data 38 -1485 1 SyncTable 3 Read Data 39 -1486 1 SyncTable 3 Read Data 40 -1487 1 SyncTable 3 Read Data 41 -1488 1 SyncTable 3 Read Data 42 -1489 1 SyncTable 3 Read Data 43 -1490 1 SyncTable 3 Read Data 44 -1491 1 SyncTable 3 Read Data 45 -1492 1 SyncTable 3 Read Data 46 -1493 1 SyncTable 3 Read Data 47 -1494 1 SyncTable 3 Read Data 48 -1495 1 SyncTable 3 Read Data 49 -1496 1 SyncTable 3 Read Data 50 -1497 1 SyncTable 3 Read Data 51 -1498 1 SyncTable 3 Read Data 52 -1499 1 SyncTable 3 Read Data 53 -1500 1 SyncTable 3 Read Data 54 -1501 1 SyncTable 3 Read Data 55 -1502 1 SyncTable 3 Read Data 56 -1503 1 SyncTable 3 Read Data 57 -1504 1 SyncTable 3 Read Data 58 -1505 1 SyncTable 3 Read Data 59 -1506 1 SyncTable 3 Read Data 60 -1507 1 SyncTable 3 Read Data 61 -1508 1 SyncTable 3 Read Data 62 -1509 1 SyncTable 3 Read Data 63 -1510 1 SyncTable 3 Read Data 64 -1511 1 SyncTable 3 Read Data 65 -1512 1 SyncTable 3 Read Data 66 -1513 1 SyncTable 3 Read Data 67 -1514 1 SyncTable 3 Read Data 68 -1515 1 SyncTable 3 Read Data 69 -1516 1 SyncTable 3 Read Data 70 -1517 1 SyncTable 3 Read Data 71 -1518 1 SyncTable 3 Read Data 72 -1519 1 SyncTable 3 Write Data 1 -1520 1 SyncTable 3 Write Data 2 -1521 1 SyncTable 3 Write Data 3 -1522 1 SyncTable 3 Write Data 4 -1523 1 SyncTable 3 Write Data 5 -1524 1 SyncTable 3 Write Data 6 -1525 1 SyncTable 3 Write Data 7 -1526 1 SyncTable 3 Write Data 8 -1527 1 SyncTable 3 Write Data 9 -1528 1 SyncTable 3 Write Data 10 -1529 1 SyncTable 3 Write Data 11 -1530 1 SyncTable 3 Write Data 12 -1531 1 SyncTable 3 Write Data 13 -1532 1 SyncTable 3 Write Data 14 -1533 1 SyncTable 3 Write Data 15 -1534 1 SyncTable 3 Write Data 16 -1535 1 SyncTable 3 Write Data 17 -1536 1 SyncTable 3 Write Data 18 -1537 1 SyncTable 3 Write Data 19 -1538 1 SyncTable 3 Write Data 20 -1539 1 SyncTable 3 Write Data 21 -1540 1 SyncTable 3 Write Data 22 -1541 1 SyncTable 3 Write Data 23 -1542 1 SyncTable 3 Write Data 24 -1543 1 SyncTable 3 Write Data 25 -1544 1 SyncTable 3 Write Data 26 -1545 1 SyncTable 3 Write Data 27 -1546 1 SyncTable 3 Write Data 28 -1547 1 SyncTable 3 Write Data 29 -1548 1 SyncTable 3 Write Data 30 -1549 1 SyncTable 3 Write Data 31 -1550 1 SyncTable 3 Write Data 32 -1551 1 SyncTable 3 Write Data 33 -1552 1 SyncTable 3 Write Data 34 -1553 1 SyncTable 3 Write Data 35 -1554 1 SyncTable 3 Write Data 36 -1555 1 SyncTable 3 Write Data 37 -1556 1 SyncTable 3 Write Data 38 -1557 1 SyncTable 3 Write Data 39 -1558 1 SyncTable 3 Write Data 40 -1559 1 SyncTable 3 Write Data 41 -1560 1 SyncTable 3 Write Data 42 -1561 1 SyncTable 3 Write Data 43 -1562 1 SyncTable 3 Write Data 44 -1563 1 SyncTable 3 Write Data 45 -1564 1 SyncTable 3 Write Data 46 -1565 1 SyncTable 3 Write Data 47 -1566 1 SyncTable 3 Write Data 48 -1567 1 SyncTable 3 Write Data 49 -1568 1 SyncTable 3 Write Data 50 -1569 1 SyncTable 3 Write Data 51 -1570 1 SyncTable 3 Write Data 52 -1571 1 SyncTable 3 Write Data 53 -1572 1 SyncTable 3 Write Data 54 -1573 1 SyncTable 3 Write Data 55 -1574 1 SyncTable 3 Write Data 56 -1575 1 SyncTable 3 Write Data 57 -1576 1 SyncTable 3 Write Data 58 -1577 1 SyncTable 3 Write Data 59 -1578 1 SyncTable 3 Write Data 60 -1579 1 SyncTable 3 Write Data 61 -1580 1 SyncTable 3 Write Data 62 -1581 1 SyncTable 3 Write Data 63 -1582 1 SyncTable 3 Write Data 64 -1583 1 SyncTable 3 Write Data 65 -1584 1 SyncTable 3 Write Data 66 -1585 1 SyncTable 3 Write Data 67 -1586 1 SyncTable 3 Write Data 68 -1587 1 SyncTable 3 Write Data 69 -1588 1 SyncTable 3 Write Data 70 -1589 1 SyncTable 3 Write Data 71 -1590 1 SyncTable 3 Write Data 72 -1591 1 SyncTable 4 ID 1 -1592 1 SyncTable 4 ID 2 -1593 1 SyncTable 4 ID 3 -1594 1 SyncTable 4 ID 4 -1595 1 SyncTable 4 ID 5 -1596 2 SyncTable 4 Read Address 1 -1598 2 SyncTable 4 Read Address 2 -1600 2 SyncTable 4 Read Address 3 -1602 2 SyncTable 4 Read Address 4 -1604 2 SyncTable 4 Read Address 5 -1606 2 SyncTable 4 Read Size 1 -1608 2 SyncTable 4 Read Size 2 -1610 2 SyncTable 4 Read Size 3 -1612 2 SyncTable 4 Read Size 4 -1614 2 SyncTable 4 Read Size 5 -1616 2 SyncTable 4 Write Address 1 -1618 2 SyncTable 4 Write Address 2 -1620 2 SyncTable 4 Write Address 3 -1622 2 SyncTable 4 Write Address 4 -1624 2 SyncTable 4 Write Address 5 -1626 2 SyncTable 4 Write Size 1 -1628 2 SyncTable 4 Write Size 2 -1630 2 SyncTable 4 Write Size 3 -1632 2 SyncTable 4 Write Size 4 -1634 2 SyncTable 4 Write Size 5 -1636 1 SyncTable 4 Read Data 1 -1637 1 SyncTable 4 Read Data 2 -1638 1 SyncTable 4 Read Data 3 -1639 1 SyncTable 4 Read Data 4 -1640 1 SyncTable 4 Read Data 5 -1641 1 SyncTable 4 Read Data 6 -1642 1 SyncTable 4 Read Data 7 -1643 1 SyncTable 4 Read Data 8 -1644 1 SyncTable 4 Read Data 9 -1645 1 SyncTable 4 Read Data 10 -1646 1 SyncTable 4 Read Data 11 -1647 1 SyncTable 4 Read Data 12 -1648 1 SyncTable 4 Read Data 13 -1649 1 SyncTable 4 Read Data 14 -1650 1 SyncTable 4 Read Data 15 -1651 1 SyncTable 4 Read Data 16 -1652 1 SyncTable 4 Read Data 17 -1653 1 SyncTable 4 Read Data 18 -1654 1 SyncTable 4 Read Data 19 -1655 1 SyncTable 4 Read Data 20 -1656 1 SyncTable 4 Read Data 21 -1657 1 SyncTable 4 Read Data 22 -1658 1 SyncTable 4 Read Data 23 -1659 1 SyncTable 4 Read Data 24 -1660 1 SyncTable 4 Read Data 25 -1661 1 SyncTable 4 Read Data 26 -1662 1 SyncTable 4 Read Data 27 -1663 1 SyncTable 4 Read Data 28 -1664 1 SyncTable 4 Read Data 29 -1665 1 SyncTable 4 Read Data 30 -1666 1 SyncTable 4 Read Data 31 -1667 1 SyncTable 4 Read Data 32 -1668 1 SyncTable 4 Read Data 33 -1669 1 SyncTable 4 Read Data 34 -1670 1 SyncTable 4 Read Data 35 -1671 1 SyncTable 4 Read Data 36 -1672 1 SyncTable 4 Read Data 37 -1673 1 SyncTable 4 Read Data 38 -1674 1 SyncTable 4 Read Data 39 -1675 1 SyncTable 4 Read Data 40 -1676 1 SyncTable 4 Read Data 41 -1677 1 SyncTable 4 Read Data 42 -1678 1 SyncTable 4 Read Data 43 -1679 1 SyncTable 4 Read Data 44 -1680 1 SyncTable 4 Read Data 45 -1681 1 SyncTable 4 Read Data 46 -1682 1 SyncTable 4 Read Data 47 -1683 1 SyncTable 4 Read Data 48 -1684 1 SyncTable 4 Read Data 49 -1685 1 SyncTable 4 Read Data 50 -1686 1 SyncTable 4 Read Data 51 -1687 1 SyncTable 4 Read Data 52 -1688 1 SyncTable 4 Read Data 53 -1689 1 SyncTable 4 Read Data 54 -1690 1 SyncTable 4 Read Data 55 -1691 1 SyncTable 4 Read Data 56 -1692 1 SyncTable 4 Read Data 57 -1693 1 SyncTable 4 Read Data 58 -1694 1 SyncTable 4 Read Data 59 -1695 1 SyncTable 4 Read Data 60 -1696 1 SyncTable 4 Read Data 61 -1697 1 SyncTable 4 Read Data 62 -1698 1 SyncTable 4 Read Data 63 -1699 1 SyncTable 4 Read Data 64 -1700 1 SyncTable 4 Read Data 65 -1701 1 SyncTable 4 Read Data 66 -1702 1 SyncTable 4 Read Data 67 -1703 1 SyncTable 4 Read Data 68 -1704 1 SyncTable 4 Read Data 69 -1705 1 SyncTable 4 Read Data 70 -1706 1 SyncTable 4 Read Data 71 -1707 1 SyncTable 4 Read Data 72 -1708 1 SyncTable 4 Write Data 1 -1709 1 SyncTable 4 Write Data 2 -1710 1 SyncTable 4 Write Data 3 -1711 1 SyncTable 4 Write Data 4 -1712 1 SyncTable 4 Write Data 5 -1713 1 SyncTable 4 Write Data 6 -1714 1 SyncTable 4 Write Data 7 -1715 1 SyncTable 4 Write Data 8 -1716 1 SyncTable 4 Write Data 9 -1717 1 SyncTable 4 Write Data 10 -1718 1 SyncTable 4 Write Data 11 -1719 1 SyncTable 4 Write Data 12 -1720 1 SyncTable 4 Write Data 13 -1721 1 SyncTable 4 Write Data 14 -1722 1 SyncTable 4 Write Data 15 -1723 1 SyncTable 4 Write Data 16 -1724 1 SyncTable 4 Write Data 17 -1725 1 SyncTable 4 Write Data 18 -1726 1 SyncTable 4 Write Data 19 -1727 1 SyncTable 4 Write Data 20 -1728 1 SyncTable 4 Write Data 21 -1729 1 SyncTable 4 Write Data 22 -1730 1 SyncTable 4 Write Data 23 -1731 1 SyncTable 4 Write Data 24 -1732 1 SyncTable 4 Write Data 25 -1733 1 SyncTable 4 Write Data 26 -1734 1 SyncTable 4 Write Data 27 -1735 1 SyncTable 4 Write Data 28 -1736 1 SyncTable 4 Write Data 29 -1737 1 SyncTable 4 Write Data 30 -1738 1 SyncTable 4 Write Data 31 -1739 1 SyncTable 4 Write Data 32 -1740 1 SyncTable 4 Write Data 33 -1741 1 SyncTable 4 Write Data 34 -1742 1 SyncTable 4 Write Data 35 -1743 1 SyncTable 4 Write Data 36 -1744 1 SyncTable 4 Write Data 37 -1745 1 SyncTable 4 Write Data 38 -1746 1 SyncTable 4 Write Data 39 -1747 1 SyncTable 4 Write Data 40 -1748 1 SyncTable 4 Write Data 41 -1749 1 SyncTable 4 Write Data 42 -1750 1 SyncTable 4 Write Data 43 -1751 1 SyncTable 4 Write Data 44 -1752 1 SyncTable 4 Write Data 45 -1753 1 SyncTable 4 Write Data 46 -1754 1 SyncTable 4 Write Data 47 -1755 1 SyncTable 4 Write Data 48 -1756 1 SyncTable 4 Write Data 49 -1757 1 SyncTable 4 Write Data 50 -1758 1 SyncTable 4 Write Data 51 -1759 1 SyncTable 4 Write Data 52 -1760 1 SyncTable 4 Write Data 53 -1761 1 SyncTable 4 Write Data 54 -1762 1 SyncTable 4 Write Data 55 -1763 1 SyncTable 4 Write Data 56 -1764 1 SyncTable 4 Write Data 57 -1765 1 SyncTable 4 Write Data 58 -1766 1 SyncTable 4 Write Data 59 -1767 1 SyncTable 4 Write Data 60 -1768 1 SyncTable 4 Write Data 61 -1769 1 SyncTable 4 Write Data 62 -1770 1 SyncTable 4 Write Data 63 -1771 1 SyncTable 4 Write Data 64 -1772 1 SyncTable 4 Write Data 65 -1773 1 SyncTable 4 Write Data 66 -1774 1 SyncTable 4 Write Data 67 -1775 1 SyncTable 4 Write Data 68 -1776 1 SyncTable 4 Write Data 69 -1777 1 SyncTable 4 Write Data 70 -1778 1 SyncTable 4 Write Data 71 -1779 1 SyncTable 4 Write Data 72 -1780 1 SyncTable 5 ID 1 -1781 1 SyncTable 5 ID 2 -1782 1 SyncTable 5 ID 3 -1783 1 SyncTable 5 ID 4 -1784 1 SyncTable 5 ID 5 -1785 2 SyncTable 5 Read Address 1 -1787 2 SyncTable 5 Read Address 2 -1789 2 SyncTable 5 Read Address 3 -1791 2 SyncTable 5 Read Address 4 -1793 2 SyncTable 5 Read Address 5 -1795 2 SyncTable 5 Read Size 1 -1797 2 SyncTable 5 Read Size 2 -1799 2 SyncTable 5 Read Size 3 -1801 2 SyncTable 5 Read Size 4 -1803 2 SyncTable 5 Read Size 5 -1805 2 SyncTable 5 Write Address 1 -1807 2 SyncTable 5 Write Address 2 -1809 2 SyncTable 5 Write Address 3 -1811 2 SyncTable 5 Write Address 4 -1813 2 SyncTable 5 Write Address 5 -1815 2 SyncTable 5 Write Size 1 -1817 2 SyncTable 5 Write Size 2 -1819 2 SyncTable 5 Write Size 3 -1821 2 SyncTable 5 Write Size 4 -1823 2 SyncTable 5 Write Size 5 -1825 1 SyncTable 5 Read Data 1 -1826 1 SyncTable 5 Read Data 2 -1827 1 SyncTable 5 Read Data 3 -1828 1 SyncTable 5 Read Data 4 -1829 1 SyncTable 5 Read Data 5 -1830 1 SyncTable 5 Read Data 6 -1831 1 SyncTable 5 Read Data 7 -1832 1 SyncTable 5 Read Data 8 -1833 1 SyncTable 5 Read Data 9 -1834 1 SyncTable 5 Read Data 10 -1835 1 SyncTable 5 Read Data 11 -1836 1 SyncTable 5 Read Data 12 -1837 1 SyncTable 5 Read Data 13 -1838 1 SyncTable 5 Read Data 14 -1839 1 SyncTable 5 Read Data 15 -1840 1 SyncTable 5 Read Data 16 -1841 1 SyncTable 5 Read Data 17 -1842 1 SyncTable 5 Read Data 18 -1843 1 SyncTable 5 Read Data 19 -1844 1 SyncTable 5 Read Data 20 -1845 1 SyncTable 5 Read Data 21 -1846 1 SyncTable 5 Read Data 22 -1847 1 SyncTable 5 Read Data 23 -1848 1 SyncTable 5 Read Data 24 -1849 1 SyncTable 5 Read Data 25 -1850 1 SyncTable 5 Read Data 26 -1851 1 SyncTable 5 Read Data 27 -1852 1 SyncTable 5 Read Data 28 -1853 1 SyncTable 5 Read Data 29 -1854 1 SyncTable 5 Read Data 30 -1855 1 SyncTable 5 Read Data 31 -1856 1 SyncTable 5 Read Data 32 -1857 1 SyncTable 5 Read Data 33 -1858 1 SyncTable 5 Read Data 34 -1859 1 SyncTable 5 Read Data 35 -1860 1 SyncTable 5 Read Data 36 -1861 1 SyncTable 5 Read Data 37 -1862 1 SyncTable 5 Read Data 38 -1863 1 SyncTable 5 Read Data 39 -1864 1 SyncTable 5 Read Data 40 -1865 1 SyncTable 5 Read Data 41 -1866 1 SyncTable 5 Read Data 42 -1867 1 SyncTable 5 Read Data 43 -1868 1 SyncTable 5 Read Data 44 -1869 1 SyncTable 5 Read Data 45 -1870 1 SyncTable 5 Read Data 46 -1871 1 SyncTable 5 Read Data 47 -1872 1 SyncTable 5 Read Data 48 -1873 1 SyncTable 5 Read Data 49 -1874 1 SyncTable 5 Read Data 50 -1875 1 SyncTable 5 Read Data 51 -1876 1 SyncTable 5 Read Data 52 -1877 1 SyncTable 5 Read Data 53 -1878 1 SyncTable 5 Read Data 54 -1879 1 SyncTable 5 Read Data 55 -1880 1 SyncTable 5 Read Data 56 -1881 1 SyncTable 5 Read Data 57 -1882 1 SyncTable 5 Read Data 58 -1883 1 SyncTable 5 Read Data 59 -1884 1 SyncTable 5 Read Data 60 -1885 1 SyncTable 5 Read Data 61 -1886 1 SyncTable 5 Read Data 62 -1887 1 SyncTable 5 Read Data 63 -1888 1 SyncTable 5 Read Data 64 -1889 1 SyncTable 5 Read Data 65 -1890 1 SyncTable 5 Read Data 66 -1891 1 SyncTable 5 Read Data 67 -1892 1 SyncTable 5 Read Data 68 -1893 1 SyncTable 5 Read Data 69 -1894 1 SyncTable 5 Read Data 70 -1895 1 SyncTable 5 Read Data 71 -1896 1 SyncTable 5 Read Data 72 -1897 1 SyncTable 5 Write Data 1 -1898 1 SyncTable 5 Write Data 2 -1899 1 SyncTable 5 Write Data 3 -1900 1 SyncTable 5 Write Data 4 -1901 1 SyncTable 5 Write Data 5 -1902 1 SyncTable 5 Write Data 6 -1903 1 SyncTable 5 Write Data 7 -1904 1 SyncTable 5 Write Data 8 -1905 1 SyncTable 5 Write Data 9 -1906 1 SyncTable 5 Write Data 10 -1907 1 SyncTable 5 Write Data 11 -1908 1 SyncTable 5 Write Data 12 -1909 1 SyncTable 5 Write Data 13 -1910 1 SyncTable 5 Write Data 14 -1911 1 SyncTable 5 Write Data 15 -1912 1 SyncTable 5 Write Data 16 -1913 1 SyncTable 5 Write Data 17 -1914 1 SyncTable 5 Write Data 18 -1915 1 SyncTable 5 Write Data 19 -1916 1 SyncTable 5 Write Data 20 -1917 1 SyncTable 5 Write Data 21 -1918 1 SyncTable 5 Write Data 22 -1919 1 SyncTable 5 Write Data 23 -1920 1 SyncTable 5 Write Data 24 -1921 1 SyncTable 5 Write Data 25 -1922 1 SyncTable 5 Write Data 26 -1923 1 SyncTable 5 Write Data 27 -1924 1 SyncTable 5 Write Data 28 -1925 1 SyncTable 5 Write Data 29 -1926 1 SyncTable 5 Write Data 30 -1927 1 SyncTable 5 Write Data 31 -1928 1 SyncTable 5 Write Data 32 -1929 1 SyncTable 5 Write Data 33 -1930 1 SyncTable 5 Write Data 34 -1931 1 SyncTable 5 Write Data 35 -1932 1 SyncTable 5 Write Data 36 -1933 1 SyncTable 5 Write Data 37 -1934 1 SyncTable 5 Write Data 38 -1935 1 SyncTable 5 Write Data 39 -1936 1 SyncTable 5 Write Data 40 -1937 1 SyncTable 5 Write Data 41 -1938 1 SyncTable 5 Write Data 42 -1939 1 SyncTable 5 Write Data 43 -1940 1 SyncTable 5 Write Data 44 -1941 1 SyncTable 5 Write Data 45 -1942 1 SyncTable 5 Write Data 46 -1943 1 SyncTable 5 Write Data 47 -1944 1 SyncTable 5 Write Data 48 -1945 1 SyncTable 5 Write Data 49 -1946 1 SyncTable 5 Write Data 50 -1947 1 SyncTable 5 Write Data 51 -1948 1 SyncTable 5 Write Data 52 -1949 1 SyncTable 5 Write Data 53 -1950 1 SyncTable 5 Write Data 54 -1951 1 SyncTable 5 Write Data 55 -1952 1 SyncTable 5 Write Data 56 -1953 1 SyncTable 5 Write Data 57 -1954 1 SyncTable 5 Write Data 58 -1955 1 SyncTable 5 Write Data 59 -1956 1 SyncTable 5 Write Data 60 -1957 1 SyncTable 5 Write Data 61 -1958 1 SyncTable 5 Write Data 62 -1959 1 SyncTable 5 Write Data 63 -1960 1 SyncTable 5 Write Data 64 -1961 1 SyncTable 5 Write Data 65 -1962 1 SyncTable 5 Write Data 66 -1963 1 SyncTable 5 Write Data 67 -1964 1 SyncTable 5 Write Data 68 -1965 1 SyncTable 5 Write Data 69 -1966 1 SyncTable 5 Write Data 70 -1967 1 SyncTable 5 Write Data 71 -1968 1 SyncTable 5 Write Data 72 diff --git a/param/dxl_model/hand_finger_joint_16.model b/param/dxl_model/hand_finger_joint_16.model deleted file mode 100644 index 0e43acb..0000000 --- a/param/dxl_model/hand_finger_joint_16.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1636 2 Present Current -1638 2 Present Velocity -1640 2 Present Position -1708 2 Goal Current -1710 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_17.model b/param/dxl_model/hand_finger_joint_17.model deleted file mode 100644 index 459fc46..0000000 --- a/param/dxl_model/hand_finger_joint_17.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1642 2 Present Current -1644 2 Present Velocity -1646 2 Present Position -1712 2 Goal Current -1714 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_18.model b/param/dxl_model/hand_finger_joint_18.model deleted file mode 100644 index 3f8a811..0000000 --- a/param/dxl_model/hand_finger_joint_18.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1648 2 Present Current -1650 2 Present Velocity -1652 2 Present Position -1716 2 Goal Current -1718 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_19.model b/param/dxl_model/hand_finger_joint_19.model deleted file mode 100644 index 527a369..0000000 --- a/param/dxl_model/hand_finger_joint_19.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1654 2 Present Current -1656 2 Present Velocity -1658 2 Present Position -1720 2 Goal Current -1722 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_2.model b/param/dxl_model/hand_finger_joint_2.model deleted file mode 100644 index 79c55d9..0000000 --- a/param/dxl_model/hand_finger_joint_2.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1453 2 Present Current -1455 2 Present Velocity -1457 2 Present Position -1523 2 Goal Current -1525 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_21.model b/param/dxl_model/hand_finger_joint_21.model deleted file mode 100644 index a0ac3cf..0000000 --- a/param/dxl_model/hand_finger_joint_21.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1069 2 Present Current -1071 2 Present Velocity -1073 2 Present Position -1141 2 Goal Current -1143 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_22.model b/param/dxl_model/hand_finger_joint_22.model deleted file mode 100644 index a920089..0000000 --- a/param/dxl_model/hand_finger_joint_22.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1075 2 Present Current -1077 2 Present Velocity -1079 2 Present Position -1145 2 Goal Current -1147 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_23.model b/param/dxl_model/hand_finger_joint_23.model deleted file mode 100644 index 7562c8c..0000000 --- a/param/dxl_model/hand_finger_joint_23.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1081 2 Present Current -1083 2 Present Velocity -1085 2 Present Position -1149 2 Goal Current -1151 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_24.model b/param/dxl_model/hand_finger_joint_24.model deleted file mode 100644 index 7e0732c..0000000 --- a/param/dxl_model/hand_finger_joint_24.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1087 2 Present Current -1089 2 Present Velocity -1091 2 Present Position -1153 2 Goal Current -1155 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_3.model b/param/dxl_model/hand_finger_joint_3.model deleted file mode 100644 index 7d8a0d2..0000000 --- a/param/dxl_model/hand_finger_joint_3.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1459 2 Present Current -1461 2 Present Velocity -1463 2 Present Position -1527 2 Goal Current -1529 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_4.model b/param/dxl_model/hand_finger_joint_4.model deleted file mode 100644 index eabfe56..0000000 --- a/param/dxl_model/hand_finger_joint_4.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1465 2 Present Current -1467 2 Present Velocity -1469 2 Present Position -1531 2 Goal Current -1533 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_6.model b/param/dxl_model/hand_finger_joint_6.model deleted file mode 100644 index fd50e1e..0000000 --- a/param/dxl_model/hand_finger_joint_6.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1825 2 Present Current -1827 2 Present Velocity -1829 2 Present Position -1897 2 Goal Current -1899 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_7.model b/param/dxl_model/hand_finger_joint_7.model deleted file mode 100644 index 83136e2..0000000 --- a/param/dxl_model/hand_finger_joint_7.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1831 2 Present Current -1833 2 Present Velocity -1835 2 Present Position -1901 2 Goal Current -1903 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_8.model b/param/dxl_model/hand_finger_joint_8.model deleted file mode 100644 index 93ec434..0000000 --- a/param/dxl_model/hand_finger_joint_8.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1837 2 Present Current -1839 2 Present Velocity -1841 2 Present Position -1905 2 Goal Current -1907 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_9.model b/param/dxl_model/hand_finger_joint_9.model deleted file mode 100644 index f710ddf..0000000 --- a/param/dxl_model/hand_finger_joint_9.model +++ /dev/null @@ -1,15 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Current 1.0 raw signed 0.0 -Present Velocity 0.0239691227 rad/s signed 0.0 -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Current 1.0 raw signed 0.0 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 - -[control table] -Address Size Data Name -1843 2 Present Current -1845 2 Present Velocity -1847 2 Present Position -1909 2 Goal Current -1911 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_5.model b/param/dxl_model/hand_pressure_sensor_5.model deleted file mode 100644 index f2e21c4..0000000 --- a/param/dxl_model/hand_pressure_sensor_5.model +++ /dev/null @@ -1,23 +0,0 @@ -[unit info] -Data Name value unit Sign Type Offset -Present Pressure 1 1.0 raw unsigned 0.0 -Present Pressure 2 1.0 raw unsigned 0.0 -Present Pressure 3 1.0 raw unsigned 0.0 -Present Pressure 4 1.0 raw unsigned 0.0 -Present Pressure 5 1.0 raw unsigned 0.0 -Present Pressure 6 1.0 raw unsigned 0.0 -Present Pressure 7 1.0 raw unsigned 0.0 -Present Pressure 8 1.0 raw unsigned 0.0 -Present Pressure 9 1.0 raw unsigned 0.0 - -[control table] -Address Size Data Name -1471 1 Present Pressure 1 -1472 1 Present Pressure 2 -1473 1 Present Pressure 3 -1474 1 Present Pressure 4 -1475 1 Present Pressure 5 -1476 1 Present Pressure 6 -1477 1 Present Pressure 7 -1478 1 Present Pressure 8 -1479 1 Present Pressure 9 diff --git a/param/dxl_model/hand_finger_joint_13.model b/param/dxl_model/hx5_d20_r_synctable_1_device_1.model similarity index 74% rename from param/dxl_model/hand_finger_joint_13.model rename to param/dxl_model/hx5_d20_r_synctable_1_device_1.model index 83ab76c..0f91334 100644 --- a/param/dxl_model/hand_finger_joint_13.model +++ b/param/dxl_model/hx5_d20_r_synctable_1_device_1.model @@ -8,8 +8,8 @@ Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name -1270 2 Present Current -1272 2 Present Velocity -1274 2 Present Position -1338 2 Goal Current -1340 2 Goal Position +1078 2 Present Current +1080 2 Present Velocity +1082 2 Present Position +1150 2 Goal Current +1152 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_1.model b/param/dxl_model/hx5_d20_r_synctable_1_device_2.model similarity index 74% rename from param/dxl_model/hand_finger_joint_1.model rename to param/dxl_model/hx5_d20_r_synctable_1_device_2.model index 863eee9..da52e99 100644 --- a/param/dxl_model/hand_finger_joint_1.model +++ b/param/dxl_model/hx5_d20_r_synctable_1_device_2.model @@ -8,8 +8,8 @@ Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name -1447 2 Present Current -1449 2 Present Velocity -1451 2 Present Position -1519 2 Goal Current -1521 2 Goal Position +1084 2 Present Current +1086 2 Present Velocity +1088 2 Present Position +1154 2 Goal Current +1156 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_11.model b/param/dxl_model/hx5_d20_r_synctable_1_device_3.model similarity index 74% rename from param/dxl_model/hand_finger_joint_11.model rename to param/dxl_model/hx5_d20_r_synctable_1_device_3.model index b87b6cf..289e47d 100644 --- a/param/dxl_model/hand_finger_joint_11.model +++ b/param/dxl_model/hx5_d20_r_synctable_1_device_3.model @@ -8,8 +8,8 @@ Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name -1258 2 Present Current -1260 2 Present Velocity -1262 2 Present Position -1330 2 Goal Current -1332 2 Goal Position +1090 2 Present Current +1092 2 Present Velocity +1094 2 Present Position +1158 2 Goal Current +1160 2 Goal Position diff --git a/param/dxl_model/hand_finger_joint_12.model b/param/dxl_model/hx5_d20_r_synctable_1_device_4.model similarity index 74% rename from param/dxl_model/hand_finger_joint_12.model rename to param/dxl_model/hx5_d20_r_synctable_1_device_4.model index f0ddc5c..7c23c26 100644 --- a/param/dxl_model/hand_finger_joint_12.model +++ b/param/dxl_model/hx5_d20_r_synctable_1_device_4.model @@ -8,8 +8,8 @@ Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name -1264 2 Present Current -1266 2 Present Velocity -1268 2 Present Position -1334 2 Goal Current -1336 2 Goal Position +1096 2 Present Current +1098 2 Present Velocity +1100 2 Present Position +1162 2 Goal Current +1164 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_10.model b/param/dxl_model/hx5_d20_r_synctable_1_device_5.model similarity index 65% rename from param/dxl_model/hand_pressure_sensor_10.model rename to param/dxl_model/hx5_d20_r_synctable_1_device_5.model index edf833b..cee82ba 100644 --- a/param/dxl_model/hand_pressure_sensor_10.model +++ b/param/dxl_model/hx5_d20_r_synctable_1_device_5.model @@ -12,12 +12,12 @@ Present Pressure 9 1.0 raw unsigned 0.0 [control table] Address Size Data Name -1849 1 Present Pressure 1 -1850 1 Present Pressure 2 -1851 1 Present Pressure 3 -1852 1 Present Pressure 4 -1853 1 Present Pressure 5 -1854 1 Present Pressure 6 -1855 1 Present Pressure 7 -1856 1 Present Pressure 8 -1857 1 Present Pressure 9 +1102 1 Present Pressure 1 +1103 1 Present Pressure 2 +1104 1 Present Pressure 3 +1105 1 Present Pressure 4 +1106 1 Present Pressure 5 +1107 1 Present Pressure 6 +1108 1 Present Pressure 7 +1109 1 Present Pressure 8 +1110 1 Present Pressure 9 diff --git a/param/dxl_model/hand_finger_joint_14.model b/param/dxl_model/hx5_d20_r_synctable_2_device_1.model similarity index 90% rename from param/dxl_model/hand_finger_joint_14.model rename to param/dxl_model/hx5_d20_r_synctable_2_device_1.model index 7910a58..65ea36c 100644 --- a/param/dxl_model/hand_finger_joint_14.model +++ b/param/dxl_model/hx5_d20_r_synctable_2_device_1.model @@ -11,5 +11,5 @@ Address Size Data Name 1276 2 Present Current 1278 2 Present Velocity 1280 2 Present Position -1342 2 Goal Current -1344 2 Goal Position +1348 2 Goal Current +1350 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_2_device_2.model b/param/dxl_model/hx5_d20_r_synctable_2_device_2.model new file mode 100644 index 0000000..4f73bd7 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_2_device_2.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1282 2 Present Current +1284 2 Present Velocity +1286 2 Present Position +1352 2 Goal Current +1354 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_2_device_3.model b/param/dxl_model/hx5_d20_r_synctable_2_device_3.model new file mode 100644 index 0000000..77339d0 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_2_device_3.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1288 2 Present Current +1290 2 Present Velocity +1292 2 Present Position +1356 2 Goal Current +1358 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_2_device_4.model b/param/dxl_model/hx5_d20_r_synctable_2_device_4.model new file mode 100644 index 0000000..137a13e --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_2_device_4.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1294 2 Present Current +1296 2 Present Velocity +1298 2 Present Position +1360 2 Goal Current +1362 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_15.model b/param/dxl_model/hx5_d20_r_synctable_2_device_5.model similarity index 65% rename from param/dxl_model/hand_pressure_sensor_15.model rename to param/dxl_model/hx5_d20_r_synctable_2_device_5.model index ace29f5..84f9534 100644 --- a/param/dxl_model/hand_pressure_sensor_15.model +++ b/param/dxl_model/hx5_d20_r_synctable_2_device_5.model @@ -12,12 +12,12 @@ Present Pressure 9 1.0 raw unsigned 0.0 [control table] Address Size Data Name -1282 1 Present Pressure 1 -1283 1 Present Pressure 2 -1284 1 Present Pressure 3 -1285 1 Present Pressure 4 -1286 1 Present Pressure 5 -1287 1 Present Pressure 6 -1288 1 Present Pressure 7 -1289 1 Present Pressure 8 -1290 1 Present Pressure 9 +1300 1 Present Pressure 1 +1301 1 Present Pressure 2 +1302 1 Present Pressure 3 +1303 1 Present Pressure 4 +1304 1 Present Pressure 5 +1305 1 Present Pressure 6 +1306 1 Present Pressure 7 +1307 1 Present Pressure 8 +1308 1 Present Pressure 9 diff --git a/param/dxl_model/hx5_d20_r_synctable_3_device_1.model b/param/dxl_model/hx5_d20_r_synctable_3_device_1.model new file mode 100644 index 0000000..fc9e6e2 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_3_device_1.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1474 2 Present Current +1476 2 Present Velocity +1478 2 Present Position +1546 2 Goal Current +1548 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_3_device_2.model b/param/dxl_model/hx5_d20_r_synctable_3_device_2.model new file mode 100644 index 0000000..b6885ab --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_3_device_2.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1480 2 Present Current +1482 2 Present Velocity +1484 2 Present Position +1550 2 Goal Current +1552 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_3_device_3.model b/param/dxl_model/hx5_d20_r_synctable_3_device_3.model new file mode 100644 index 0000000..52abe6d --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_3_device_3.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1486 2 Present Current +1488 2 Present Velocity +1490 2 Present Position +1554 2 Goal Current +1556 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_3_device_4.model b/param/dxl_model/hx5_d20_r_synctable_3_device_4.model new file mode 100644 index 0000000..ddbce50 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_3_device_4.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1492 2 Present Current +1494 2 Present Velocity +1496 2 Present Position +1558 2 Goal Current +1560 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_20.model b/param/dxl_model/hx5_d20_r_synctable_3_device_5.model similarity index 65% rename from param/dxl_model/hand_pressure_sensor_20.model rename to param/dxl_model/hx5_d20_r_synctable_3_device_5.model index 52cb655..3b9afc5 100644 --- a/param/dxl_model/hand_pressure_sensor_20.model +++ b/param/dxl_model/hx5_d20_r_synctable_3_device_5.model @@ -12,12 +12,12 @@ Present Pressure 9 1.0 raw unsigned 0.0 [control table] Address Size Data Name -1660 1 Present Pressure 1 -1661 1 Present Pressure 2 -1662 1 Present Pressure 3 -1663 1 Present Pressure 4 -1664 1 Present Pressure 5 -1665 1 Present Pressure 6 -1666 1 Present Pressure 7 -1667 1 Present Pressure 8 -1668 1 Present Pressure 9 +1498 1 Present Pressure 1 +1499 1 Present Pressure 2 +1500 1 Present Pressure 3 +1501 1 Present Pressure 4 +1502 1 Present Pressure 5 +1503 1 Present Pressure 6 +1504 1 Present Pressure 7 +1505 1 Present Pressure 8 +1506 1 Present Pressure 9 diff --git a/param/dxl_model/hx5_d20_r_synctable_4_device_1.model b/param/dxl_model/hx5_d20_r_synctable_4_device_1.model new file mode 100644 index 0000000..5c2cd1a --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_4_device_1.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1672 2 Present Current +1674 2 Present Velocity +1676 2 Present Position +1744 2 Goal Current +1746 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_4_device_2.model b/param/dxl_model/hx5_d20_r_synctable_4_device_2.model new file mode 100644 index 0000000..ca0fedf --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_4_device_2.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1678 2 Present Current +1680 2 Present Velocity +1682 2 Present Position +1748 2 Goal Current +1750 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_4_device_3.model b/param/dxl_model/hx5_d20_r_synctable_4_device_3.model new file mode 100644 index 0000000..558d93d --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_4_device_3.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1684 2 Present Current +1686 2 Present Velocity +1688 2 Present Position +1752 2 Goal Current +1754 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_4_device_4.model b/param/dxl_model/hx5_d20_r_synctable_4_device_4.model new file mode 100644 index 0000000..42e8c11 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_4_device_4.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1690 2 Present Current +1692 2 Present Velocity +1694 2 Present Position +1756 2 Goal Current +1758 2 Goal Position diff --git a/param/dxl_model/hand_pressure_sensor_25.model b/param/dxl_model/hx5_d20_r_synctable_4_device_5.model similarity index 65% rename from param/dxl_model/hand_pressure_sensor_25.model rename to param/dxl_model/hx5_d20_r_synctable_4_device_5.model index 02232c0..3f1096e 100644 --- a/param/dxl_model/hand_pressure_sensor_25.model +++ b/param/dxl_model/hx5_d20_r_synctable_4_device_5.model @@ -12,12 +12,12 @@ Present Pressure 9 1.0 raw unsigned 0.0 [control table] Address Size Data Name -1093 1 Present Pressure 1 -1094 1 Present Pressure 2 -1095 1 Present Pressure 3 -1096 1 Present Pressure 4 -1097 1 Present Pressure 5 -1098 1 Present Pressure 6 -1099 1 Present Pressure 7 -1100 1 Present Pressure 8 -1101 1 Present Pressure 9 +1696 1 Present Pressure 1 +1697 1 Present Pressure 2 +1698 1 Present Pressure 3 +1699 1 Present Pressure 4 +1700 1 Present Pressure 5 +1701 1 Present Pressure 6 +1702 1 Present Pressure 7 +1703 1 Present Pressure 8 +1704 1 Present Pressure 9 diff --git a/param/dxl_model/hx5_d20_r_synctable_5_device_1.model b/param/dxl_model/hx5_d20_r_synctable_5_device_1.model new file mode 100644 index 0000000..7ac9ec8 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_5_device_1.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1870 2 Present Current +1872 2 Present Velocity +1874 2 Present Position +1942 2 Goal Current +1944 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_5_device_2.model b/param/dxl_model/hx5_d20_r_synctable_5_device_2.model new file mode 100644 index 0000000..11b56cd --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_5_device_2.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1876 2 Present Current +1878 2 Present Velocity +1880 2 Present Position +1946 2 Goal Current +1948 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_5_device_3.model b/param/dxl_model/hx5_d20_r_synctable_5_device_3.model new file mode 100644 index 0000000..be112b1 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_5_device_3.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1882 2 Present Current +1884 2 Present Velocity +1886 2 Present Position +1950 2 Goal Current +1952 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_5_device_4.model b/param/dxl_model/hx5_d20_r_synctable_5_device_4.model new file mode 100644 index 0000000..b7838ee --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_5_device_4.model @@ -0,0 +1,15 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Current 1.0 raw signed 0.0 +Present Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Current 1.0 raw signed 0.0 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 + +[control table] +Address Size Data Name +1888 2 Present Current +1890 2 Present Velocity +1892 2 Present Position +1954 2 Goal Current +1956 2 Goal Position diff --git a/param/dxl_model/hx5_d20_r_synctable_5_device_5.model b/param/dxl_model/hx5_d20_r_synctable_5_device_5.model new file mode 100644 index 0000000..47c9da7 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_5_device_5.model @@ -0,0 +1,23 @@ +[unit info] +Data Name value unit Sign Type Offset +Present Pressure 1 1.0 raw unsigned 0.0 +Present Pressure 2 1.0 raw unsigned 0.0 +Present Pressure 3 1.0 raw unsigned 0.0 +Present Pressure 4 1.0 raw unsigned 0.0 +Present Pressure 5 1.0 raw unsigned 0.0 +Present Pressure 6 1.0 raw unsigned 0.0 +Present Pressure 7 1.0 raw unsigned 0.0 +Present Pressure 8 1.0 raw unsigned 0.0 +Present Pressure 9 1.0 raw unsigned 0.0 + +[control table] +Address Size Data Name +1894 1 Present Pressure 1 +1895 1 Present Pressure 2 +1896 1 Present Pressure 3 +1897 1 Present Pressure 4 +1898 1 Present Pressure 5 +1899 1 Present Pressure 6 +1900 1 Present Pressure 7 +1901 1 Present Pressure 8 +1902 1 Present Pressure 9 diff --git a/param/dxl_model/hx5_d20_rl.model b/param/dxl_model/hx5_d20_rl.model new file mode 100644 index 0000000..fdfd681 --- /dev/null +++ b/param/dxl_model/hx5_d20_rl.model @@ -0,0 +1,894 @@ +[control table] +Address Size Data Name +0 2 Model Number +2 4 Model Information +6 1 Firmware Version +7 1 ID +8 1 Bus Watchdog +11 1 Protocol Type +12 1 Baud Rate (Bus) +13 1 Return Delay Time +15 1 Status Return Level +16 1 Registered Instruction +20 1 Baud Rate (DXL) +65 1 LED +70 1 Table Sync Enable +100 2 Realtime Tick +102 2 Present Input Voltage +106 1 Status +122 2 Indirect Address 1 +122 2 Indirect Address Read +452 2 Indirect Address Write +634 1 Indirect Data 1 +634 1 Indirect Data Read +799 1 Indirect Data Write +1024 1 SyncTable 1 ID 1 +1025 1 SyncTable 1 ID 2 +1026 1 SyncTable 1 ID 3 +1027 1 SyncTable 1 ID 4 +1028 1 SyncTable 1 ID 5 +1029 1 SyncTable 1 ID 6 +1030 2 SyncTable 1 Read Address 1 +1032 2 SyncTable 1 Read Address 2 +1034 2 SyncTable 1 Read Address 3 +1036 2 SyncTable 1 Read Address 4 +1038 2 SyncTable 1 Read Address 5 +1040 2 SyncTable 1 Read Address 6 +1042 2 SyncTable 1 Read Size 1 +1044 2 SyncTable 1 Read Size 2 +1046 2 SyncTable 1 Read Size 3 +1048 2 SyncTable 1 Read Size 4 +1050 2 SyncTable 1 Read Size 5 +1052 2 SyncTable 1 Read Size 6 +1054 2 SyncTable 1 Write Address 1 +1056 2 SyncTable 1 Write Address 2 +1058 2 SyncTable 1 Write Address 3 +1060 2 SyncTable 1 Write Address 4 +1062 2 SyncTable 1 Write Address 5 +1064 2 SyncTable 1 Write Address 6 +1066 2 SyncTable 1 Write Size 1 +1068 2 SyncTable 1 Write Size 2 +1070 2 SyncTable 1 Write Size 3 +1072 2 SyncTable 1 Write Size 4 +1074 2 SyncTable 1 Write Size 5 +1076 2 SyncTable 1 Write Size 6 +1078 1 SyncTable 1 Read Data 1 +1079 1 SyncTable 1 Read Data 2 +1080 1 SyncTable 1 Read Data 3 +1081 1 SyncTable 1 Read Data 4 +1082 1 SyncTable 1 Read Data 5 +1083 1 SyncTable 1 Read Data 6 +1084 1 SyncTable 1 Read Data 7 +1085 1 SyncTable 1 Read Data 8 +1086 1 SyncTable 1 Read Data 9 +1087 1 SyncTable 1 Read Data 10 +1088 1 SyncTable 1 Read Data 11 +1089 1 SyncTable 1 Read Data 12 +1090 1 SyncTable 1 Read Data 13 +1091 1 SyncTable 1 Read Data 14 +1092 1 SyncTable 1 Read Data 15 +1093 1 SyncTable 1 Read Data 16 +1094 1 SyncTable 1 Read Data 17 +1095 1 SyncTable 1 Read Data 18 +1096 1 SyncTable 1 Read Data 19 +1097 1 SyncTable 1 Read Data 20 +1098 1 SyncTable 1 Read Data 21 +1099 1 SyncTable 1 Read Data 22 +1100 1 SyncTable 1 Read Data 23 +1101 1 SyncTable 1 Read Data 24 +1102 1 SyncTable 1 Read Data 25 +1103 1 SyncTable 1 Read Data 26 +1104 1 SyncTable 1 Read Data 27 +1105 1 SyncTable 1 Read Data 28 +1106 1 SyncTable 1 Read Data 29 +1107 1 SyncTable 1 Read Data 30 +1108 1 SyncTable 1 Read Data 31 +1109 1 SyncTable 1 Read Data 32 +1110 1 SyncTable 1 Read Data 33 +1111 1 SyncTable 1 Read Data 34 +1112 1 SyncTable 1 Read Data 35 +1113 1 SyncTable 1 Read Data 36 +1114 1 SyncTable 1 Read Data 37 +1115 1 SyncTable 1 Read Data 38 +1116 1 SyncTable 1 Read Data 39 +1117 1 SyncTable 1 Read Data 40 +1118 1 SyncTable 1 Read Data 41 +1119 1 SyncTable 1 Read Data 42 +1120 1 SyncTable 1 Read Data 43 +1121 1 SyncTable 1 Read Data 44 +1122 1 SyncTable 1 Read Data 45 +1123 1 SyncTable 1 Read Data 46 +1124 1 SyncTable 1 Read Data 47 +1125 1 SyncTable 1 Read Data 48 +1126 1 SyncTable 1 Read Data 49 +1127 1 SyncTable 1 Read Data 50 +1128 1 SyncTable 1 Read Data 51 +1129 1 SyncTable 1 Read Data 52 +1130 1 SyncTable 1 Read Data 53 +1131 1 SyncTable 1 Read Data 54 +1132 1 SyncTable 1 Read Data 55 +1133 1 SyncTable 1 Read Data 56 +1134 1 SyncTable 1 Read Data 57 +1135 1 SyncTable 1 Read Data 58 +1136 1 SyncTable 1 Read Data 59 +1137 1 SyncTable 1 Read Data 60 +1138 1 SyncTable 1 Read Data 61 +1139 1 SyncTable 1 Read Data 62 +1140 1 SyncTable 1 Read Data 63 +1141 1 SyncTable 1 Read Data 64 +1142 1 SyncTable 1 Read Data 65 +1143 1 SyncTable 1 Read Data 66 +1144 1 SyncTable 1 Read Data 67 +1145 1 SyncTable 1 Read Data 68 +1146 1 SyncTable 1 Read Data 69 +1147 1 SyncTable 1 Read Data 70 +1148 1 SyncTable 1 Read Data 71 +1149 1 SyncTable 1 Read Data 72 +1150 1 SyncTable 1 Write Data 1 +1151 1 SyncTable 1 Write Data 2 +1152 1 SyncTable 1 Write Data 3 +1153 1 SyncTable 1 Write Data 4 +1154 1 SyncTable 1 Write Data 5 +1155 1 SyncTable 1 Write Data 6 +1156 1 SyncTable 1 Write Data 7 +1157 1 SyncTable 1 Write Data 8 +1158 1 SyncTable 1 Write Data 9 +1159 1 SyncTable 1 Write Data 10 +1160 1 SyncTable 1 Write Data 11 +1161 1 SyncTable 1 Write Data 12 +1162 1 SyncTable 1 Write Data 13 +1163 1 SyncTable 1 Write Data 14 +1164 1 SyncTable 1 Write Data 15 +1165 1 SyncTable 1 Write Data 16 +1166 1 SyncTable 1 Write Data 17 +1167 1 SyncTable 1 Write Data 18 +1168 1 SyncTable 1 Write Data 19 +1169 1 SyncTable 1 Write Data 20 +1170 1 SyncTable 1 Write Data 21 +1171 1 SyncTable 1 Write Data 22 +1172 1 SyncTable 1 Write Data 23 +1173 1 SyncTable 1 Write Data 24 +1174 1 SyncTable 1 Write Data 25 +1175 1 SyncTable 1 Write Data 26 +1176 1 SyncTable 1 Write Data 27 +1177 1 SyncTable 1 Write Data 28 +1178 1 SyncTable 1 Write Data 29 +1179 1 SyncTable 1 Write Data 30 +1180 1 SyncTable 1 Write Data 31 +1181 1 SyncTable 1 Write Data 32 +1182 1 SyncTable 1 Write Data 33 +1183 1 SyncTable 1 Write Data 34 +1184 1 SyncTable 1 Write Data 35 +1185 1 SyncTable 1 Write Data 36 +1186 1 SyncTable 1 Write Data 37 +1187 1 SyncTable 1 Write Data 38 +1188 1 SyncTable 1 Write Data 39 +1189 1 SyncTable 1 Write Data 40 +1190 1 SyncTable 1 Write Data 41 +1191 1 SyncTable 1 Write Data 42 +1192 1 SyncTable 1 Write Data 43 +1193 1 SyncTable 1 Write Data 44 +1194 1 SyncTable 1 Write Data 45 +1195 1 SyncTable 1 Write Data 46 +1196 1 SyncTable 1 Write Data 47 +1197 1 SyncTable 1 Write Data 48 +1198 1 SyncTable 1 Write Data 49 +1199 1 SyncTable 1 Write Data 50 +1200 1 SyncTable 1 Write Data 51 +1201 1 SyncTable 1 Write Data 52 +1202 1 SyncTable 1 Write Data 53 +1203 1 SyncTable 1 Write Data 54 +1204 1 SyncTable 1 Write Data 55 +1205 1 SyncTable 1 Write Data 56 +1206 1 SyncTable 1 Write Data 57 +1207 1 SyncTable 1 Write Data 58 +1208 1 SyncTable 1 Write Data 59 +1209 1 SyncTable 1 Write Data 60 +1210 1 SyncTable 1 Write Data 61 +1211 1 SyncTable 1 Write Data 62 +1212 1 SyncTable 1 Write Data 63 +1213 1 SyncTable 1 Write Data 64 +1214 1 SyncTable 1 Write Data 65 +1215 1 SyncTable 1 Write Data 66 +1216 1 SyncTable 1 Write Data 67 +1217 1 SyncTable 1 Write Data 68 +1218 1 SyncTable 1 Write Data 69 +1219 1 SyncTable 1 Write Data 70 +1220 1 SyncTable 1 Write Data 71 +1221 1 SyncTable 1 Write Data 72 +1222 1 SyncTable 2 ID 1 +1223 1 SyncTable 2 ID 2 +1224 1 SyncTable 2 ID 3 +1225 1 SyncTable 2 ID 4 +1226 1 SyncTable 2 ID 5 +1227 1 SyncTable 2 ID 6 +1228 2 SyncTable 2 Read Address 1 +1230 2 SyncTable 2 Read Address 2 +1232 2 SyncTable 2 Read Address 3 +1234 2 SyncTable 2 Read Address 4 +1236 2 SyncTable 2 Read Address 5 +1238 2 SyncTable 2 Read Address 6 +1240 2 SyncTable 2 Read Size 1 +1242 2 SyncTable 2 Read Size 2 +1244 2 SyncTable 2 Read Size 3 +1246 2 SyncTable 2 Read Size 4 +1248 2 SyncTable 2 Read Size 5 +1250 2 SyncTable 2 Read Size 6 +1252 2 SyncTable 2 Write Address 1 +1254 2 SyncTable 2 Write Address 2 +1256 2 SyncTable 2 Write Address 3 +1258 2 SyncTable 2 Write Address 4 +1260 2 SyncTable 2 Write Address 5 +1262 2 SyncTable 2 Write Address 6 +1264 2 SyncTable 2 Write Size 1 +1266 2 SyncTable 2 Write Size 2 +1268 2 SyncTable 2 Write Size 3 +1270 2 SyncTable 2 Write Size 4 +1272 2 SyncTable 2 Write Size 5 +1274 2 SyncTable 2 Write Size 6 +1276 1 SyncTable 2 Read Data 1 +1277 1 SyncTable 2 Read Data 2 +1278 1 SyncTable 2 Read Data 3 +1279 1 SyncTable 2 Read Data 4 +1280 1 SyncTable 2 Read Data 5 +1281 1 SyncTable 2 Read Data 6 +1282 1 SyncTable 2 Read Data 7 +1283 1 SyncTable 2 Read Data 8 +1284 1 SyncTable 2 Read Data 9 +1285 1 SyncTable 2 Read Data 10 +1286 1 SyncTable 2 Read Data 11 +1287 1 SyncTable 2 Read Data 12 +1288 1 SyncTable 2 Read Data 13 +1289 1 SyncTable 2 Read Data 14 +1290 1 SyncTable 2 Read Data 15 +1291 1 SyncTable 2 Read Data 16 +1292 1 SyncTable 2 Read Data 17 +1293 1 SyncTable 2 Read Data 18 +1294 1 SyncTable 2 Read Data 19 +1295 1 SyncTable 2 Read Data 20 +1296 1 SyncTable 2 Read Data 21 +1297 1 SyncTable 2 Read Data 22 +1298 1 SyncTable 2 Read Data 23 +1299 1 SyncTable 2 Read Data 24 +1300 1 SyncTable 2 Read Data 25 +1301 1 SyncTable 2 Read Data 26 +1302 1 SyncTable 2 Read Data 27 +1303 1 SyncTable 2 Read Data 28 +1304 1 SyncTable 2 Read Data 29 +1305 1 SyncTable 2 Read Data 30 +1306 1 SyncTable 2 Read Data 31 +1307 1 SyncTable 2 Read Data 32 +1308 1 SyncTable 2 Read Data 33 +1309 1 SyncTable 2 Read Data 34 +1310 1 SyncTable 2 Read Data 35 +1311 1 SyncTable 2 Read Data 36 +1312 1 SyncTable 2 Read Data 37 +1313 1 SyncTable 2 Read Data 38 +1314 1 SyncTable 2 Read Data 39 +1315 1 SyncTable 2 Read Data 40 +1316 1 SyncTable 2 Read Data 41 +1317 1 SyncTable 2 Read Data 42 +1318 1 SyncTable 2 Read Data 43 +1319 1 SyncTable 2 Read Data 44 +1320 1 SyncTable 2 Read Data 45 +1321 1 SyncTable 2 Read Data 46 +1322 1 SyncTable 2 Read Data 47 +1323 1 SyncTable 2 Read Data 48 +1324 1 SyncTable 2 Read Data 49 +1325 1 SyncTable 2 Read Data 50 +1326 1 SyncTable 2 Read Data 51 +1327 1 SyncTable 2 Read Data 52 +1328 1 SyncTable 2 Read Data 53 +1329 1 SyncTable 2 Read Data 54 +1330 1 SyncTable 2 Read Data 55 +1331 1 SyncTable 2 Read Data 56 +1332 1 SyncTable 2 Read Data 57 +1333 1 SyncTable 2 Read Data 58 +1334 1 SyncTable 2 Read Data 59 +1335 1 SyncTable 2 Read Data 60 +1336 1 SyncTable 2 Read Data 61 +1337 1 SyncTable 2 Read Data 62 +1338 1 SyncTable 2 Read Data 63 +1339 1 SyncTable 2 Read Data 64 +1340 1 SyncTable 2 Read Data 65 +1341 1 SyncTable 2 Read Data 66 +1342 1 SyncTable 2 Read Data 67 +1343 1 SyncTable 2 Read Data 68 +1344 1 SyncTable 2 Read Data 69 +1345 1 SyncTable 2 Read Data 70 +1346 1 SyncTable 2 Read Data 71 +1347 1 SyncTable 2 Read Data 72 +1348 1 SyncTable 2 Write Data 1 +1349 1 SyncTable 2 Write Data 2 +1350 1 SyncTable 2 Write Data 3 +1351 1 SyncTable 2 Write Data 4 +1352 1 SyncTable 2 Write Data 5 +1353 1 SyncTable 2 Write Data 6 +1354 1 SyncTable 2 Write Data 7 +1355 1 SyncTable 2 Write Data 8 +1356 1 SyncTable 2 Write Data 9 +1357 1 SyncTable 2 Write Data 10 +1358 1 SyncTable 2 Write Data 11 +1359 1 SyncTable 2 Write Data 12 +1360 1 SyncTable 2 Write Data 13 +1361 1 SyncTable 2 Write Data 14 +1362 1 SyncTable 2 Write Data 15 +1363 1 SyncTable 2 Write Data 16 +1364 1 SyncTable 2 Write Data 17 +1365 1 SyncTable 2 Write Data 18 +1366 1 SyncTable 2 Write Data 19 +1367 1 SyncTable 2 Write Data 20 +1368 1 SyncTable 2 Write Data 21 +1369 1 SyncTable 2 Write Data 22 +1370 1 SyncTable 2 Write Data 23 +1371 1 SyncTable 2 Write Data 24 +1372 1 SyncTable 2 Write Data 25 +1373 1 SyncTable 2 Write Data 26 +1374 1 SyncTable 2 Write Data 27 +1375 1 SyncTable 2 Write Data 28 +1376 1 SyncTable 2 Write Data 29 +1377 1 SyncTable 2 Write Data 30 +1378 1 SyncTable 2 Write Data 31 +1379 1 SyncTable 2 Write Data 32 +1380 1 SyncTable 2 Write Data 33 +1381 1 SyncTable 2 Write Data 34 +1382 1 SyncTable 2 Write Data 35 +1383 1 SyncTable 2 Write Data 36 +1384 1 SyncTable 2 Write Data 37 +1385 1 SyncTable 2 Write Data 38 +1386 1 SyncTable 2 Write Data 39 +1387 1 SyncTable 2 Write Data 40 +1388 1 SyncTable 2 Write Data 41 +1389 1 SyncTable 2 Write Data 42 +1390 1 SyncTable 2 Write Data 43 +1391 1 SyncTable 2 Write Data 44 +1392 1 SyncTable 2 Write Data 45 +1393 1 SyncTable 2 Write Data 46 +1394 1 SyncTable 2 Write Data 47 +1395 1 SyncTable 2 Write Data 48 +1396 1 SyncTable 2 Write Data 49 +1397 1 SyncTable 2 Write Data 50 +1398 1 SyncTable 2 Write Data 51 +1399 1 SyncTable 2 Write Data 52 +1400 1 SyncTable 2 Write Data 53 +1401 1 SyncTable 2 Write Data 54 +1402 1 SyncTable 2 Write Data 55 +1403 1 SyncTable 2 Write Data 56 +1404 1 SyncTable 2 Write Data 57 +1405 1 SyncTable 2 Write Data 58 +1406 1 SyncTable 2 Write Data 59 +1407 1 SyncTable 2 Write Data 60 +1408 1 SyncTable 2 Write Data 61 +1409 1 SyncTable 2 Write Data 62 +1410 1 SyncTable 2 Write Data 63 +1411 1 SyncTable 2 Write Data 64 +1412 1 SyncTable 2 Write Data 65 +1413 1 SyncTable 2 Write Data 66 +1414 1 SyncTable 2 Write Data 67 +1415 1 SyncTable 2 Write Data 68 +1416 1 SyncTable 2 Write Data 69 +1417 1 SyncTable 2 Write Data 70 +1418 1 SyncTable 2 Write Data 71 +1419 1 SyncTable 2 Write Data 72 +1420 1 SyncTable 3 ID 1 +1421 1 SyncTable 3 ID 2 +1422 1 SyncTable 3 ID 3 +1423 1 SyncTable 3 ID 4 +1424 1 SyncTable 3 ID 5 +1425 1 SyncTable 3 ID 6 +1426 2 SyncTable 3 Read Address 1 +1428 2 SyncTable 3 Read Address 2 +1430 2 SyncTable 3 Read Address 3 +1432 2 SyncTable 3 Read Address 4 +1434 2 SyncTable 3 Read Address 5 +1436 2 SyncTable 3 Read Address 6 +1438 2 SyncTable 3 Read Size 1 +1440 2 SyncTable 3 Read Size 2 +1442 2 SyncTable 3 Read Size 3 +1444 2 SyncTable 3 Read Size 4 +1446 2 SyncTable 3 Read Size 5 +1448 2 SyncTable 3 Read Size 6 +1450 2 SyncTable 3 Write Address 1 +1452 2 SyncTable 3 Write Address 2 +1454 2 SyncTable 3 Write Address 3 +1456 2 SyncTable 3 Write Address 4 +1458 2 SyncTable 3 Write Address 5 +1460 2 SyncTable 3 Write Address 6 +1462 2 SyncTable 3 Write Size 1 +1464 2 SyncTable 3 Write Size 2 +1466 2 SyncTable 3 Write Size 3 +1468 2 SyncTable 3 Write Size 4 +1470 2 SyncTable 3 Write Size 5 +1472 2 SyncTable 3 Write Size 6 +1474 1 SyncTable 3 Read Data 1 +1475 1 SyncTable 3 Read Data 2 +1476 1 SyncTable 3 Read Data 3 +1477 1 SyncTable 3 Read Data 4 +1478 1 SyncTable 3 Read Data 5 +1479 1 SyncTable 3 Read Data 6 +1480 1 SyncTable 3 Read Data 7 +1481 1 SyncTable 3 Read Data 8 +1482 1 SyncTable 3 Read Data 9 +1483 1 SyncTable 3 Read Data 10 +1484 1 SyncTable 3 Read Data 11 +1485 1 SyncTable 3 Read Data 12 +1486 1 SyncTable 3 Read Data 13 +1487 1 SyncTable 3 Read Data 14 +1488 1 SyncTable 3 Read Data 15 +1489 1 SyncTable 3 Read Data 16 +1490 1 SyncTable 3 Read Data 17 +1491 1 SyncTable 3 Read Data 18 +1492 1 SyncTable 3 Read Data 19 +1493 1 SyncTable 3 Read Data 20 +1494 1 SyncTable 3 Read Data 21 +1495 1 SyncTable 3 Read Data 22 +1496 1 SyncTable 3 Read Data 23 +1497 1 SyncTable 3 Read Data 24 +1498 1 SyncTable 3 Read Data 25 +1499 1 SyncTable 3 Read Data 26 +1500 1 SyncTable 3 Read Data 27 +1501 1 SyncTable 3 Read Data 28 +1502 1 SyncTable 3 Read Data 29 +1503 1 SyncTable 3 Read Data 30 +1504 1 SyncTable 3 Read Data 31 +1505 1 SyncTable 3 Read Data 32 +1506 1 SyncTable 3 Read Data 33 +1507 1 SyncTable 3 Read Data 34 +1508 1 SyncTable 3 Read Data 35 +1509 1 SyncTable 3 Read Data 36 +1510 1 SyncTable 3 Read Data 37 +1511 1 SyncTable 3 Read Data 38 +1512 1 SyncTable 3 Read Data 39 +1513 1 SyncTable 3 Read Data 40 +1514 1 SyncTable 3 Read Data 41 +1515 1 SyncTable 3 Read Data 42 +1516 1 SyncTable 3 Read Data 43 +1517 1 SyncTable 3 Read Data 44 +1518 1 SyncTable 3 Read Data 45 +1519 1 SyncTable 3 Read Data 46 +1520 1 SyncTable 3 Read Data 47 +1521 1 SyncTable 3 Read Data 48 +1522 1 SyncTable 3 Read Data 49 +1523 1 SyncTable 3 Read Data 50 +1524 1 SyncTable 3 Read Data 51 +1525 1 SyncTable 3 Read Data 52 +1526 1 SyncTable 3 Read Data 53 +1527 1 SyncTable 3 Read Data 54 +1528 1 SyncTable 3 Read Data 55 +1529 1 SyncTable 3 Read Data 56 +1530 1 SyncTable 3 Read Data 57 +1531 1 SyncTable 3 Read Data 58 +1532 1 SyncTable 3 Read Data 59 +1533 1 SyncTable 3 Read Data 60 +1534 1 SyncTable 3 Read Data 61 +1535 1 SyncTable 3 Read Data 62 +1536 1 SyncTable 3 Read Data 63 +1537 1 SyncTable 3 Read Data 64 +1538 1 SyncTable 3 Read Data 65 +1539 1 SyncTable 3 Read Data 66 +1540 1 SyncTable 3 Read Data 67 +1541 1 SyncTable 3 Read Data 68 +1542 1 SyncTable 3 Read Data 69 +1543 1 SyncTable 3 Read Data 70 +1544 1 SyncTable 3 Read Data 71 +1545 1 SyncTable 3 Read Data 72 +1546 1 SyncTable 3 Write Data 1 +1547 1 SyncTable 3 Write Data 2 +1548 1 SyncTable 3 Write Data 3 +1549 1 SyncTable 3 Write Data 4 +1550 1 SyncTable 3 Write Data 5 +1551 1 SyncTable 3 Write Data 6 +1552 1 SyncTable 3 Write Data 7 +1553 1 SyncTable 3 Write Data 8 +1554 1 SyncTable 3 Write Data 9 +1555 1 SyncTable 3 Write Data 10 +1556 1 SyncTable 3 Write Data 11 +1557 1 SyncTable 3 Write Data 12 +1558 1 SyncTable 3 Write Data 13 +1559 1 SyncTable 3 Write Data 14 +1560 1 SyncTable 3 Write Data 15 +1561 1 SyncTable 3 Write Data 16 +1562 1 SyncTable 3 Write Data 17 +1563 1 SyncTable 3 Write Data 18 +1564 1 SyncTable 3 Write Data 19 +1565 1 SyncTable 3 Write Data 20 +1566 1 SyncTable 3 Write Data 21 +1567 1 SyncTable 3 Write Data 22 +1568 1 SyncTable 3 Write Data 23 +1569 1 SyncTable 3 Write Data 24 +1570 1 SyncTable 3 Write Data 25 +1571 1 SyncTable 3 Write Data 26 +1572 1 SyncTable 3 Write Data 27 +1573 1 SyncTable 3 Write Data 28 +1574 1 SyncTable 3 Write Data 29 +1575 1 SyncTable 3 Write Data 30 +1576 1 SyncTable 3 Write Data 31 +1577 1 SyncTable 3 Write Data 32 +1578 1 SyncTable 3 Write Data 33 +1579 1 SyncTable 3 Write Data 34 +1580 1 SyncTable 3 Write Data 35 +1581 1 SyncTable 3 Write Data 36 +1582 1 SyncTable 3 Write Data 37 +1583 1 SyncTable 3 Write Data 38 +1584 1 SyncTable 3 Write Data 39 +1585 1 SyncTable 3 Write Data 40 +1586 1 SyncTable 3 Write Data 41 +1587 1 SyncTable 3 Write Data 42 +1588 1 SyncTable 3 Write Data 43 +1589 1 SyncTable 3 Write Data 44 +1590 1 SyncTable 3 Write Data 45 +1591 1 SyncTable 3 Write Data 46 +1592 1 SyncTable 3 Write Data 47 +1593 1 SyncTable 3 Write Data 48 +1594 1 SyncTable 3 Write Data 49 +1595 1 SyncTable 3 Write Data 50 +1596 1 SyncTable 3 Write Data 51 +1597 1 SyncTable 3 Write Data 52 +1598 1 SyncTable 3 Write Data 53 +1599 1 SyncTable 3 Write Data 54 +1600 1 SyncTable 3 Write Data 55 +1601 1 SyncTable 3 Write Data 56 +1602 1 SyncTable 3 Write Data 57 +1603 1 SyncTable 3 Write Data 58 +1604 1 SyncTable 3 Write Data 59 +1605 1 SyncTable 3 Write Data 60 +1606 1 SyncTable 3 Write Data 61 +1607 1 SyncTable 3 Write Data 62 +1608 1 SyncTable 3 Write Data 63 +1609 1 SyncTable 3 Write Data 64 +1610 1 SyncTable 3 Write Data 65 +1611 1 SyncTable 3 Write Data 66 +1612 1 SyncTable 3 Write Data 67 +1613 1 SyncTable 3 Write Data 68 +1614 1 SyncTable 3 Write Data 69 +1615 1 SyncTable 3 Write Data 70 +1616 1 SyncTable 3 Write Data 71 +1617 1 SyncTable 3 Write Data 72 +1618 1 SyncTable 4 ID 1 +1619 1 SyncTable 4 ID 2 +1620 1 SyncTable 4 ID 3 +1621 1 SyncTable 4 ID 4 +1622 1 SyncTable 4 ID 5 +1623 1 SyncTable 4 ID 6 +1624 2 SyncTable 4 Read Address 1 +1626 2 SyncTable 4 Read Address 2 +1628 2 SyncTable 4 Read Address 3 +1630 2 SyncTable 4 Read Address 4 +1632 2 SyncTable 4 Read Address 5 +1634 2 SyncTable 4 Read Address 6 +1636 2 SyncTable 4 Read Size 1 +1638 2 SyncTable 4 Read Size 2 +1640 2 SyncTable 4 Read Size 3 +1642 2 SyncTable 4 Read Size 4 +1644 2 SyncTable 4 Read Size 5 +1646 2 SyncTable 4 Read Size 6 +1648 2 SyncTable 4 Write Address 1 +1650 2 SyncTable 4 Write Address 2 +1652 2 SyncTable 4 Write Address 3 +1654 2 SyncTable 4 Write Address 4 +1656 2 SyncTable 4 Write Address 5 +1658 2 SyncTable 4 Write Address 6 +1660 2 SyncTable 4 Write Size 1 +1662 2 SyncTable 4 Write Size 2 +1664 2 SyncTable 4 Write Size 3 +1666 2 SyncTable 4 Write Size 4 +1668 2 SyncTable 4 Write Size 5 +1670 2 SyncTable 4 Write Size 6 +1672 1 SyncTable 4 Read Data 1 +1673 1 SyncTable 4 Read Data 2 +1674 1 SyncTable 4 Read Data 3 +1675 1 SyncTable 4 Read Data 4 +1676 1 SyncTable 4 Read Data 5 +1677 1 SyncTable 4 Read Data 6 +1678 1 SyncTable 4 Read Data 7 +1679 1 SyncTable 4 Read Data 8 +1680 1 SyncTable 4 Read Data 9 +1681 1 SyncTable 4 Read Data 10 +1682 1 SyncTable 4 Read Data 11 +1683 1 SyncTable 4 Read Data 12 +1684 1 SyncTable 4 Read Data 13 +1685 1 SyncTable 4 Read Data 14 +1686 1 SyncTable 4 Read Data 15 +1687 1 SyncTable 4 Read Data 16 +1688 1 SyncTable 4 Read Data 17 +1689 1 SyncTable 4 Read Data 18 +1690 1 SyncTable 4 Read Data 19 +1691 1 SyncTable 4 Read Data 20 +1692 1 SyncTable 4 Read Data 21 +1693 1 SyncTable 4 Read Data 22 +1694 1 SyncTable 4 Read Data 23 +1695 1 SyncTable 4 Read Data 24 +1696 1 SyncTable 4 Read Data 25 +1697 1 SyncTable 4 Read Data 26 +1698 1 SyncTable 4 Read Data 27 +1699 1 SyncTable 4 Read Data 28 +1700 1 SyncTable 4 Read Data 29 +1701 1 SyncTable 4 Read Data 30 +1702 1 SyncTable 4 Read Data 31 +1703 1 SyncTable 4 Read Data 32 +1704 1 SyncTable 4 Read Data 33 +1705 1 SyncTable 4 Read Data 34 +1706 1 SyncTable 4 Read Data 35 +1707 1 SyncTable 4 Read Data 36 +1708 1 SyncTable 4 Read Data 37 +1709 1 SyncTable 4 Read Data 38 +1710 1 SyncTable 4 Read Data 39 +1711 1 SyncTable 4 Read Data 40 +1712 1 SyncTable 4 Read Data 41 +1713 1 SyncTable 4 Read Data 42 +1714 1 SyncTable 4 Read Data 43 +1715 1 SyncTable 4 Read Data 44 +1716 1 SyncTable 4 Read Data 45 +1717 1 SyncTable 4 Read Data 46 +1718 1 SyncTable 4 Read Data 47 +1719 1 SyncTable 4 Read Data 48 +1720 1 SyncTable 4 Read Data 49 +1721 1 SyncTable 4 Read Data 50 +1722 1 SyncTable 4 Read Data 51 +1723 1 SyncTable 4 Read Data 52 +1724 1 SyncTable 4 Read Data 53 +1725 1 SyncTable 4 Read Data 54 +1726 1 SyncTable 4 Read Data 55 +1727 1 SyncTable 4 Read Data 56 +1728 1 SyncTable 4 Read Data 57 +1729 1 SyncTable 4 Read Data 58 +1730 1 SyncTable 4 Read Data 59 +1731 1 SyncTable 4 Read Data 60 +1732 1 SyncTable 4 Read Data 61 +1733 1 SyncTable 4 Read Data 62 +1734 1 SyncTable 4 Read Data 63 +1735 1 SyncTable 4 Read Data 64 +1736 1 SyncTable 4 Read Data 65 +1737 1 SyncTable 4 Read Data 66 +1738 1 SyncTable 4 Read Data 67 +1739 1 SyncTable 4 Read Data 68 +1740 1 SyncTable 4 Read Data 69 +1741 1 SyncTable 4 Read Data 70 +1742 1 SyncTable 4 Read Data 71 +1743 1 SyncTable 4 Read Data 72 +1744 1 SyncTable 4 Write Data 1 +1745 1 SyncTable 4 Write Data 2 +1746 1 SyncTable 4 Write Data 3 +1747 1 SyncTable 4 Write Data 4 +1748 1 SyncTable 4 Write Data 5 +1749 1 SyncTable 4 Write Data 6 +1750 1 SyncTable 4 Write Data 7 +1751 1 SyncTable 4 Write Data 8 +1752 1 SyncTable 4 Write Data 9 +1753 1 SyncTable 4 Write Data 10 +1754 1 SyncTable 4 Write Data 11 +1755 1 SyncTable 4 Write Data 12 +1756 1 SyncTable 4 Write Data 13 +1757 1 SyncTable 4 Write Data 14 +1758 1 SyncTable 4 Write Data 15 +1759 1 SyncTable 4 Write Data 16 +1760 1 SyncTable 4 Write Data 17 +1761 1 SyncTable 4 Write Data 18 +1762 1 SyncTable 4 Write Data 19 +1763 1 SyncTable 4 Write Data 20 +1764 1 SyncTable 4 Write Data 21 +1765 1 SyncTable 4 Write Data 22 +1766 1 SyncTable 4 Write Data 23 +1767 1 SyncTable 4 Write Data 24 +1768 1 SyncTable 4 Write Data 25 +1769 1 SyncTable 4 Write Data 26 +1770 1 SyncTable 4 Write Data 27 +1771 1 SyncTable 4 Write Data 28 +1772 1 SyncTable 4 Write Data 29 +1773 1 SyncTable 4 Write Data 30 +1774 1 SyncTable 4 Write Data 31 +1775 1 SyncTable 4 Write Data 32 +1776 1 SyncTable 4 Write Data 33 +1777 1 SyncTable 4 Write Data 34 +1778 1 SyncTable 4 Write Data 35 +1779 1 SyncTable 4 Write Data 36 +1780 1 SyncTable 4 Write Data 37 +1781 1 SyncTable 4 Write Data 38 +1782 1 SyncTable 4 Write Data 39 +1783 1 SyncTable 4 Write Data 40 +1784 1 SyncTable 4 Write Data 41 +1785 1 SyncTable 4 Write Data 42 +1786 1 SyncTable 4 Write Data 43 +1787 1 SyncTable 4 Write Data 44 +1788 1 SyncTable 4 Write Data 45 +1789 1 SyncTable 4 Write Data 46 +1790 1 SyncTable 4 Write Data 47 +1791 1 SyncTable 4 Write Data 48 +1792 1 SyncTable 4 Write Data 49 +1793 1 SyncTable 4 Write Data 50 +1794 1 SyncTable 4 Write Data 51 +1795 1 SyncTable 4 Write Data 52 +1796 1 SyncTable 4 Write Data 53 +1797 1 SyncTable 4 Write Data 54 +1798 1 SyncTable 4 Write Data 55 +1799 1 SyncTable 4 Write Data 56 +1800 1 SyncTable 4 Write Data 57 +1801 1 SyncTable 4 Write Data 58 +1802 1 SyncTable 4 Write Data 59 +1803 1 SyncTable 4 Write Data 60 +1804 1 SyncTable 4 Write Data 61 +1805 1 SyncTable 4 Write Data 62 +1806 1 SyncTable 4 Write Data 63 +1807 1 SyncTable 4 Write Data 64 +1808 1 SyncTable 4 Write Data 65 +1809 1 SyncTable 4 Write Data 66 +1810 1 SyncTable 4 Write Data 67 +1811 1 SyncTable 4 Write Data 68 +1812 1 SyncTable 4 Write Data 69 +1813 1 SyncTable 4 Write Data 70 +1814 1 SyncTable 4 Write Data 71 +1815 1 SyncTable 4 Write Data 72 +1816 1 SyncTable 5 ID 1 +1817 1 SyncTable 5 ID 2 +1818 1 SyncTable 5 ID 3 +1819 1 SyncTable 5 ID 4 +1820 1 SyncTable 5 ID 5 +1821 1 SyncTable 5 ID 6 +1822 2 SyncTable 5 Read Address 1 +1824 2 SyncTable 5 Read Address 2 +1826 2 SyncTable 5 Read Address 3 +1828 2 SyncTable 5 Read Address 4 +1830 2 SyncTable 5 Read Address 5 +1832 2 SyncTable 5 Read Address 6 +1834 2 SyncTable 5 Read Size 1 +1836 2 SyncTable 5 Read Size 2 +1838 2 SyncTable 5 Read Size 3 +1840 2 SyncTable 5 Read Size 4 +1842 2 SyncTable 5 Read Size 5 +1844 2 SyncTable 5 Read Size 6 +1846 2 SyncTable 5 Write Address 1 +1848 2 SyncTable 5 Write Address 2 +1850 2 SyncTable 5 Write Address 3 +1852 2 SyncTable 5 Write Address 4 +1854 2 SyncTable 5 Write Address 5 +1856 2 SyncTable 5 Write Address 6 +1858 2 SyncTable 5 Write Size 1 +1860 2 SyncTable 5 Write Size 2 +1862 2 SyncTable 5 Write Size 3 +1864 2 SyncTable 5 Write Size 4 +1866 2 SyncTable 5 Write Size 5 +1868 2 SyncTable 5 Write Size 6 +1870 1 SyncTable 5 Read Data 1 +1871 1 SyncTable 5 Read Data 2 +1872 1 SyncTable 5 Read Data 3 +1873 1 SyncTable 5 Read Data 4 +1874 1 SyncTable 5 Read Data 5 +1875 1 SyncTable 5 Read Data 6 +1876 1 SyncTable 5 Read Data 7 +1877 1 SyncTable 5 Read Data 8 +1878 1 SyncTable 5 Read Data 9 +1879 1 SyncTable 5 Read Data 10 +1880 1 SyncTable 5 Read Data 11 +1881 1 SyncTable 5 Read Data 12 +1882 1 SyncTable 5 Read Data 13 +1883 1 SyncTable 5 Read Data 14 +1884 1 SyncTable 5 Read Data 15 +1885 1 SyncTable 5 Read Data 16 +1886 1 SyncTable 5 Read Data 17 +1887 1 SyncTable 5 Read Data 18 +1888 1 SyncTable 5 Read Data 19 +1889 1 SyncTable 5 Read Data 20 +1890 1 SyncTable 5 Read Data 21 +1891 1 SyncTable 5 Read Data 22 +1892 1 SyncTable 5 Read Data 23 +1893 1 SyncTable 5 Read Data 24 +1894 1 SyncTable 5 Read Data 25 +1895 1 SyncTable 5 Read Data 26 +1896 1 SyncTable 5 Read Data 27 +1897 1 SyncTable 5 Read Data 28 +1898 1 SyncTable 5 Read Data 29 +1899 1 SyncTable 5 Read Data 30 +1900 1 SyncTable 5 Read Data 31 +1901 1 SyncTable 5 Read Data 32 +1902 1 SyncTable 5 Read Data 33 +1903 1 SyncTable 5 Read Data 34 +1904 1 SyncTable 5 Read Data 35 +1905 1 SyncTable 5 Read Data 36 +1906 1 SyncTable 5 Read Data 37 +1907 1 SyncTable 5 Read Data 38 +1908 1 SyncTable 5 Read Data 39 +1909 1 SyncTable 5 Read Data 40 +1910 1 SyncTable 5 Read Data 41 +1911 1 SyncTable 5 Read Data 42 +1912 1 SyncTable 5 Read Data 43 +1913 1 SyncTable 5 Read Data 44 +1914 1 SyncTable 5 Read Data 45 +1915 1 SyncTable 5 Read Data 46 +1916 1 SyncTable 5 Read Data 47 +1917 1 SyncTable 5 Read Data 48 +1918 1 SyncTable 5 Read Data 49 +1919 1 SyncTable 5 Read Data 50 +1920 1 SyncTable 5 Read Data 51 +1921 1 SyncTable 5 Read Data 52 +1922 1 SyncTable 5 Read Data 53 +1923 1 SyncTable 5 Read Data 54 +1924 1 SyncTable 5 Read Data 55 +1925 1 SyncTable 5 Read Data 56 +1926 1 SyncTable 5 Read Data 57 +1927 1 SyncTable 5 Read Data 58 +1928 1 SyncTable 5 Read Data 59 +1929 1 SyncTable 5 Read Data 60 +1930 1 SyncTable 5 Read Data 61 +1931 1 SyncTable 5 Read Data 62 +1932 1 SyncTable 5 Read Data 63 +1933 1 SyncTable 5 Read Data 64 +1934 1 SyncTable 5 Read Data 65 +1935 1 SyncTable 5 Read Data 66 +1936 1 SyncTable 5 Read Data 67 +1937 1 SyncTable 5 Read Data 68 +1938 1 SyncTable 5 Read Data 69 +1939 1 SyncTable 5 Read Data 70 +1940 1 SyncTable 5 Read Data 71 +1941 1 SyncTable 5 Read Data 72 +1942 1 SyncTable 5 Write Data 1 +1943 1 SyncTable 5 Write Data 2 +1944 1 SyncTable 5 Write Data 3 +1945 1 SyncTable 5 Write Data 4 +1946 1 SyncTable 5 Write Data 5 +1947 1 SyncTable 5 Write Data 6 +1948 1 SyncTable 5 Write Data 7 +1949 1 SyncTable 5 Write Data 8 +1950 1 SyncTable 5 Write Data 9 +1951 1 SyncTable 5 Write Data 10 +1952 1 SyncTable 5 Write Data 11 +1953 1 SyncTable 5 Write Data 12 +1954 1 SyncTable 5 Write Data 13 +1955 1 SyncTable 5 Write Data 14 +1956 1 SyncTable 5 Write Data 15 +1957 1 SyncTable 5 Write Data 16 +1958 1 SyncTable 5 Write Data 17 +1959 1 SyncTable 5 Write Data 18 +1960 1 SyncTable 5 Write Data 19 +1961 1 SyncTable 5 Write Data 20 +1962 1 SyncTable 5 Write Data 21 +1963 1 SyncTable 5 Write Data 22 +1964 1 SyncTable 5 Write Data 23 +1965 1 SyncTable 5 Write Data 24 +1966 1 SyncTable 5 Write Data 25 +1967 1 SyncTable 5 Write Data 26 +1968 1 SyncTable 5 Write Data 27 +1969 1 SyncTable 5 Write Data 28 +1970 1 SyncTable 5 Write Data 29 +1971 1 SyncTable 5 Write Data 30 +1972 1 SyncTable 5 Write Data 31 +1973 1 SyncTable 5 Write Data 32 +1974 1 SyncTable 5 Write Data 33 +1975 1 SyncTable 5 Write Data 34 +1976 1 SyncTable 5 Write Data 35 +1977 1 SyncTable 5 Write Data 36 +1978 1 SyncTable 5 Write Data 37 +1979 1 SyncTable 5 Write Data 38 +1980 1 SyncTable 5 Write Data 39 +1981 1 SyncTable 5 Write Data 40 +1982 1 SyncTable 5 Write Data 41 +1983 1 SyncTable 5 Write Data 42 +1984 1 SyncTable 5 Write Data 43 +1985 1 SyncTable 5 Write Data 44 +1986 1 SyncTable 5 Write Data 45 +1987 1 SyncTable 5 Write Data 46 +1988 1 SyncTable 5 Write Data 47 +1989 1 SyncTable 5 Write Data 48 +1990 1 SyncTable 5 Write Data 49 +1991 1 SyncTable 5 Write Data 50 +1992 1 SyncTable 5 Write Data 51 +1993 1 SyncTable 5 Write Data 52 +1994 1 SyncTable 5 Write Data 53 +1995 1 SyncTable 5 Write Data 54 +1996 1 SyncTable 5 Write Data 55 +1997 1 SyncTable 5 Write Data 56 +1998 1 SyncTable 5 Write Data 57 +1999 1 SyncTable 5 Write Data 58 +2000 1 SyncTable 5 Write Data 59 +2001 1 SyncTable 5 Write Data 60 +2002 1 SyncTable 5 Write Data 61 +2003 1 SyncTable 5 Write Data 62 +2004 1 SyncTable 5 Write Data 63 +2005 1 SyncTable 5 Write Data 64 +2006 1 SyncTable 5 Write Data 65 +2007 1 SyncTable 5 Write Data 66 +2008 1 SyncTable 5 Write Data 67 +2009 1 SyncTable 5 Write Data 68 +2010 1 SyncTable 5 Write Data 69 +2011 1 SyncTable 5 Write Data 70 +2012 1 SyncTable 5 Write Data 71 +2013 1 SyncTable 5 Write Data 72 diff --git a/param/dxl_model/hx5_d20_rr.model b/param/dxl_model/hx5_d20_rr.model new file mode 100644 index 0000000..fdfd681 --- /dev/null +++ b/param/dxl_model/hx5_d20_rr.model @@ -0,0 +1,894 @@ +[control table] +Address Size Data Name +0 2 Model Number +2 4 Model Information +6 1 Firmware Version +7 1 ID +8 1 Bus Watchdog +11 1 Protocol Type +12 1 Baud Rate (Bus) +13 1 Return Delay Time +15 1 Status Return Level +16 1 Registered Instruction +20 1 Baud Rate (DXL) +65 1 LED +70 1 Table Sync Enable +100 2 Realtime Tick +102 2 Present Input Voltage +106 1 Status +122 2 Indirect Address 1 +122 2 Indirect Address Read +452 2 Indirect Address Write +634 1 Indirect Data 1 +634 1 Indirect Data Read +799 1 Indirect Data Write +1024 1 SyncTable 1 ID 1 +1025 1 SyncTable 1 ID 2 +1026 1 SyncTable 1 ID 3 +1027 1 SyncTable 1 ID 4 +1028 1 SyncTable 1 ID 5 +1029 1 SyncTable 1 ID 6 +1030 2 SyncTable 1 Read Address 1 +1032 2 SyncTable 1 Read Address 2 +1034 2 SyncTable 1 Read Address 3 +1036 2 SyncTable 1 Read Address 4 +1038 2 SyncTable 1 Read Address 5 +1040 2 SyncTable 1 Read Address 6 +1042 2 SyncTable 1 Read Size 1 +1044 2 SyncTable 1 Read Size 2 +1046 2 SyncTable 1 Read Size 3 +1048 2 SyncTable 1 Read Size 4 +1050 2 SyncTable 1 Read Size 5 +1052 2 SyncTable 1 Read Size 6 +1054 2 SyncTable 1 Write Address 1 +1056 2 SyncTable 1 Write Address 2 +1058 2 SyncTable 1 Write Address 3 +1060 2 SyncTable 1 Write Address 4 +1062 2 SyncTable 1 Write Address 5 +1064 2 SyncTable 1 Write Address 6 +1066 2 SyncTable 1 Write Size 1 +1068 2 SyncTable 1 Write Size 2 +1070 2 SyncTable 1 Write Size 3 +1072 2 SyncTable 1 Write Size 4 +1074 2 SyncTable 1 Write Size 5 +1076 2 SyncTable 1 Write Size 6 +1078 1 SyncTable 1 Read Data 1 +1079 1 SyncTable 1 Read Data 2 +1080 1 SyncTable 1 Read Data 3 +1081 1 SyncTable 1 Read Data 4 +1082 1 SyncTable 1 Read Data 5 +1083 1 SyncTable 1 Read Data 6 +1084 1 SyncTable 1 Read Data 7 +1085 1 SyncTable 1 Read Data 8 +1086 1 SyncTable 1 Read Data 9 +1087 1 SyncTable 1 Read Data 10 +1088 1 SyncTable 1 Read Data 11 +1089 1 SyncTable 1 Read Data 12 +1090 1 SyncTable 1 Read Data 13 +1091 1 SyncTable 1 Read Data 14 +1092 1 SyncTable 1 Read Data 15 +1093 1 SyncTable 1 Read Data 16 +1094 1 SyncTable 1 Read Data 17 +1095 1 SyncTable 1 Read Data 18 +1096 1 SyncTable 1 Read Data 19 +1097 1 SyncTable 1 Read Data 20 +1098 1 SyncTable 1 Read Data 21 +1099 1 SyncTable 1 Read Data 22 +1100 1 SyncTable 1 Read Data 23 +1101 1 SyncTable 1 Read Data 24 +1102 1 SyncTable 1 Read Data 25 +1103 1 SyncTable 1 Read Data 26 +1104 1 SyncTable 1 Read Data 27 +1105 1 SyncTable 1 Read Data 28 +1106 1 SyncTable 1 Read Data 29 +1107 1 SyncTable 1 Read Data 30 +1108 1 SyncTable 1 Read Data 31 +1109 1 SyncTable 1 Read Data 32 +1110 1 SyncTable 1 Read Data 33 +1111 1 SyncTable 1 Read Data 34 +1112 1 SyncTable 1 Read Data 35 +1113 1 SyncTable 1 Read Data 36 +1114 1 SyncTable 1 Read Data 37 +1115 1 SyncTable 1 Read Data 38 +1116 1 SyncTable 1 Read Data 39 +1117 1 SyncTable 1 Read Data 40 +1118 1 SyncTable 1 Read Data 41 +1119 1 SyncTable 1 Read Data 42 +1120 1 SyncTable 1 Read Data 43 +1121 1 SyncTable 1 Read Data 44 +1122 1 SyncTable 1 Read Data 45 +1123 1 SyncTable 1 Read Data 46 +1124 1 SyncTable 1 Read Data 47 +1125 1 SyncTable 1 Read Data 48 +1126 1 SyncTable 1 Read Data 49 +1127 1 SyncTable 1 Read Data 50 +1128 1 SyncTable 1 Read Data 51 +1129 1 SyncTable 1 Read Data 52 +1130 1 SyncTable 1 Read Data 53 +1131 1 SyncTable 1 Read Data 54 +1132 1 SyncTable 1 Read Data 55 +1133 1 SyncTable 1 Read Data 56 +1134 1 SyncTable 1 Read Data 57 +1135 1 SyncTable 1 Read Data 58 +1136 1 SyncTable 1 Read Data 59 +1137 1 SyncTable 1 Read Data 60 +1138 1 SyncTable 1 Read Data 61 +1139 1 SyncTable 1 Read Data 62 +1140 1 SyncTable 1 Read Data 63 +1141 1 SyncTable 1 Read Data 64 +1142 1 SyncTable 1 Read Data 65 +1143 1 SyncTable 1 Read Data 66 +1144 1 SyncTable 1 Read Data 67 +1145 1 SyncTable 1 Read Data 68 +1146 1 SyncTable 1 Read Data 69 +1147 1 SyncTable 1 Read Data 70 +1148 1 SyncTable 1 Read Data 71 +1149 1 SyncTable 1 Read Data 72 +1150 1 SyncTable 1 Write Data 1 +1151 1 SyncTable 1 Write Data 2 +1152 1 SyncTable 1 Write Data 3 +1153 1 SyncTable 1 Write Data 4 +1154 1 SyncTable 1 Write Data 5 +1155 1 SyncTable 1 Write Data 6 +1156 1 SyncTable 1 Write Data 7 +1157 1 SyncTable 1 Write Data 8 +1158 1 SyncTable 1 Write Data 9 +1159 1 SyncTable 1 Write Data 10 +1160 1 SyncTable 1 Write Data 11 +1161 1 SyncTable 1 Write Data 12 +1162 1 SyncTable 1 Write Data 13 +1163 1 SyncTable 1 Write Data 14 +1164 1 SyncTable 1 Write Data 15 +1165 1 SyncTable 1 Write Data 16 +1166 1 SyncTable 1 Write Data 17 +1167 1 SyncTable 1 Write Data 18 +1168 1 SyncTable 1 Write Data 19 +1169 1 SyncTable 1 Write Data 20 +1170 1 SyncTable 1 Write Data 21 +1171 1 SyncTable 1 Write Data 22 +1172 1 SyncTable 1 Write Data 23 +1173 1 SyncTable 1 Write Data 24 +1174 1 SyncTable 1 Write Data 25 +1175 1 SyncTable 1 Write Data 26 +1176 1 SyncTable 1 Write Data 27 +1177 1 SyncTable 1 Write Data 28 +1178 1 SyncTable 1 Write Data 29 +1179 1 SyncTable 1 Write Data 30 +1180 1 SyncTable 1 Write Data 31 +1181 1 SyncTable 1 Write Data 32 +1182 1 SyncTable 1 Write Data 33 +1183 1 SyncTable 1 Write Data 34 +1184 1 SyncTable 1 Write Data 35 +1185 1 SyncTable 1 Write Data 36 +1186 1 SyncTable 1 Write Data 37 +1187 1 SyncTable 1 Write Data 38 +1188 1 SyncTable 1 Write Data 39 +1189 1 SyncTable 1 Write Data 40 +1190 1 SyncTable 1 Write Data 41 +1191 1 SyncTable 1 Write Data 42 +1192 1 SyncTable 1 Write Data 43 +1193 1 SyncTable 1 Write Data 44 +1194 1 SyncTable 1 Write Data 45 +1195 1 SyncTable 1 Write Data 46 +1196 1 SyncTable 1 Write Data 47 +1197 1 SyncTable 1 Write Data 48 +1198 1 SyncTable 1 Write Data 49 +1199 1 SyncTable 1 Write Data 50 +1200 1 SyncTable 1 Write Data 51 +1201 1 SyncTable 1 Write Data 52 +1202 1 SyncTable 1 Write Data 53 +1203 1 SyncTable 1 Write Data 54 +1204 1 SyncTable 1 Write Data 55 +1205 1 SyncTable 1 Write Data 56 +1206 1 SyncTable 1 Write Data 57 +1207 1 SyncTable 1 Write Data 58 +1208 1 SyncTable 1 Write Data 59 +1209 1 SyncTable 1 Write Data 60 +1210 1 SyncTable 1 Write Data 61 +1211 1 SyncTable 1 Write Data 62 +1212 1 SyncTable 1 Write Data 63 +1213 1 SyncTable 1 Write Data 64 +1214 1 SyncTable 1 Write Data 65 +1215 1 SyncTable 1 Write Data 66 +1216 1 SyncTable 1 Write Data 67 +1217 1 SyncTable 1 Write Data 68 +1218 1 SyncTable 1 Write Data 69 +1219 1 SyncTable 1 Write Data 70 +1220 1 SyncTable 1 Write Data 71 +1221 1 SyncTable 1 Write Data 72 +1222 1 SyncTable 2 ID 1 +1223 1 SyncTable 2 ID 2 +1224 1 SyncTable 2 ID 3 +1225 1 SyncTable 2 ID 4 +1226 1 SyncTable 2 ID 5 +1227 1 SyncTable 2 ID 6 +1228 2 SyncTable 2 Read Address 1 +1230 2 SyncTable 2 Read Address 2 +1232 2 SyncTable 2 Read Address 3 +1234 2 SyncTable 2 Read Address 4 +1236 2 SyncTable 2 Read Address 5 +1238 2 SyncTable 2 Read Address 6 +1240 2 SyncTable 2 Read Size 1 +1242 2 SyncTable 2 Read Size 2 +1244 2 SyncTable 2 Read Size 3 +1246 2 SyncTable 2 Read Size 4 +1248 2 SyncTable 2 Read Size 5 +1250 2 SyncTable 2 Read Size 6 +1252 2 SyncTable 2 Write Address 1 +1254 2 SyncTable 2 Write Address 2 +1256 2 SyncTable 2 Write Address 3 +1258 2 SyncTable 2 Write Address 4 +1260 2 SyncTable 2 Write Address 5 +1262 2 SyncTable 2 Write Address 6 +1264 2 SyncTable 2 Write Size 1 +1266 2 SyncTable 2 Write Size 2 +1268 2 SyncTable 2 Write Size 3 +1270 2 SyncTable 2 Write Size 4 +1272 2 SyncTable 2 Write Size 5 +1274 2 SyncTable 2 Write Size 6 +1276 1 SyncTable 2 Read Data 1 +1277 1 SyncTable 2 Read Data 2 +1278 1 SyncTable 2 Read Data 3 +1279 1 SyncTable 2 Read Data 4 +1280 1 SyncTable 2 Read Data 5 +1281 1 SyncTable 2 Read Data 6 +1282 1 SyncTable 2 Read Data 7 +1283 1 SyncTable 2 Read Data 8 +1284 1 SyncTable 2 Read Data 9 +1285 1 SyncTable 2 Read Data 10 +1286 1 SyncTable 2 Read Data 11 +1287 1 SyncTable 2 Read Data 12 +1288 1 SyncTable 2 Read Data 13 +1289 1 SyncTable 2 Read Data 14 +1290 1 SyncTable 2 Read Data 15 +1291 1 SyncTable 2 Read Data 16 +1292 1 SyncTable 2 Read Data 17 +1293 1 SyncTable 2 Read Data 18 +1294 1 SyncTable 2 Read Data 19 +1295 1 SyncTable 2 Read Data 20 +1296 1 SyncTable 2 Read Data 21 +1297 1 SyncTable 2 Read Data 22 +1298 1 SyncTable 2 Read Data 23 +1299 1 SyncTable 2 Read Data 24 +1300 1 SyncTable 2 Read Data 25 +1301 1 SyncTable 2 Read Data 26 +1302 1 SyncTable 2 Read Data 27 +1303 1 SyncTable 2 Read Data 28 +1304 1 SyncTable 2 Read Data 29 +1305 1 SyncTable 2 Read Data 30 +1306 1 SyncTable 2 Read Data 31 +1307 1 SyncTable 2 Read Data 32 +1308 1 SyncTable 2 Read Data 33 +1309 1 SyncTable 2 Read Data 34 +1310 1 SyncTable 2 Read Data 35 +1311 1 SyncTable 2 Read Data 36 +1312 1 SyncTable 2 Read Data 37 +1313 1 SyncTable 2 Read Data 38 +1314 1 SyncTable 2 Read Data 39 +1315 1 SyncTable 2 Read Data 40 +1316 1 SyncTable 2 Read Data 41 +1317 1 SyncTable 2 Read Data 42 +1318 1 SyncTable 2 Read Data 43 +1319 1 SyncTable 2 Read Data 44 +1320 1 SyncTable 2 Read Data 45 +1321 1 SyncTable 2 Read Data 46 +1322 1 SyncTable 2 Read Data 47 +1323 1 SyncTable 2 Read Data 48 +1324 1 SyncTable 2 Read Data 49 +1325 1 SyncTable 2 Read Data 50 +1326 1 SyncTable 2 Read Data 51 +1327 1 SyncTable 2 Read Data 52 +1328 1 SyncTable 2 Read Data 53 +1329 1 SyncTable 2 Read Data 54 +1330 1 SyncTable 2 Read Data 55 +1331 1 SyncTable 2 Read Data 56 +1332 1 SyncTable 2 Read Data 57 +1333 1 SyncTable 2 Read Data 58 +1334 1 SyncTable 2 Read Data 59 +1335 1 SyncTable 2 Read Data 60 +1336 1 SyncTable 2 Read Data 61 +1337 1 SyncTable 2 Read Data 62 +1338 1 SyncTable 2 Read Data 63 +1339 1 SyncTable 2 Read Data 64 +1340 1 SyncTable 2 Read Data 65 +1341 1 SyncTable 2 Read Data 66 +1342 1 SyncTable 2 Read Data 67 +1343 1 SyncTable 2 Read Data 68 +1344 1 SyncTable 2 Read Data 69 +1345 1 SyncTable 2 Read Data 70 +1346 1 SyncTable 2 Read Data 71 +1347 1 SyncTable 2 Read Data 72 +1348 1 SyncTable 2 Write Data 1 +1349 1 SyncTable 2 Write Data 2 +1350 1 SyncTable 2 Write Data 3 +1351 1 SyncTable 2 Write Data 4 +1352 1 SyncTable 2 Write Data 5 +1353 1 SyncTable 2 Write Data 6 +1354 1 SyncTable 2 Write Data 7 +1355 1 SyncTable 2 Write Data 8 +1356 1 SyncTable 2 Write Data 9 +1357 1 SyncTable 2 Write Data 10 +1358 1 SyncTable 2 Write Data 11 +1359 1 SyncTable 2 Write Data 12 +1360 1 SyncTable 2 Write Data 13 +1361 1 SyncTable 2 Write Data 14 +1362 1 SyncTable 2 Write Data 15 +1363 1 SyncTable 2 Write Data 16 +1364 1 SyncTable 2 Write Data 17 +1365 1 SyncTable 2 Write Data 18 +1366 1 SyncTable 2 Write Data 19 +1367 1 SyncTable 2 Write Data 20 +1368 1 SyncTable 2 Write Data 21 +1369 1 SyncTable 2 Write Data 22 +1370 1 SyncTable 2 Write Data 23 +1371 1 SyncTable 2 Write Data 24 +1372 1 SyncTable 2 Write Data 25 +1373 1 SyncTable 2 Write Data 26 +1374 1 SyncTable 2 Write Data 27 +1375 1 SyncTable 2 Write Data 28 +1376 1 SyncTable 2 Write Data 29 +1377 1 SyncTable 2 Write Data 30 +1378 1 SyncTable 2 Write Data 31 +1379 1 SyncTable 2 Write Data 32 +1380 1 SyncTable 2 Write Data 33 +1381 1 SyncTable 2 Write Data 34 +1382 1 SyncTable 2 Write Data 35 +1383 1 SyncTable 2 Write Data 36 +1384 1 SyncTable 2 Write Data 37 +1385 1 SyncTable 2 Write Data 38 +1386 1 SyncTable 2 Write Data 39 +1387 1 SyncTable 2 Write Data 40 +1388 1 SyncTable 2 Write Data 41 +1389 1 SyncTable 2 Write Data 42 +1390 1 SyncTable 2 Write Data 43 +1391 1 SyncTable 2 Write Data 44 +1392 1 SyncTable 2 Write Data 45 +1393 1 SyncTable 2 Write Data 46 +1394 1 SyncTable 2 Write Data 47 +1395 1 SyncTable 2 Write Data 48 +1396 1 SyncTable 2 Write Data 49 +1397 1 SyncTable 2 Write Data 50 +1398 1 SyncTable 2 Write Data 51 +1399 1 SyncTable 2 Write Data 52 +1400 1 SyncTable 2 Write Data 53 +1401 1 SyncTable 2 Write Data 54 +1402 1 SyncTable 2 Write Data 55 +1403 1 SyncTable 2 Write Data 56 +1404 1 SyncTable 2 Write Data 57 +1405 1 SyncTable 2 Write Data 58 +1406 1 SyncTable 2 Write Data 59 +1407 1 SyncTable 2 Write Data 60 +1408 1 SyncTable 2 Write Data 61 +1409 1 SyncTable 2 Write Data 62 +1410 1 SyncTable 2 Write Data 63 +1411 1 SyncTable 2 Write Data 64 +1412 1 SyncTable 2 Write Data 65 +1413 1 SyncTable 2 Write Data 66 +1414 1 SyncTable 2 Write Data 67 +1415 1 SyncTable 2 Write Data 68 +1416 1 SyncTable 2 Write Data 69 +1417 1 SyncTable 2 Write Data 70 +1418 1 SyncTable 2 Write Data 71 +1419 1 SyncTable 2 Write Data 72 +1420 1 SyncTable 3 ID 1 +1421 1 SyncTable 3 ID 2 +1422 1 SyncTable 3 ID 3 +1423 1 SyncTable 3 ID 4 +1424 1 SyncTable 3 ID 5 +1425 1 SyncTable 3 ID 6 +1426 2 SyncTable 3 Read Address 1 +1428 2 SyncTable 3 Read Address 2 +1430 2 SyncTable 3 Read Address 3 +1432 2 SyncTable 3 Read Address 4 +1434 2 SyncTable 3 Read Address 5 +1436 2 SyncTable 3 Read Address 6 +1438 2 SyncTable 3 Read Size 1 +1440 2 SyncTable 3 Read Size 2 +1442 2 SyncTable 3 Read Size 3 +1444 2 SyncTable 3 Read Size 4 +1446 2 SyncTable 3 Read Size 5 +1448 2 SyncTable 3 Read Size 6 +1450 2 SyncTable 3 Write Address 1 +1452 2 SyncTable 3 Write Address 2 +1454 2 SyncTable 3 Write Address 3 +1456 2 SyncTable 3 Write Address 4 +1458 2 SyncTable 3 Write Address 5 +1460 2 SyncTable 3 Write Address 6 +1462 2 SyncTable 3 Write Size 1 +1464 2 SyncTable 3 Write Size 2 +1466 2 SyncTable 3 Write Size 3 +1468 2 SyncTable 3 Write Size 4 +1470 2 SyncTable 3 Write Size 5 +1472 2 SyncTable 3 Write Size 6 +1474 1 SyncTable 3 Read Data 1 +1475 1 SyncTable 3 Read Data 2 +1476 1 SyncTable 3 Read Data 3 +1477 1 SyncTable 3 Read Data 4 +1478 1 SyncTable 3 Read Data 5 +1479 1 SyncTable 3 Read Data 6 +1480 1 SyncTable 3 Read Data 7 +1481 1 SyncTable 3 Read Data 8 +1482 1 SyncTable 3 Read Data 9 +1483 1 SyncTable 3 Read Data 10 +1484 1 SyncTable 3 Read Data 11 +1485 1 SyncTable 3 Read Data 12 +1486 1 SyncTable 3 Read Data 13 +1487 1 SyncTable 3 Read Data 14 +1488 1 SyncTable 3 Read Data 15 +1489 1 SyncTable 3 Read Data 16 +1490 1 SyncTable 3 Read Data 17 +1491 1 SyncTable 3 Read Data 18 +1492 1 SyncTable 3 Read Data 19 +1493 1 SyncTable 3 Read Data 20 +1494 1 SyncTable 3 Read Data 21 +1495 1 SyncTable 3 Read Data 22 +1496 1 SyncTable 3 Read Data 23 +1497 1 SyncTable 3 Read Data 24 +1498 1 SyncTable 3 Read Data 25 +1499 1 SyncTable 3 Read Data 26 +1500 1 SyncTable 3 Read Data 27 +1501 1 SyncTable 3 Read Data 28 +1502 1 SyncTable 3 Read Data 29 +1503 1 SyncTable 3 Read Data 30 +1504 1 SyncTable 3 Read Data 31 +1505 1 SyncTable 3 Read Data 32 +1506 1 SyncTable 3 Read Data 33 +1507 1 SyncTable 3 Read Data 34 +1508 1 SyncTable 3 Read Data 35 +1509 1 SyncTable 3 Read Data 36 +1510 1 SyncTable 3 Read Data 37 +1511 1 SyncTable 3 Read Data 38 +1512 1 SyncTable 3 Read Data 39 +1513 1 SyncTable 3 Read Data 40 +1514 1 SyncTable 3 Read Data 41 +1515 1 SyncTable 3 Read Data 42 +1516 1 SyncTable 3 Read Data 43 +1517 1 SyncTable 3 Read Data 44 +1518 1 SyncTable 3 Read Data 45 +1519 1 SyncTable 3 Read Data 46 +1520 1 SyncTable 3 Read Data 47 +1521 1 SyncTable 3 Read Data 48 +1522 1 SyncTable 3 Read Data 49 +1523 1 SyncTable 3 Read Data 50 +1524 1 SyncTable 3 Read Data 51 +1525 1 SyncTable 3 Read Data 52 +1526 1 SyncTable 3 Read Data 53 +1527 1 SyncTable 3 Read Data 54 +1528 1 SyncTable 3 Read Data 55 +1529 1 SyncTable 3 Read Data 56 +1530 1 SyncTable 3 Read Data 57 +1531 1 SyncTable 3 Read Data 58 +1532 1 SyncTable 3 Read Data 59 +1533 1 SyncTable 3 Read Data 60 +1534 1 SyncTable 3 Read Data 61 +1535 1 SyncTable 3 Read Data 62 +1536 1 SyncTable 3 Read Data 63 +1537 1 SyncTable 3 Read Data 64 +1538 1 SyncTable 3 Read Data 65 +1539 1 SyncTable 3 Read Data 66 +1540 1 SyncTable 3 Read Data 67 +1541 1 SyncTable 3 Read Data 68 +1542 1 SyncTable 3 Read Data 69 +1543 1 SyncTable 3 Read Data 70 +1544 1 SyncTable 3 Read Data 71 +1545 1 SyncTable 3 Read Data 72 +1546 1 SyncTable 3 Write Data 1 +1547 1 SyncTable 3 Write Data 2 +1548 1 SyncTable 3 Write Data 3 +1549 1 SyncTable 3 Write Data 4 +1550 1 SyncTable 3 Write Data 5 +1551 1 SyncTable 3 Write Data 6 +1552 1 SyncTable 3 Write Data 7 +1553 1 SyncTable 3 Write Data 8 +1554 1 SyncTable 3 Write Data 9 +1555 1 SyncTable 3 Write Data 10 +1556 1 SyncTable 3 Write Data 11 +1557 1 SyncTable 3 Write Data 12 +1558 1 SyncTable 3 Write Data 13 +1559 1 SyncTable 3 Write Data 14 +1560 1 SyncTable 3 Write Data 15 +1561 1 SyncTable 3 Write Data 16 +1562 1 SyncTable 3 Write Data 17 +1563 1 SyncTable 3 Write Data 18 +1564 1 SyncTable 3 Write Data 19 +1565 1 SyncTable 3 Write Data 20 +1566 1 SyncTable 3 Write Data 21 +1567 1 SyncTable 3 Write Data 22 +1568 1 SyncTable 3 Write Data 23 +1569 1 SyncTable 3 Write Data 24 +1570 1 SyncTable 3 Write Data 25 +1571 1 SyncTable 3 Write Data 26 +1572 1 SyncTable 3 Write Data 27 +1573 1 SyncTable 3 Write Data 28 +1574 1 SyncTable 3 Write Data 29 +1575 1 SyncTable 3 Write Data 30 +1576 1 SyncTable 3 Write Data 31 +1577 1 SyncTable 3 Write Data 32 +1578 1 SyncTable 3 Write Data 33 +1579 1 SyncTable 3 Write Data 34 +1580 1 SyncTable 3 Write Data 35 +1581 1 SyncTable 3 Write Data 36 +1582 1 SyncTable 3 Write Data 37 +1583 1 SyncTable 3 Write Data 38 +1584 1 SyncTable 3 Write Data 39 +1585 1 SyncTable 3 Write Data 40 +1586 1 SyncTable 3 Write Data 41 +1587 1 SyncTable 3 Write Data 42 +1588 1 SyncTable 3 Write Data 43 +1589 1 SyncTable 3 Write Data 44 +1590 1 SyncTable 3 Write Data 45 +1591 1 SyncTable 3 Write Data 46 +1592 1 SyncTable 3 Write Data 47 +1593 1 SyncTable 3 Write Data 48 +1594 1 SyncTable 3 Write Data 49 +1595 1 SyncTable 3 Write Data 50 +1596 1 SyncTable 3 Write Data 51 +1597 1 SyncTable 3 Write Data 52 +1598 1 SyncTable 3 Write Data 53 +1599 1 SyncTable 3 Write Data 54 +1600 1 SyncTable 3 Write Data 55 +1601 1 SyncTable 3 Write Data 56 +1602 1 SyncTable 3 Write Data 57 +1603 1 SyncTable 3 Write Data 58 +1604 1 SyncTable 3 Write Data 59 +1605 1 SyncTable 3 Write Data 60 +1606 1 SyncTable 3 Write Data 61 +1607 1 SyncTable 3 Write Data 62 +1608 1 SyncTable 3 Write Data 63 +1609 1 SyncTable 3 Write Data 64 +1610 1 SyncTable 3 Write Data 65 +1611 1 SyncTable 3 Write Data 66 +1612 1 SyncTable 3 Write Data 67 +1613 1 SyncTable 3 Write Data 68 +1614 1 SyncTable 3 Write Data 69 +1615 1 SyncTable 3 Write Data 70 +1616 1 SyncTable 3 Write Data 71 +1617 1 SyncTable 3 Write Data 72 +1618 1 SyncTable 4 ID 1 +1619 1 SyncTable 4 ID 2 +1620 1 SyncTable 4 ID 3 +1621 1 SyncTable 4 ID 4 +1622 1 SyncTable 4 ID 5 +1623 1 SyncTable 4 ID 6 +1624 2 SyncTable 4 Read Address 1 +1626 2 SyncTable 4 Read Address 2 +1628 2 SyncTable 4 Read Address 3 +1630 2 SyncTable 4 Read Address 4 +1632 2 SyncTable 4 Read Address 5 +1634 2 SyncTable 4 Read Address 6 +1636 2 SyncTable 4 Read Size 1 +1638 2 SyncTable 4 Read Size 2 +1640 2 SyncTable 4 Read Size 3 +1642 2 SyncTable 4 Read Size 4 +1644 2 SyncTable 4 Read Size 5 +1646 2 SyncTable 4 Read Size 6 +1648 2 SyncTable 4 Write Address 1 +1650 2 SyncTable 4 Write Address 2 +1652 2 SyncTable 4 Write Address 3 +1654 2 SyncTable 4 Write Address 4 +1656 2 SyncTable 4 Write Address 5 +1658 2 SyncTable 4 Write Address 6 +1660 2 SyncTable 4 Write Size 1 +1662 2 SyncTable 4 Write Size 2 +1664 2 SyncTable 4 Write Size 3 +1666 2 SyncTable 4 Write Size 4 +1668 2 SyncTable 4 Write Size 5 +1670 2 SyncTable 4 Write Size 6 +1672 1 SyncTable 4 Read Data 1 +1673 1 SyncTable 4 Read Data 2 +1674 1 SyncTable 4 Read Data 3 +1675 1 SyncTable 4 Read Data 4 +1676 1 SyncTable 4 Read Data 5 +1677 1 SyncTable 4 Read Data 6 +1678 1 SyncTable 4 Read Data 7 +1679 1 SyncTable 4 Read Data 8 +1680 1 SyncTable 4 Read Data 9 +1681 1 SyncTable 4 Read Data 10 +1682 1 SyncTable 4 Read Data 11 +1683 1 SyncTable 4 Read Data 12 +1684 1 SyncTable 4 Read Data 13 +1685 1 SyncTable 4 Read Data 14 +1686 1 SyncTable 4 Read Data 15 +1687 1 SyncTable 4 Read Data 16 +1688 1 SyncTable 4 Read Data 17 +1689 1 SyncTable 4 Read Data 18 +1690 1 SyncTable 4 Read Data 19 +1691 1 SyncTable 4 Read Data 20 +1692 1 SyncTable 4 Read Data 21 +1693 1 SyncTable 4 Read Data 22 +1694 1 SyncTable 4 Read Data 23 +1695 1 SyncTable 4 Read Data 24 +1696 1 SyncTable 4 Read Data 25 +1697 1 SyncTable 4 Read Data 26 +1698 1 SyncTable 4 Read Data 27 +1699 1 SyncTable 4 Read Data 28 +1700 1 SyncTable 4 Read Data 29 +1701 1 SyncTable 4 Read Data 30 +1702 1 SyncTable 4 Read Data 31 +1703 1 SyncTable 4 Read Data 32 +1704 1 SyncTable 4 Read Data 33 +1705 1 SyncTable 4 Read Data 34 +1706 1 SyncTable 4 Read Data 35 +1707 1 SyncTable 4 Read Data 36 +1708 1 SyncTable 4 Read Data 37 +1709 1 SyncTable 4 Read Data 38 +1710 1 SyncTable 4 Read Data 39 +1711 1 SyncTable 4 Read Data 40 +1712 1 SyncTable 4 Read Data 41 +1713 1 SyncTable 4 Read Data 42 +1714 1 SyncTable 4 Read Data 43 +1715 1 SyncTable 4 Read Data 44 +1716 1 SyncTable 4 Read Data 45 +1717 1 SyncTable 4 Read Data 46 +1718 1 SyncTable 4 Read Data 47 +1719 1 SyncTable 4 Read Data 48 +1720 1 SyncTable 4 Read Data 49 +1721 1 SyncTable 4 Read Data 50 +1722 1 SyncTable 4 Read Data 51 +1723 1 SyncTable 4 Read Data 52 +1724 1 SyncTable 4 Read Data 53 +1725 1 SyncTable 4 Read Data 54 +1726 1 SyncTable 4 Read Data 55 +1727 1 SyncTable 4 Read Data 56 +1728 1 SyncTable 4 Read Data 57 +1729 1 SyncTable 4 Read Data 58 +1730 1 SyncTable 4 Read Data 59 +1731 1 SyncTable 4 Read Data 60 +1732 1 SyncTable 4 Read Data 61 +1733 1 SyncTable 4 Read Data 62 +1734 1 SyncTable 4 Read Data 63 +1735 1 SyncTable 4 Read Data 64 +1736 1 SyncTable 4 Read Data 65 +1737 1 SyncTable 4 Read Data 66 +1738 1 SyncTable 4 Read Data 67 +1739 1 SyncTable 4 Read Data 68 +1740 1 SyncTable 4 Read Data 69 +1741 1 SyncTable 4 Read Data 70 +1742 1 SyncTable 4 Read Data 71 +1743 1 SyncTable 4 Read Data 72 +1744 1 SyncTable 4 Write Data 1 +1745 1 SyncTable 4 Write Data 2 +1746 1 SyncTable 4 Write Data 3 +1747 1 SyncTable 4 Write Data 4 +1748 1 SyncTable 4 Write Data 5 +1749 1 SyncTable 4 Write Data 6 +1750 1 SyncTable 4 Write Data 7 +1751 1 SyncTable 4 Write Data 8 +1752 1 SyncTable 4 Write Data 9 +1753 1 SyncTable 4 Write Data 10 +1754 1 SyncTable 4 Write Data 11 +1755 1 SyncTable 4 Write Data 12 +1756 1 SyncTable 4 Write Data 13 +1757 1 SyncTable 4 Write Data 14 +1758 1 SyncTable 4 Write Data 15 +1759 1 SyncTable 4 Write Data 16 +1760 1 SyncTable 4 Write Data 17 +1761 1 SyncTable 4 Write Data 18 +1762 1 SyncTable 4 Write Data 19 +1763 1 SyncTable 4 Write Data 20 +1764 1 SyncTable 4 Write Data 21 +1765 1 SyncTable 4 Write Data 22 +1766 1 SyncTable 4 Write Data 23 +1767 1 SyncTable 4 Write Data 24 +1768 1 SyncTable 4 Write Data 25 +1769 1 SyncTable 4 Write Data 26 +1770 1 SyncTable 4 Write Data 27 +1771 1 SyncTable 4 Write Data 28 +1772 1 SyncTable 4 Write Data 29 +1773 1 SyncTable 4 Write Data 30 +1774 1 SyncTable 4 Write Data 31 +1775 1 SyncTable 4 Write Data 32 +1776 1 SyncTable 4 Write Data 33 +1777 1 SyncTable 4 Write Data 34 +1778 1 SyncTable 4 Write Data 35 +1779 1 SyncTable 4 Write Data 36 +1780 1 SyncTable 4 Write Data 37 +1781 1 SyncTable 4 Write Data 38 +1782 1 SyncTable 4 Write Data 39 +1783 1 SyncTable 4 Write Data 40 +1784 1 SyncTable 4 Write Data 41 +1785 1 SyncTable 4 Write Data 42 +1786 1 SyncTable 4 Write Data 43 +1787 1 SyncTable 4 Write Data 44 +1788 1 SyncTable 4 Write Data 45 +1789 1 SyncTable 4 Write Data 46 +1790 1 SyncTable 4 Write Data 47 +1791 1 SyncTable 4 Write Data 48 +1792 1 SyncTable 4 Write Data 49 +1793 1 SyncTable 4 Write Data 50 +1794 1 SyncTable 4 Write Data 51 +1795 1 SyncTable 4 Write Data 52 +1796 1 SyncTable 4 Write Data 53 +1797 1 SyncTable 4 Write Data 54 +1798 1 SyncTable 4 Write Data 55 +1799 1 SyncTable 4 Write Data 56 +1800 1 SyncTable 4 Write Data 57 +1801 1 SyncTable 4 Write Data 58 +1802 1 SyncTable 4 Write Data 59 +1803 1 SyncTable 4 Write Data 60 +1804 1 SyncTable 4 Write Data 61 +1805 1 SyncTable 4 Write Data 62 +1806 1 SyncTable 4 Write Data 63 +1807 1 SyncTable 4 Write Data 64 +1808 1 SyncTable 4 Write Data 65 +1809 1 SyncTable 4 Write Data 66 +1810 1 SyncTable 4 Write Data 67 +1811 1 SyncTable 4 Write Data 68 +1812 1 SyncTable 4 Write Data 69 +1813 1 SyncTable 4 Write Data 70 +1814 1 SyncTable 4 Write Data 71 +1815 1 SyncTable 4 Write Data 72 +1816 1 SyncTable 5 ID 1 +1817 1 SyncTable 5 ID 2 +1818 1 SyncTable 5 ID 3 +1819 1 SyncTable 5 ID 4 +1820 1 SyncTable 5 ID 5 +1821 1 SyncTable 5 ID 6 +1822 2 SyncTable 5 Read Address 1 +1824 2 SyncTable 5 Read Address 2 +1826 2 SyncTable 5 Read Address 3 +1828 2 SyncTable 5 Read Address 4 +1830 2 SyncTable 5 Read Address 5 +1832 2 SyncTable 5 Read Address 6 +1834 2 SyncTable 5 Read Size 1 +1836 2 SyncTable 5 Read Size 2 +1838 2 SyncTable 5 Read Size 3 +1840 2 SyncTable 5 Read Size 4 +1842 2 SyncTable 5 Read Size 5 +1844 2 SyncTable 5 Read Size 6 +1846 2 SyncTable 5 Write Address 1 +1848 2 SyncTable 5 Write Address 2 +1850 2 SyncTable 5 Write Address 3 +1852 2 SyncTable 5 Write Address 4 +1854 2 SyncTable 5 Write Address 5 +1856 2 SyncTable 5 Write Address 6 +1858 2 SyncTable 5 Write Size 1 +1860 2 SyncTable 5 Write Size 2 +1862 2 SyncTable 5 Write Size 3 +1864 2 SyncTable 5 Write Size 4 +1866 2 SyncTable 5 Write Size 5 +1868 2 SyncTable 5 Write Size 6 +1870 1 SyncTable 5 Read Data 1 +1871 1 SyncTable 5 Read Data 2 +1872 1 SyncTable 5 Read Data 3 +1873 1 SyncTable 5 Read Data 4 +1874 1 SyncTable 5 Read Data 5 +1875 1 SyncTable 5 Read Data 6 +1876 1 SyncTable 5 Read Data 7 +1877 1 SyncTable 5 Read Data 8 +1878 1 SyncTable 5 Read Data 9 +1879 1 SyncTable 5 Read Data 10 +1880 1 SyncTable 5 Read Data 11 +1881 1 SyncTable 5 Read Data 12 +1882 1 SyncTable 5 Read Data 13 +1883 1 SyncTable 5 Read Data 14 +1884 1 SyncTable 5 Read Data 15 +1885 1 SyncTable 5 Read Data 16 +1886 1 SyncTable 5 Read Data 17 +1887 1 SyncTable 5 Read Data 18 +1888 1 SyncTable 5 Read Data 19 +1889 1 SyncTable 5 Read Data 20 +1890 1 SyncTable 5 Read Data 21 +1891 1 SyncTable 5 Read Data 22 +1892 1 SyncTable 5 Read Data 23 +1893 1 SyncTable 5 Read Data 24 +1894 1 SyncTable 5 Read Data 25 +1895 1 SyncTable 5 Read Data 26 +1896 1 SyncTable 5 Read Data 27 +1897 1 SyncTable 5 Read Data 28 +1898 1 SyncTable 5 Read Data 29 +1899 1 SyncTable 5 Read Data 30 +1900 1 SyncTable 5 Read Data 31 +1901 1 SyncTable 5 Read Data 32 +1902 1 SyncTable 5 Read Data 33 +1903 1 SyncTable 5 Read Data 34 +1904 1 SyncTable 5 Read Data 35 +1905 1 SyncTable 5 Read Data 36 +1906 1 SyncTable 5 Read Data 37 +1907 1 SyncTable 5 Read Data 38 +1908 1 SyncTable 5 Read Data 39 +1909 1 SyncTable 5 Read Data 40 +1910 1 SyncTable 5 Read Data 41 +1911 1 SyncTable 5 Read Data 42 +1912 1 SyncTable 5 Read Data 43 +1913 1 SyncTable 5 Read Data 44 +1914 1 SyncTable 5 Read Data 45 +1915 1 SyncTable 5 Read Data 46 +1916 1 SyncTable 5 Read Data 47 +1917 1 SyncTable 5 Read Data 48 +1918 1 SyncTable 5 Read Data 49 +1919 1 SyncTable 5 Read Data 50 +1920 1 SyncTable 5 Read Data 51 +1921 1 SyncTable 5 Read Data 52 +1922 1 SyncTable 5 Read Data 53 +1923 1 SyncTable 5 Read Data 54 +1924 1 SyncTable 5 Read Data 55 +1925 1 SyncTable 5 Read Data 56 +1926 1 SyncTable 5 Read Data 57 +1927 1 SyncTable 5 Read Data 58 +1928 1 SyncTable 5 Read Data 59 +1929 1 SyncTable 5 Read Data 60 +1930 1 SyncTable 5 Read Data 61 +1931 1 SyncTable 5 Read Data 62 +1932 1 SyncTable 5 Read Data 63 +1933 1 SyncTable 5 Read Data 64 +1934 1 SyncTable 5 Read Data 65 +1935 1 SyncTable 5 Read Data 66 +1936 1 SyncTable 5 Read Data 67 +1937 1 SyncTable 5 Read Data 68 +1938 1 SyncTable 5 Read Data 69 +1939 1 SyncTable 5 Read Data 70 +1940 1 SyncTable 5 Read Data 71 +1941 1 SyncTable 5 Read Data 72 +1942 1 SyncTable 5 Write Data 1 +1943 1 SyncTable 5 Write Data 2 +1944 1 SyncTable 5 Write Data 3 +1945 1 SyncTable 5 Write Data 4 +1946 1 SyncTable 5 Write Data 5 +1947 1 SyncTable 5 Write Data 6 +1948 1 SyncTable 5 Write Data 7 +1949 1 SyncTable 5 Write Data 8 +1950 1 SyncTable 5 Write Data 9 +1951 1 SyncTable 5 Write Data 10 +1952 1 SyncTable 5 Write Data 11 +1953 1 SyncTable 5 Write Data 12 +1954 1 SyncTable 5 Write Data 13 +1955 1 SyncTable 5 Write Data 14 +1956 1 SyncTable 5 Write Data 15 +1957 1 SyncTable 5 Write Data 16 +1958 1 SyncTable 5 Write Data 17 +1959 1 SyncTable 5 Write Data 18 +1960 1 SyncTable 5 Write Data 19 +1961 1 SyncTable 5 Write Data 20 +1962 1 SyncTable 5 Write Data 21 +1963 1 SyncTable 5 Write Data 22 +1964 1 SyncTable 5 Write Data 23 +1965 1 SyncTable 5 Write Data 24 +1966 1 SyncTable 5 Write Data 25 +1967 1 SyncTable 5 Write Data 26 +1968 1 SyncTable 5 Write Data 27 +1969 1 SyncTable 5 Write Data 28 +1970 1 SyncTable 5 Write Data 29 +1971 1 SyncTable 5 Write Data 30 +1972 1 SyncTable 5 Write Data 31 +1973 1 SyncTable 5 Write Data 32 +1974 1 SyncTable 5 Write Data 33 +1975 1 SyncTable 5 Write Data 34 +1976 1 SyncTable 5 Write Data 35 +1977 1 SyncTable 5 Write Data 36 +1978 1 SyncTable 5 Write Data 37 +1979 1 SyncTable 5 Write Data 38 +1980 1 SyncTable 5 Write Data 39 +1981 1 SyncTable 5 Write Data 40 +1982 1 SyncTable 5 Write Data 41 +1983 1 SyncTable 5 Write Data 42 +1984 1 SyncTable 5 Write Data 43 +1985 1 SyncTable 5 Write Data 44 +1986 1 SyncTable 5 Write Data 45 +1987 1 SyncTable 5 Write Data 46 +1988 1 SyncTable 5 Write Data 47 +1989 1 SyncTable 5 Write Data 48 +1990 1 SyncTable 5 Write Data 49 +1991 1 SyncTable 5 Write Data 50 +1992 1 SyncTable 5 Write Data 51 +1993 1 SyncTable 5 Write Data 52 +1994 1 SyncTable 5 Write Data 53 +1995 1 SyncTable 5 Write Data 54 +1996 1 SyncTable 5 Write Data 55 +1997 1 SyncTable 5 Write Data 56 +1998 1 SyncTable 5 Write Data 57 +1999 1 SyncTable 5 Write Data 58 +2000 1 SyncTable 5 Write Data 59 +2001 1 SyncTable 5 Write Data 60 +2002 1 SyncTable 5 Write Data 61 +2003 1 SyncTable 5 Write Data 62 +2004 1 SyncTable 5 Write Data 63 +2005 1 SyncTable 5 Write Data 64 +2006 1 SyncTable 5 Write Data 65 +2007 1 SyncTable 5 Write Data 66 +2008 1 SyncTable 5 Write Data 67 +2009 1 SyncTable 5 Write Data 68 +2010 1 SyncTable 5 Write Data 69 +2011 1 SyncTable 5 Write Data 70 +2012 1 SyncTable 5 Write Data 71 +2013 1 SyncTable 5 Write Data 72 diff --git a/scripts/cluster_model_files.py b/scripts/cluster_model_files.py index 357ed5a..e5c9bfd 100644 --- a/scripts/cluster_model_files.py +++ b/scripts/cluster_model_files.py @@ -59,12 +59,15 @@ def control_table_hash(control_table_str): # Print clusters of files with identical [control table] sections print('Clusters of files with identical [control table] sections:') -for file_list in hash_to_files.values(): - if len(file_list) > 1: - print(', '.join(file_list)) +clusters = [file_list for file_list in hash_to_files.values() if len(file_list) > 1] +clusters.sort(key=lambda x: x[0]) # Sort by first filename in each cluster +for file_list in clusters: + file_list.sort() # Sort files within each cluster + print(', '.join(file_list)) # Print files with unique [control table] sections print('\nFiles with unique [control table] sections:') -for file_list in hash_to_files.values(): - if len(file_list) == 1: - print(file_list[0]) +unique_files = [file_list[0] for file_list in hash_to_files.values() if len(file_list) == 1] +unique_files.sort() # Sort unique files alphabetically +for filename in unique_files: + print(filename) diff --git a/scripts/hx_synctable_model_generator.py b/scripts/hx_synctable_model_generator.py new file mode 100644 index 0000000..5f7d7a8 --- /dev/null +++ b/scripts/hx_synctable_model_generator.py @@ -0,0 +1,410 @@ +#!/usr/bin/env python3 +""" +SyncTable-based Dynamixel Model File Generator + +This script generates Dynamixel model files for hand finger joints and pressure sensors +based on the SyncTable concept. The hand models are virtual Dynamixels that use SyncTable +to read data from lower slave Dynamixels and store it in their control table. + +Key concepts: +- Finger actuators: read size 6, write size 4 +- Pressure sensors: read size 9, write size 0 +- SyncTable groups: e.g., SyncTable 1 has finger1,2,3,4 and pressure sensor1 +- Joint control table addresses start from SyncTable read/write areas in serial +""" + +import os +from typing import Dict, List, Tuple, Optional + + +class SyncTableModelGenerator: + """Generator for SyncTable-based Dynamixel model files.""" + + def __init__(self, output_dir: str = ".", hx_model_file: str = "../param/dxl_model/hx5_d20_rl.model"): + """Initialize the generator with output directory and hx model file.""" + self.output_dir = output_dir + self.hx_model_file = hx_model_file + self.synctable_base_addresses = {} + self.parse_hx_model_file() + + # Default configuration for hand models + self.finger_read_size = 6 + self.finger_write_size = 4 + self.pressure_read_size = 9 + self.pressure_write_size = 0 + + # Unit info constants + self.finger_unit_info = { + "Present Current": {"value": "1.0", "unit": "raw", "sign_type": "signed", "offset": "0.0"}, + "Present Velocity": {"value": "0.0239691227", "unit": "rad/s", "sign_type": "signed", "offset": "0.0"}, + "Present Position": {"value": "0.0015339807878856412", "unit": "rad", "sign_type": "signed", "offset": "-3.14159265359"}, + "Goal Current": {"value": "1.0", "unit": "raw", "sign_type": "signed", "offset": "0.0"}, + "Goal Position": {"value": "0.0015339807878856412", "unit": "rad", "sign_type": "signed", "offset": "-3.14159265359"} + } + + self.pressure_unit_info = { + f"Present Pressure {i}": {"value": "1.0", "unit": "raw", "sign_type": "unsigned", "offset": "0.0"} + for i in range(1, 10) # 9 pressure sensors + } + + def parse_hx_model_file(self) -> None: + """Parse the hx model file to extract SyncTable base addresses.""" + try: + with open(self.hx_model_file, 'r') as f: + lines = f.readlines() + + # Find SyncTable read and write data base addresses + for line in lines: + if "SyncTable" in line and "Read Data 1" in line: + parts = line.strip().split('\t') + if len(parts) >= 1: + address = int(parts[0]) + # Extract SyncTable number + synctable_num = int(line.split("SyncTable ")[1].split(" ")[0]) + if synctable_num not in self.synctable_base_addresses: + self.synctable_base_addresses[synctable_num] = {} + # Only set if not already set (to get the first occurrence) + if 'read_base' not in self.synctable_base_addresses[synctable_num]: + self.synctable_base_addresses[synctable_num]['read_base'] = address + + elif "SyncTable" in line and "Write Data 1" in line: + parts = line.strip().split('\t') + if len(parts) >= 1: + address = int(parts[0]) + # Extract SyncTable number + synctable_num = int(line.split("SyncTable ")[1].split(" ")[0]) + if synctable_num not in self.synctable_base_addresses: + self.synctable_base_addresses[synctable_num] = {} + # Only set if not already set (to get the first occurrence) + if 'write_base' not in self.synctable_base_addresses[synctable_num]: + self.synctable_base_addresses[synctable_num]['write_base'] = address + + print(f"Parsed {len(self.synctable_base_addresses)} SyncTables from {self.hx_model_file}") + for synctable_num, addresses in self.synctable_base_addresses.items(): + print(f" SyncTable {synctable_num}: read_base={addresses.get('read_base', 'N/A')}, write_base={addresses.get('write_base', 'N/A')}") + + except FileNotFoundError: + print(f"Warning: Could not find {self.hx_model_file}, using default addresses") + # Set default addresses if file not found + for i in range(1, 6): + self.synctable_base_addresses[i] = { + 'read_base': 1069 + (i-1) * 72, + 'write_base': 1141 + (i-1) * 72 + } + except Exception as e: + print(f"Error parsing {self.hx_model_file}: {e}") + # Set default addresses on error + for i in range(1, 6): + self.synctable_base_addresses[i] = { + 'read_base': 1069 + (i-1) * 72, + 'write_base': 1141 + (i-1) * 72 + } + + def calculate_synctable_addresses(self, synctable_num: int, + finger_joints: List[int], + pressure_sensors: List[int]) -> Tuple[List[int], List[int]]: + """ + Calculate addresses for SyncTable read and write data areas. + + Args: + synctable_num: SyncTable number (1, 2, 3, etc.) + finger_joints: List of finger joint numbers in this SyncTable + pressure_sensors: List of pressure sensor numbers in this SyncTable + + Returns: + Tuple of (read_addresses, write_addresses) + """ + # Get base addresses from parsed hx model file + if synctable_num not in self.synctable_base_addresses: + raise ValueError(f"SyncTable {synctable_num} not found in {self.hx_model_file}") + + base_read_addr = self.synctable_base_addresses[synctable_num]['read_base'] + base_write_addr = self.synctable_base_addresses[synctable_num]['write_base'] + + read_addresses = [] + write_addresses = [] + + # Calculate addresses for finger joints + current_read_addr = base_read_addr + current_write_addr = base_write_addr + + for joint_num in finger_joints: + # Each finger joint takes 6 bytes for read, 4 bytes for write + # For read addresses: 3 values of size 2 each = 6 bytes total + joint_read_addrs = [current_read_addr, current_read_addr + 2, current_read_addr + 4] + # For write addresses: 2 values of size 2 each = 4 bytes total + joint_write_addrs = [current_write_addr, current_write_addr + 2] + + read_addresses.extend(joint_read_addrs) + write_addresses.extend(joint_write_addrs) + + current_read_addr += self.finger_read_size + current_write_addr += self.finger_write_size + + # Calculate addresses for pressure sensors + for sensor_num in pressure_sensors: + # Each pressure sensor takes 9 bytes for read, 0 bytes for write + # For pressure sensors: 9 values of size 1 each = 9 bytes total + sensor_read_addrs = list(range(current_read_addr, current_read_addr + self.pressure_read_size)) + + read_addresses.extend(sensor_read_addrs) + # No write addresses for pressure sensors + + current_read_addr += self.pressure_read_size + + return read_addresses, write_addresses + + def generate_finger_joint_model(self, joint_number: int, + read_addresses: List[int], + write_addresses: List[int]) -> str: + """ + Generate a hand finger joint model file. + + Args: + joint_number: The joint number (1, 2, 3, etc.) + read_addresses: List of read addresses for this joint + write_addresses: List of write addresses for this joint + + Returns: + The model file content as a string + """ + # Generate unit info section + unit_info_lines = ["[unit info]", "Data Name value unit Sign Type Offset"] + for data_name, info in self.finger_unit_info.items(): + unit_info_lines.append(f"{data_name} {info['value']} {info['unit']} {info['sign_type']} {info['offset']}") + + # Generate control table section + control_table_lines = ["", "[control table]", "Address Size Data Name"] + + # Map read addresses to data names (present values only) + read_data_mapping = [ + ("Present Current", 2), + ("Present Velocity", 2), + ("Present Position", 2) + ] + + for i, (data_name, size) in enumerate(read_data_mapping): + if i < len(read_addresses): + control_table_lines.append(f"{read_addresses[i]} {size} {data_name}") + + # Map write addresses to data names (goal commands only) + write_data_mapping = [ + ("Goal Current", 2), + ("Goal Position", 2) + ] + + for i, (data_name, size) in enumerate(write_data_mapping): + if i < len(write_addresses): + control_table_lines.append(f"{write_addresses[i]} {size} {data_name}") + + content = "\n".join(unit_info_lines + control_table_lines) + "\n" + return content + + def generate_pressure_sensor_model(self, sensor_number: int, + read_addresses: List[int]) -> str: + """ + Generate a hand pressure sensor model file. + + Args: + sensor_number: The sensor number (5, 10, 15, 20, 25) + read_addresses: List of read addresses for this sensor + + Returns: + The model file content as a string + """ + # Generate unit info section + unit_info_lines = ["[unit info]", "Data Name value unit Sign Type Offset"] + for data_name, info in self.pressure_unit_info.items(): + unit_info_lines.append(f"{data_name} {info['value']} {info['unit']} {info['sign_type']} {info['offset']}") + + # Generate control table section + control_table_lines = ["", "[control table]", "Address Size Data Name"] + + for i in range(1, 10): # 9 pressure sensors + if i-1 < len(read_addresses): + control_table_lines.append(f"{read_addresses[i-1]} 1 Present Pressure {i}") + + content = "\n".join(unit_info_lines + control_table_lines) + "\n" + return content + + def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> None: + """ + Generate models based on SyncTable group configuration. + + Args: + synctable_groups: Dictionary mapping SyncTable numbers to their configurations + Example: { + 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, + 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, + ... + } + """ + for synctable_num, config in synctable_groups.items(): + finger_joints = config.get("finger_joints", []) + pressure_sensors = config.get("pressure_sensors", []) + + print(f"Processing SyncTable {synctable_num}: joints {finger_joints}, sensors {pressure_sensors}") + print(f" Will generate files: hx5_d20_r_synctable_{synctable_num}_device_1.model to hx5_d20_r_synctable_{synctable_num}_device_{len(finger_joints) + len(pressure_sensors)}.model") + + # Calculate addresses for this SyncTable + read_addresses, write_addresses = self.calculate_synctable_addresses( + synctable_num, finger_joints, pressure_sensors + ) + + # Generate finger joint models + current_read_idx = 0 + current_write_idx = 0 + device_num = 1 # Start from device 1 + + for joint_num in finger_joints: + # Each finger joint uses 3 read addresses and 2 write addresses + joint_read_addrs = read_addresses[current_read_idx:current_read_idx + 3] + joint_write_addrs = write_addresses[current_write_idx:current_write_idx + 2] + + content = self.generate_finger_joint_model(joint_num, joint_read_addrs, joint_write_addrs) + filename = f"hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model" + self.save_model_file(filename, content) + + current_read_idx += 3 # 3 read addresses per joint + current_write_idx += 2 # 2 write addresses per joint + device_num += 1 + + # Generate pressure sensor models + for sensor_num in pressure_sensors: + sensor_read_addrs = read_addresses[current_read_idx:current_read_idx + self.pressure_read_size] + + content = self.generate_pressure_sensor_model(sensor_num, sensor_read_addrs) + filename = f"hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model" + self.save_model_file(filename, content) + + current_read_idx += self.pressure_read_size + device_num += 1 + + def generate_default_hand_models(self) -> None: + """Generate default hand models with standard SyncTable configuration.""" + # Default configuration: 5 SyncTables with 4 finger joints + 1 pressure sensor each + synctable_groups = { + 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, + 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, + 3: {"finger_joints": [9, 10, 11, 12], "pressure_sensors": [3]}, + 4: {"finger_joints": [13, 14, 15, 16], "pressure_sensors": [4]}, + 5: {"finger_joints": [17, 18, 19, 20], "pressure_sensors": [5]}, + } + + self.generate_synctable_configuration(synctable_groups) + + def generate_custom_hand_models(self, custom_config: Dict) -> None: + """ + Generate custom hand models based on provided configuration. + + Args: + custom_config: Custom configuration dictionary + Example: { + "synctable_groups": { + 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [5]}, + 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [10]}, + }, + "finger_read_size": 6, + "finger_write_size": 4, + "pressure_read_size": 9, + "pressure_write_size": 0 + } + """ + # Update configuration if provided + if "finger_read_size" in custom_config: + self.finger_read_size = custom_config["finger_read_size"] + if "finger_write_size" in custom_config: + self.finger_write_size = custom_config["finger_write_size"] + if "pressure_read_size" in custom_config: + self.pressure_read_size = custom_config["pressure_read_size"] + if "pressure_write_size" in custom_config: + self.pressure_write_size = custom_config["pressure_write_size"] + + synctable_groups = custom_config.get("synctable_groups", {}) + self.generate_synctable_configuration(synctable_groups) + + def save_model_file(self, filename: str, content: str) -> None: + """Save model content to a file.""" + filepath = os.path.join(self.output_dir, filename) + with open(filepath, 'w') as f: + f.write(content) + print(f"Generated: {filepath}") + + def generate_simple_hand_models(self, num_synctables: int = 5, joints_per_synctable: int = 4) -> None: + """ + Generate hand models with a simple, sequential configuration. + + Args: + num_synctables: Number of SyncTables to generate + joints_per_synctable: Number of finger joints per SyncTable + """ + synctable_groups = {} + + for i in range(1, num_synctables + 1): + # Calculate joint numbers for this SyncTable + start_joint = (i - 1) * joints_per_synctable + 1 + end_joint = i * joints_per_synctable + finger_joints = list(range(start_joint, end_joint + 1)) + + # Each SyncTable gets one pressure sensor with the same number + pressure_sensors = [i] + + synctable_groups[i] = { + "finger_joints": finger_joints, + "pressure_sensors": pressure_sensors + } + + print(f"Generated configuration for {num_synctables} SyncTables:") + for synctable_num, config in synctable_groups.items(): + print(f" SyncTable {synctable_num}: joints {config['finger_joints']}, sensor {config['pressure_sensors']}") + + self.generate_synctable_configuration(synctable_groups) + + def analyze_existing_models(self, model_dir: str = "../param/dxl_model") -> Dict: + """ + Analyze existing hand models to extract SyncTable configuration. + + Args: + model_dir: Directory containing existing model files + + Returns: + Dictionary containing extracted configuration + """ + # This would analyze existing files to extract the SyncTable mapping + # For now, return a placeholder + return { + "message": "Analysis functionality would extract SyncTable configuration from existing models" + } + + +def main(): + """Main function to demonstrate usage.""" + # You can specify a different hx model file if needed + generator = SyncTableModelGenerator(output_dir="../param/dxl_model", hx_model_file="../param/dxl_model/hx5_d20_rl.model") + + print("SyncTable-based Dynamixel Model Generator") + print("=" * 50) + + # Example 1: Generate simple hand models (recommended) + print("\n1. Generating simple hand models...") + generator.generate_simple_hand_models(num_synctables=5, joints_per_synctable=4) + + # # Example 2: Generate custom models + # print("\n2. Generating custom models...") + # custom_config = { + # "synctable_groups": { + # 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, + # 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, + # }, + # "finger_read_size": 6, + # "finger_write_size": 4, + # "pressure_read_size": 9, + # "pressure_write_size": 0 + # } + # generator.generate_custom_hand_models(custom_config) + + print("\nModel generation complete!") + + +if __name__ == "__main__": + main() diff --git a/scripts/xml_to_model_parser.py b/scripts/xml_to_model_parser.py new file mode 100644 index 0000000..03e36f4 --- /dev/null +++ b/scripts/xml_to_model_parser.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +""" +XML to Dynamixel Model File Parser (Generic Version) + +This script parses a Dynamixel XML configuration file and generates +a corresponding model file using a generic approach without hardcoded categories. +""" + +import xml.etree.ElementTree as ET +import sys +import os +from typing import List, Dict, Tuple + +def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: + """ + Parse XML file and generate model file using a generic approach. + + Args: + xml_file_path: Path to input XML file + output_file_path: Path to output model file + """ + try: + # Parse XML file + tree = ET.parse(xml_file_path) + root = tree.getroot() + + # Extract device information + device_name = root.get('Name', 'Unknown') + model_number = root.get('ModelNumber', '0') + + print(f"Processing device: {device_name} (Model: {model_number})") + + # Collect all items + items = [] + + # Process ControlItems section + control_items = root.find('ControlItems') + if control_items is not None: + # Process direct Item elements (not in categories) + for item in control_items.findall('Item'): + # Skip hidden items + if item.get('Hidden', '0') == '1': + continue + + address = item.get('Address', '0') + length = item.get('Length', '1') + name = item.get('Name', 'Unknown') + + # Convert address to integer for sorting + try: + addr_int = int(address) + items.append((addr_int, int(length), name)) + except ValueError: + print(f"Warning: Invalid address '{address}' for item '{name}'") + continue + + # Process Category elements + for category in control_items.findall('Category'): + category_name = category.get('Name', 'Unknown') + + # Process items within this category + for item in category.findall('Item'): + # Skip hidden items + if item.get('Hidden', '0') == '1': + continue + + address = item.get('Address', '0') + length = item.get('Length', '1') + name_template = item.get('Name', 'Unknown') + continue_range = item.get('Continue', '') + + if continue_range: + try: + start, end = map(int, continue_range.split('~')) + + # Special handling for Indirect Address and Data (only include first entry) + if category_name in ["Indirect Address", "Indirect Data"]: + if start == 1: + try: + addr_int = int(address) + item_name = f"{category_name} {start}" + items.append((addr_int, int(length), item_name)) + except ValueError: + print(f"Warning: Invalid address '{address}' for item '{item_name}'") + continue + else: + # Generic handling for all other categories + for i in range(start, end + 1): + try: + # Calculate the correct address for this entry + base_addr = int(address) + # For Continue entries, increment address by (i-1) * length + if i > 1: + addr_int = base_addr + (i - 1) * int(length) + else: + addr_int = base_addr + + # Generate item name using category name + template replacement + if name_template == "{0}": + # If template is just {0}, use category name + number + item_name = f"{category_name} {i}" + else: + # Otherwise use template replacement + item_name = name_template.replace('{0}', str(i)) + items.append((addr_int, int(length), item_name)) + except ValueError: + print(f"Warning: Invalid address '{address}' for item '{item_name}'") + continue + except (ValueError, IndexError): + print(f"Warning: Invalid continue range '{continue_range}' for category '{category_name}'") + continue + else: + # Single item + try: + addr_int = int(address) + items.append((addr_int, int(length), name_template)) + except ValueError: + print(f"Warning: Invalid address '{address}' for item '{name_template}'") + continue + + # Add special entries that are in the reference but not in XML + special_entries = [ + (122, 2, "Indirect Address Read"), + (634, 1, "Indirect Data Read"), + (452, 2, "Indirect Address Write"), + (799, 1, "Indirect Data Write") + ] + + for addr, size, name in special_entries: + items.append((addr, size, name)) + + # Remove duplicates while preserving order (based on address and name) + unique_items = [] + seen = set() + for item in items: + # Use a tuple of (address, name) to identify unique items + item_identifier = (item[0], item[2]) + if item_identifier not in seen: + unique_items.append(item) + seen.add(item_identifier) + + # Sort items by address + unique_items.sort(key=lambda x: x[0]) + + # Write to output file + with open(output_file_path, 'w') as f: + f.write("[control table]\n") + f.write("Address\tSize\tData Name\n") + for address, size, name in unique_items: + f.write(f"{address}\t{size}\t{name}\n") + + print(f"Successfully generated model file: {output_file_path}") + print(f"Total items processed: {len(unique_items)}") + + except ET.ParseError as e: + print(f"Error parsing XML file: {e}") + sys.exit(1) + except FileNotFoundError: + print(f"Error: XML file not found: {xml_file_path}") + sys.exit(1) + except Exception as e: + print(f"Error: {e}") + sys.exit(1) + +def main(): + """Main function to handle command line arguments and execute parsing.""" + # Default paths + default_xml_file = "HX5-D20-RL.xml" + default_model_files = [ + "../param/dxl_model/hx5_d20_rl.model", + "../param/dxl_model/hx5_d20_rr.model" + ] + + # Use command line arguments if provided, otherwise use defaults + if len(sys.argv) == 3: + xml_file = sys.argv[1] + model_file = sys.argv[2] + elif len(sys.argv) == 1: + xml_file = default_xml_file + print(f"Using default input: {xml_file}") + print(f"Using default outputs: {default_model_files}") + + # Process each default model file + for model_file in default_model_files: + # Create output directory if it doesn't exist + output_dir = os.path.dirname(model_file) + if output_dir and not os.path.exists(output_dir): + os.makedirs(output_dir) + + # Parse XML and generate model file + parse_xml_to_model(xml_file, model_file) + return + else: + print("Usage: python xml_to_model_parser_generic.py [input_xml_file] [output_model_file]") + print("If no arguments provided, uses defaults:") + print(f" Input: {default_xml_file}") + print(f" Outputs: {default_model_files}") + sys.exit(1) + + # Check if input file exists + if not os.path.exists(xml_file): + print(f"Error: Input file '{xml_file}' does not exist") + sys.exit(1) + + # Create output directory if it doesn't exist + output_dir = os.path.dirname(model_file) + if output_dir and not os.path.exists(output_dir): + os.makedirs(output_dir) + + # Parse XML and generate model file + parse_xml_to_model(xml_file, model_file) + +if __name__ == "__main__": + main() diff --git a/src/dynamixel/dynamixel_info.cpp b/src/dynamixel/dynamixel_info.cpp index d15b974..29bc55a 100644 --- a/src/dynamixel/dynamixel_info.cpp +++ b/src/dynamixel/dynamixel_info.cpp @@ -70,8 +70,11 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model firmware_version); path += selected_model_name; } else { - fprintf(stderr, "[ERROR] CANNOT FIND THE DXL MODEL FROM FILE LIST.\n"); - throw std::runtime_error("Cannot find the DXL model from file list"); + fprintf(stderr, "\n"); + std::string error_msg = + std::string("Cannot find the DXL model from file list (model_num: ") + + std::to_string(model_num) + ", model_name: " + GetModelName(model_num) + ")"; + throw std::runtime_error(error_msg); } std::ifstream open_file(path); From 1c8563be9bf7d963644aceb3d9bedf57a6127b7d Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Thu, 16 Oct 2025 16:25:51 +0900 Subject: [PATCH 04/26] Update Dynamixel model file names to include 'd20_r' prefix for synchronization tables --- param/dxl_model/dynamixel.model | 50 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index c88b3ec..473f011 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -5,31 +5,31 @@ Number Name 231 omy_end_rh_p12_rn.model 260 hx5_d20_rr.model 261 hx5_d20_rl.model -6001 hx5_synctable_3_device_1.model -6002 hx5_synctable_3_device_2.model -6003 hx5_synctable_3_device_3.model -6004 hx5_synctable_3_device_4.model -6005 hx5_synctable_3_device_5.model -6006 hx5_synctable_5_device_1.model -6007 hx5_synctable_5_device_2.model -6008 hx5_synctable_5_device_2.model -6009 hx5_synctable_5_device_3.model -6010 hx5_synctable_5_device_4.model -6011 hx5_synctable_2_device_1.model -6012 hx5_synctable_2_device_2.model -6013 hx5_synctable_2_device_3.model -6014 hx5_synctable_2_device_4.model -6015 hx5_synctable_2_device_5.model -6016 hx5_synctable_4_device_1.model -6017 hx5_synctable_4_device_2.model -6018 hx5_synctable_4_device_3.model -6019 hx5_synctable_4_device_4.model -6020 hx5_synctable_4_device_5.model -6021 hx5_synctable_1_device_1.model -6022 hx5_synctable_1_device_2.model -6023 hx5_synctable_1_device_3.model -6024 hx5_synctable_1_device_4.model -6025 hx5_synctable_1_device_5.model +6001 hx5_d20_r_synctable_3_device_1.model +6002 hx5_d20_r_synctable_3_device_2.model +6003 hx5_d20_r_synctable_3_device_3.model +6004 hx5_d20_r_synctable_3_device_4.model +6005 hx5_d20_r_synctable_3_device_5.model +6006 hx5_d20_r_synctable_5_device_1.model +6007 hx5_d20_r_synctable_5_device_2.model +6008 hx5_d20_r_synctable_5_device_2.model +6009 hx5_d20_r_synctable_5_device_3.model +6010 hx5_d20_r_synctable_5_device_4.model +6011 hx5_d20_r_synctable_2_device_1.model +6012 hx5_d20_r_synctable_2_device_2.model +6013 hx5_d20_r_synctable_2_device_3.model +6014 hx5_d20_r_synctable_2_device_4.model +6015 hx5_d20_r_synctable_2_device_5.model +6016 hx5_d20_r_synctable_4_device_1.model +6017 hx5_d20_r_synctable_4_device_2.model +6018 hx5_d20_r_synctable_4_device_3.model +6019 hx5_d20_r_synctable_4_device_4.model +6020 hx5_d20_r_synctable_4_device_5.model +6021 hx5_d20_r_synctable_1_device_1.model +6022 hx5_d20_r_synctable_1_device_2.model +6023 hx5_d20_r_synctable_1_device_3.model +6024 hx5_d20_r_synctable_1_device_4.model +6025 hx5_d20_r_synctable_1_device_5.model 311 mx_64.model 321 mx_106.model 350 xl320.model From d09ef999431db91cdb24b98a8842d471da9f6fa8 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Thu, 16 Oct 2025 16:27:53 +0900 Subject: [PATCH 05/26] Update Dynamixel model file names for synchronization tables to correct device associations --- param/dxl_model/dynamixel.model | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index 473f011..fdfda11 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -12,9 +12,9 @@ Number Name 6005 hx5_d20_r_synctable_3_device_5.model 6006 hx5_d20_r_synctable_5_device_1.model 6007 hx5_d20_r_synctable_5_device_2.model -6008 hx5_d20_r_synctable_5_device_2.model -6009 hx5_d20_r_synctable_5_device_3.model -6010 hx5_d20_r_synctable_5_device_4.model +6008 hx5_d20_r_synctable_5_device_3.model +6009 hx5_d20_r_synctable_5_device_4.model +6010 hx5_d20_r_synctable_5_device_5.model 6011 hx5_d20_r_synctable_2_device_1.model 6012 hx5_d20_r_synctable_2_device_2.model 6013 hx5_d20_r_synctable_2_device_3.model From 9574a835f965dd0710aa355fe509896d972fbb08 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Mon, 3 Nov 2025 21:42:25 +0900 Subject: [PATCH 06/26] Update Dynamixel model files to include unit info for position data --- param/dxl_model/2xc430_w250.model | 16 +++++----------- param/dxl_model/2xl430_w250.model | 16 +++++----------- param/dxl_model/ffw_sg2_drive_1.model | 20 +++++++------------- param/dxl_model/ffw_sg2_drive_2.model | 20 +++++++------------- param/dxl_model/ffw_sg2_drive_3.model | 20 +++++++------------- param/dxl_model/ffw_sg2_steer_1.model | 20 +++++++------------- param/dxl_model/ffw_sg2_steer_2.model | 20 +++++++------------- param/dxl_model/ffw_sg2_steer_3.model | 20 +++++++------------- param/dxl_model/mx_106.model | 20 +++++++------------- param/dxl_model/mx_28.model | 16 +++++----------- param/dxl_model/mx_64.model | 20 +++++++------------- param/dxl_model/xc330_m181.model | 20 +++++++------------- param/dxl_model/xc330_m181_fw52.model | 20 +++++++------------- param/dxl_model/xc330_m288.model | 20 +++++++------------- param/dxl_model/xc330_m288_fw52.model | 20 +++++++------------- param/dxl_model/xc330_t181.model | 20 +++++++------------- param/dxl_model/xc330_t181_fw52.model | 20 +++++++------------- param/dxl_model/xc330_t288.model | 20 +++++++------------- param/dxl_model/xc330_t288_fw52.model | 20 +++++++------------- param/dxl_model/xc335_t332.model | 20 +++++++------------- param/dxl_model/xc430_w150.model | 16 +++++----------- param/dxl_model/xc430_w240.model | 16 +++++----------- param/dxl_model/xd430_t210.model | 20 +++++++------------- param/dxl_model/xd430_t350.model | 20 +++++++------------- param/dxl_model/xd540_t150.model | 20 +++++++------------- param/dxl_model/xd540_t270.model | 20 +++++++------------- param/dxl_model/xh430_v210.model | 20 +++++++------------- param/dxl_model/xh430_v350.model | 20 +++++++------------- param/dxl_model/xh430_w210.model | 20 +++++++------------- param/dxl_model/xh430_w350.model | 20 +++++++------------- param/dxl_model/xh540_v150.model | 20 +++++++------------- param/dxl_model/xh540_v270.model | 20 +++++++------------- param/dxl_model/xh540_w150.model | 20 +++++++------------- param/dxl_model/xh540_w270.model | 20 +++++++------------- param/dxl_model/xl320.model | 16 +++++----------- param/dxl_model/xl330_m077.model | 20 +++++++------------- param/dxl_model/xl330_m077_fw52.model | 20 +++++++------------- param/dxl_model/xl330_m288.model | 20 +++++++------------- param/dxl_model/xl330_m288_fw52.model | 20 +++++++------------- param/dxl_model/xl430_w250.model | 16 +++++----------- param/dxl_model/xm430_w210.model | 20 +++++++------------- param/dxl_model/xm430_w350.model | 20 +++++++------------- param/dxl_model/xm540_w150.model | 20 +++++++------------- param/dxl_model/xm540_w270.model | 20 +++++++------------- param/dxl_model/xw430_t200.model | 20 +++++++------------- param/dxl_model/xw430_t333.model | 20 +++++++------------- param/dxl_model/xw540_h260.model | 20 +++++++------------- param/dxl_model/xw540_t140.model | 20 +++++++------------- param/dxl_model/xw540_t260.model | 20 +++++++------------- param/dxl_model/ym070_210_a051.model | 20 +++++++------------- param/dxl_model/ym070_210_a099.model | 20 +++++++------------- param/dxl_model/ym070_210_b001.model | 20 +++++++------------- param/dxl_model/ym070_210_m001.model | 20 +++++++------------- param/dxl_model/ym070_210_r051.model | 20 +++++++------------- param/dxl_model/ym070_210_r099.model | 20 +++++++------------- param/dxl_model/ym080_230_a051.model | 20 +++++++------------- param/dxl_model/ym080_230_a099.model | 20 +++++++------------- param/dxl_model/ym080_230_b001.model | 18 ++++++------------ param/dxl_model/ym080_230_m001.model | 20 +++++++------------- param/dxl_model/ym080_230_r051.model | 20 +++++++------------- param/dxl_model/ym080_230_r099.model | 20 +++++++------------- 61 files changed, 412 insertions(+), 778 deletions(-) diff --git a/param/dxl_model/2xc430_w250.model b/param/dxl_model/2xc430_w250.model index 4144035..8f6ce17 100644 --- a/param/dxl_model/2xc430_w250.model +++ b/param/dxl_model/2xc430_w250.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/2xl430_w250.model b/param/dxl_model/2xl430_w250.model index 4144035..8f6ce17 100644 --- a/param/dxl_model/2xl430_w250.model +++ b/param/dxl_model/2xl430_w250.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_drive_1.model b/param/dxl_model/ffw_sg2_drive_1.model index d14fdc1..af2f488 100644 --- a/param/dxl_model/ffw_sg2_drive_1.model +++ b/param/dxl_model/ffw_sg2_drive_1.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_drive_2.model b/param/dxl_model/ffw_sg2_drive_2.model index 1c298c2..c9e704a 100644 --- a/param/dxl_model/ffw_sg2_drive_2.model +++ b/param/dxl_model/ffw_sg2_drive_2.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_drive_3.model b/param/dxl_model/ffw_sg2_drive_3.model index 15e51e7..4af11ba 100644 --- a/param/dxl_model/ffw_sg2_drive_3.model +++ b/param/dxl_model/ffw_sg2_drive_3.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_steer_1.model b/param/dxl_model/ffw_sg2_steer_1.model index 5770dcc..fea752b 100644 --- a/param/dxl_model/ffw_sg2_steer_1.model +++ b/param/dxl_model/ffw_sg2_steer_1.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_steer_2.model b/param/dxl_model/ffw_sg2_steer_2.model index a1656da..8288119 100644 --- a/param/dxl_model/ffw_sg2_steer_2.model +++ b/param/dxl_model/ffw_sg2_steer_2.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ffw_sg2_steer_3.model b/param/dxl_model/ffw_sg2_steer_3.model index 6873ea1..22a9c8b 100644 --- a/param/dxl_model/ffw_sg2_steer_3.model +++ b/param/dxl_model/ffw_sg2_steer_3.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/mx_106.model b/param/dxl_model/mx_106.model index 122eb65..7404a8a 100644 --- a/param/dxl_model/mx_106.model +++ b/param/dxl_model/mx_106.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/mx_28.model b/param/dxl_model/mx_28.model index d8d8ca4..ef6755a 100644 --- a/param/dxl_model/mx_28.model +++ b/param/dxl_model/mx_28.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/mx_64.model b/param/dxl_model/mx_64.model index 122eb65..7404a8a 100644 --- a/param/dxl_model/mx_64.model +++ b/param/dxl_model/mx_64.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_m181.model b/param/dxl_model/xc330_m181.model index d5e212a..e5617bf 100644 --- a/param/dxl_model/xc330_m181.model +++ b/param/dxl_model/xc330_m181.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_m181_fw52.model b/param/dxl_model/xc330_m181_fw52.model index 1cb5bd1..0b987e7 100644 --- a/param/dxl_model/xc330_m181_fw52.model +++ b/param/dxl_model/xc330_m181_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_m288.model b/param/dxl_model/xc330_m288.model index d5e212a..e5617bf 100644 --- a/param/dxl_model/xc330_m288.model +++ b/param/dxl_model/xc330_m288.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_m288_fw52.model b/param/dxl_model/xc330_m288_fw52.model index 1cb5bd1..0b987e7 100644 --- a/param/dxl_model/xc330_m288_fw52.model +++ b/param/dxl_model/xc330_m288_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_t181.model b/param/dxl_model/xc330_t181.model index 4292b6a..b7e1008 100644 --- a/param/dxl_model/xc330_t181.model +++ b/param/dxl_model/xc330_t181.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 0.0006709470296015791 N/m signed -Goal Current 0.0006709470296015791 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 0.0006709470296015791 N/m signed 0.0 +Goal Current 0.0006709470296015791 N/m signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_t181_fw52.model b/param/dxl_model/xc330_t181_fw52.model index b607acb..f6de2e4 100644 --- a/param/dxl_model/xc330_t181_fw52.model +++ b/param/dxl_model/xc330_t181_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 0.0006709470296015791 N/m signed -Goal Current 0.0006709470296015791 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 0.0006709470296015791 N/m signed 0.0 +Goal Current 0.0006709470296015791 N/m signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_t288.model b/param/dxl_model/xc330_t288.model index 5a60032..aefe037 100644 --- a/param/dxl_model/xc330_t288.model +++ b/param/dxl_model/xc330_t288.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 0.0009674796739867748 N/m signed -Goal Current 0.0009674796739867748 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 0.0009674796739867748 N/m signed 0.0 +Goal Current 0.0009674796739867748 N/m signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc330_t288_fw52.model b/param/dxl_model/xc330_t288_fw52.model index 73cbfb5..7313d1d 100644 --- a/param/dxl_model/xc330_t288_fw52.model +++ b/param/dxl_model/xc330_t288_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 0.0009674796739867748 N/m signed -Goal Current 0.0009674796739867748 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 0.0009674796739867748 N/m signed 0.0 +Goal Current 0.0009674796739867748 N/m signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc335_t332.model b/param/dxl_model/xc335_t332.model index dc255e9..d21a3b0 100644 --- a/param/dxl_model/xc335_t332.model +++ b/param/dxl_model/xc335_t332.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name diff --git a/param/dxl_model/xc430_w150.model b/param/dxl_model/xc430_w150.model index 4144035..8f6ce17 100644 --- a/param/dxl_model/xc430_w150.model +++ b/param/dxl_model/xc430_w150.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xc430_w240.model b/param/dxl_model/xc430_w240.model index 4144035..8f6ce17 100644 --- a/param/dxl_model/xc430_w240.model +++ b/param/dxl_model/xc430_w240.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xd430_t210.model b/param/dxl_model/xd430_t210.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xd430_t210.model +++ b/param/dxl_model/xd430_t210.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xd430_t350.model b/param/dxl_model/xd430_t350.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xd430_t350.model +++ b/param/dxl_model/xd430_t350.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xd540_t150.model b/param/dxl_model/xd540_t150.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xd540_t150.model +++ b/param/dxl_model/xd540_t150.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xd540_t270.model b/param/dxl_model/xd540_t270.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xd540_t270.model +++ b/param/dxl_model/xd540_t270.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh430_v210.model b/param/dxl_model/xh430_v210.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xh430_v210.model +++ b/param/dxl_model/xh430_v210.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh430_v350.model b/param/dxl_model/xh430_v350.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xh430_v350.model +++ b/param/dxl_model/xh430_v350.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh430_w210.model b/param/dxl_model/xh430_w210.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xh430_w210.model +++ b/param/dxl_model/xh430_w210.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh430_w350.model b/param/dxl_model/xh430_w350.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xh430_w350.model +++ b/param/dxl_model/xh430_w350.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh540_v150.model b/param/dxl_model/xh540_v150.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xh540_v150.model +++ b/param/dxl_model/xh540_v150.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh540_v270.model b/param/dxl_model/xh540_v270.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xh540_v270.model +++ b/param/dxl_model/xh540_v270.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh540_w150.model b/param/dxl_model/xh540_w150.model index c817a81..c805140 100644 --- a/param/dxl_model/xh540_w150.model +++ b/param/dxl_model/xh540_w150.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 0.0045 N/m signed -Goal Current 0.0045 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 0.0045 N/m signed 0.0 +Goal Current 0.0045 N/m signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xh540_w270.model b/param/dxl_model/xh540_w270.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xh540_w270.model +++ b/param/dxl_model/xh540_w270.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xl320.model b/param/dxl_model/xl320.model index df5914a..4c0cb5e 100644 --- a/param/dxl_model/xl320.model +++ b/param/dxl_model/xl320.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0116228475 rad/s signed -Goal Velocity 0.0116228475 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0116228475 rad/s signed 0.0 +Goal Velocity 0.0116228475 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name diff --git a/param/dxl_model/xl330_m077.model b/param/dxl_model/xl330_m077.model index d5e212a..e5617bf 100644 --- a/param/dxl_model/xl330_m077.model +++ b/param/dxl_model/xl330_m077.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xl330_m077_fw52.model b/param/dxl_model/xl330_m077_fw52.model index 1cb5bd1..0b987e7 100644 --- a/param/dxl_model/xl330_m077_fw52.model +++ b/param/dxl_model/xl330_m077_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xl330_m288.model b/param/dxl_model/xl330_m288.model index d5e212a..e5617bf 100644 --- a/param/dxl_model/xl330_m288.model +++ b/param/dxl_model/xl330_m288.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xl330_m288_fw52.model b/param/dxl_model/xl330_m288_fw52.model index 1cb5bd1..0b987e7 100644 --- a/param/dxl_model/xl330_m288_fw52.model +++ b/param/dxl_model/xl330_m288_fw52.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xl430_w250.model b/param/dxl_model/xl430_w250.model index 4144035..8f6ce17 100644 --- a/param/dxl_model/xl430_w250.model +++ b/param/dxl_model/xl430_w250.model @@ -1,15 +1,9 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xm430_w210.model b/param/dxl_model/xm430_w210.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xm430_w210.model +++ b/param/dxl_model/xm430_w210.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xm430_w350.model b/param/dxl_model/xm430_w350.model index d2a2f76..71652a3 100644 --- a/param/dxl_model/xm430_w350.model +++ b/param/dxl_model/xm430_w350.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xm540_w150.model b/param/dxl_model/xm540_w150.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xm540_w150.model +++ b/param/dxl_model/xm540_w150.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xm540_w270.model b/param/dxl_model/xm540_w270.model index 1748bbb..97756de 100644 --- a/param/dxl_model/xm540_w270.model +++ b/param/dxl_model/xm540_w270.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xw430_t200.model b/param/dxl_model/xw430_t200.model index 5a03da7..002c09e 100644 --- a/param/dxl_model/xw430_t200.model +++ b/param/dxl_model/xw430_t200.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xw430_t333.model b/param/dxl_model/xw430_t333.model index 5a03da7..002c09e 100644 --- a/param/dxl_model/xw430_t333.model +++ b/param/dxl_model/xw430_t333.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xw540_h260.model b/param/dxl_model/xw540_h260.model index 5a03da7..002c09e 100644 --- a/param/dxl_model/xw540_h260.model +++ b/param/dxl_model/xw540_h260.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xw540_t140.model b/param/dxl_model/xw540_t140.model index 5a03da7..002c09e 100644 --- a/param/dxl_model/xw540_t140.model +++ b/param/dxl_model/xw540_t140.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/xw540_t260.model b/param/dxl_model/xw540_t260.model index 5a03da7..002c09e 100644 --- a/param/dxl_model/xw540_t260.model +++ b/param/dxl_model/xw540_t260.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 2048 -value_of_max_radian_position 4095 -value_of_min_radian_position 0 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0239691227 rad/s signed -Goal Velocity 0.0239691227 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0239691227 rad/s signed 0.0 +Goal Velocity 0.0239691227 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_a051.model b/param/dxl_model/ym070_210_a051.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym070_210_a051.model +++ b/param/dxl_model/ym070_210_a051.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_a099.model b/param/dxl_model/ym070_210_a099.model index 71f5f57..4442319 100644 --- a/param/dxl_model/ym070_210_a099.model +++ b/param/dxl_model/ym070_210_a099.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 0.04 N/m signed -Goal Current 0.04 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 0.04 N/m signed 0.0 +Goal Current 0.04 N/m signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_b001.model b/param/dxl_model/ym070_210_b001.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym070_210_b001.model +++ b/param/dxl_model/ym070_210_b001.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_m001.model b/param/dxl_model/ym070_210_m001.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym070_210_m001.model +++ b/param/dxl_model/ym070_210_m001.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_r051.model b/param/dxl_model/ym070_210_r051.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym070_210_r051.model +++ b/param/dxl_model/ym070_210_r051.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym070_210_r099.model b/param/dxl_model/ym070_210_r099.model index 71f5f57..4442319 100644 --- a/param/dxl_model/ym070_210_r099.model +++ b/param/dxl_model/ym070_210_r099.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 0.04 N/m signed -Goal Current 0.04 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 0.04 N/m signed 0.0 +Goal Current 0.04 N/m signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_a051.model b/param/dxl_model/ym080_230_a051.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym080_230_a051.model +++ b/param/dxl_model/ym080_230_a051.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_a099.model b/param/dxl_model/ym080_230_a099.model index ef5c469..ef8dbaa 100644 --- a/param/dxl_model/ym080_230_a099.model +++ b/param/dxl_model/ym080_230_a099.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 0.07692307692 N/m signed -Goal Current 0.07692307692 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 0.07692307692 N/m signed 0.0 +Goal Current 0.07692307692 N/m signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_b001.model b/param/dxl_model/ym080_230_b001.model index 342fd9d..7b9dff7 100644 --- a/param/dxl_model/ym080_230_b001.model +++ b/param/dxl_model/ym080_230_b001.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type +Data Name value unit Sign Type Offset Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_m001.model b/param/dxl_model/ym080_230_m001.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym080_230_m001.model +++ b/param/dxl_model/ym080_230_m001.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_r051.model b/param/dxl_model/ym080_230_r051.model index 342fd9d..da2a869 100644 --- a/param/dxl_model/ym080_230_r051.model +++ b/param/dxl_model/ym080_230_r051.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] diff --git a/param/dxl_model/ym080_230_r099.model b/param/dxl_model/ym080_230_r099.model index ef5c469..ef8dbaa 100644 --- a/param/dxl_model/ym080_230_r099.model +++ b/param/dxl_model/ym080_230_r099.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 262144 -value_of_min_radian_position -262144 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 0.07692307692 N/m signed -Goal Current 0.07692307692 N/m signed +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 0.07692307692 N/m signed 0.0 +Goal Current 0.07692307692 N/m signed 0.0 +Present Position 0.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned [control table] From f292f69ffd7bb7b8cc9d70f70770ac30c46b92b1 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Mon, 3 Nov 2025 21:44:58 +0900 Subject: [PATCH 07/26] feat: Add OverrideUnitInfo method and support for unit info overrides in Dynamixel interface --- .../dynamixel/dynamixel.hpp | 8 ++++ src/dynamixel/dynamixel.cpp | 15 +++++++ src/dynamixel_hardware_interface.cpp | 42 +++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index 80d78bf..f8a1ce0 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp @@ -292,6 +292,14 @@ class Dynamixel DxlError InitTorqueStates(std::vector> comm_id_id_arr, bool disable_torque = false); + void OverrideUnitInfo( + uint8_t comm_id, + uint8_t id, + const std::string & data_name, + double unit_multiplier, + bool is_signed, + double offset_value); + private: bool checkReadType(); bool checkWriteType(); diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 7c7ed66..e358e20 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -167,6 +167,21 @@ DxlError Dynamixel::InitTorqueStates(std::vector> com return DxlError::OK; } +void Dynamixel::OverrideUnitInfo( + uint8_t comm_id, + uint8_t id, + const std::string & data_name, + double unit_multiplier, + bool is_signed, + double offset_value) +{ + // Ensure entry exists + (void)dxl_info_.dxl_info_by_comm_[comm_id][id]; + dxl_info_.dxl_info_by_comm_[comm_id][id].unit_map[data_name] = unit_multiplier; + dxl_info_.dxl_info_by_comm_[comm_id][id].sign_type_map[data_name] = is_signed; + dxl_info_.dxl_info_by_comm_[comm_id][id].offset_map[data_name] = offset_value; +} + DxlError Dynamixel::InitDxlComm( std::vector> comm_id_id_arr, std::string port_name, diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index 93eff86..80c7cec 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -848,6 +848,47 @@ bool DynamixelHardware::InitItems() uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? static_cast(stoi(gpio.parameters.at("comm_id"))) : id; + // Handle [unit info] override before any device writes + auto unit_it = gpio.parameters.find("[unit info]"); + if (unit_it != gpio.parameters.end()) { + std::string value = unit_it->second; + std::vector entries; + { + std::stringstream ss(value); + std::string token; + while (std::getline(ss, token, ';')) { + if (!token.empty()) {entries.push_back(token);} + } + if (entries.empty()) {entries.push_back(value);} // single entry + } + for (auto & entry : entries) { + std::stringstream ls(entry); + std::string line; + while (std::getline(ls, line)) { + if (line.empty()) {continue;} + std::vector parts; + std::stringstream ps(line); + std::string p; + while (std::getline(ps, p, ',')) {parts.push_back(p);} + if (parts.size() < 4) {continue;} + std::string data_name = parts[0]; + double unit_multiplier = 1.0; + try {unit_multiplier = std::stod(parts[1]);} catch (...) {unit_multiplier = 1.0;} + bool is_signed = (parts[3] == std::string("signed")); + double offset = 0.0; + if (parts.size() >= 5) { + try {offset = std::stod(parts[4]);} catch (...) {offset = 0.0;} + } + dxl_comm_->OverrideUnitInfo(comm_id, id, data_name, unit_multiplier, is_signed, offset); + RCLCPP_INFO_STREAM( + logger_, + "[ID:" << std::to_string(id) << "] override [unit info] for '" << data_name + << "' = multiplier:" << unit_multiplier << ", signed:" << (is_signed?"true":"false") + << ", offset:" << offset); + } + } + } + // Handle torque enable parameter bool torque_enabled = (gpio.parameters.find("type") != gpio.parameters.end() && (gpio.parameters.at("type") == "dxl" || gpio.parameters.at("type") == "virtual_dxl")); if (gpio.parameters.find("Torque Enable") != gpio.parameters.end()) { @@ -903,6 +944,7 @@ bool DynamixelHardware::InitItems() if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable" || param_name == "Operating Mode" || param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot" || + param_name == "[unit info]" || param_name.find("Limit") != std::string::npos) { continue; From 668afd02d56a31f25db782fd5d7e3e7f3fdc1830 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 4 Nov 2025 09:23:44 +0900 Subject: [PATCH 08/26] feat: Trim whitespace in Dynamixel hardware interface item initialization --- src/dynamixel_hardware_interface.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index 80c7cec..1ff8380 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -857,6 +857,14 @@ bool DynamixelHardware::InitItems() std::stringstream ss(value); std::string token; while (std::getline(ss, token, ';')) { + // Trim whitespace from token + size_t first = token.find_first_not_of(" \t\r\n"); + if (first != std::string::npos) { + size_t last = token.find_last_not_of(" \t\r\n"); + token = token.substr(first, last - first + 1); + } else { + token.clear(); + } if (!token.empty()) {entries.push_back(token);} } if (entries.empty()) {entries.push_back(value);} // single entry @@ -865,11 +873,29 @@ bool DynamixelHardware::InitItems() std::stringstream ls(entry); std::string line; while (std::getline(ls, line)) { + // Trim whitespace from line + size_t first = line.find_first_not_of(" \t\r\n"); + if (first != std::string::npos) { + size_t last = line.find_last_not_of(" \t\r\n"); + line = line.substr(first, last - first + 1); + } else { + line.clear(); + } if (line.empty()) {continue;} std::vector parts; std::stringstream ps(line); std::string p; - while (std::getline(ps, p, ',')) {parts.push_back(p);} + while (std::getline(ps, p, ',')) { + // Trim whitespace from each part + size_t p_first = p.find_first_not_of(" \t\r\n"); + if (p_first != std::string::npos) { + size_t p_last = p.find_last_not_of(" \t\r\n"); + p = p.substr(p_first, p_last - p_first + 1); + } else { + p.clear(); + } + parts.push_back(p); + } if (parts.size() < 4) {continue;} std::string data_name = parts[0]; double unit_multiplier = 1.0; From fe2eb62ec389e5ee45b49e11bfb18239dd94bc0e Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Wed, 12 Nov 2025 19:43:33 +0900 Subject: [PATCH 09/26] refactor: Update Dynamixel interface for improved item initialization and communication setup --- .../dynamixel/dynamixel.hpp | 4 +- .../dynamixel_hardware_interface.hpp | 2 +- src/dynamixel/dynamixel.cpp | 221 ++++++----- src/dynamixel_hardware_interface.cpp | 350 ++++++++---------- 4 files changed, 282 insertions(+), 295 deletions(-) diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index f8a1ce0..3c41990 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp @@ -240,8 +240,8 @@ class Dynamixel ~Dynamixel(); // DXL Communication Setting - DxlError InitDxlComm(std::vector> comm_id_id_arr, - std::string port_name, std::string baudrate); + DxlError SetupPort(const std::string & port_name, const std::string & baudrate); + DxlError InitDxlComm(uint8_t comm_id, uint8_t id); DxlError Reboot(uint8_t id); void RWDataReset(); diff --git a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp index 6bd1a95..d43a289 100644 --- a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp +++ b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp @@ -263,7 +263,7 @@ class DynamixelHardware : public * @brief Helper function to initialize items * @return True if initialization was successful, false otherwise. */ - bool InitItems(); + bool InitItem(const hardware_interface::ComponentInfo & gpio); /** * @brief Initializes the read items for Dynamixel. diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index e358e20..11a4985 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -182,18 +182,38 @@ void Dynamixel::OverrideUnitInfo( dxl_info_.dxl_info_by_comm_[comm_id][id].offset_map[data_name] = offset_value; } -DxlError Dynamixel::InitDxlComm( - std::vector> comm_id_id_arr, - std::string port_name, - std::string baudrate) +DxlError Dynamixel::SetupPort(const std::string & port_name, const std::string & baudrate) { port_handler_ = dynamixel::PortHandler::getPortHandler(port_name.c_str()); packet_handler_ = dynamixel::PacketHandler::getPacketHandler(); - if (port_handler_->openPort()) { - fprintf(stderr, "Succeeded to open the port [%s]!\n", port_name.c_str()); - } else { - fprintf(stderr, "Failed to open the port [%s]!\n", port_name.c_str()); + bool port_opened = false; + for (int attempt = 0; attempt < MAX_COMM_RETRIES; ++attempt) { + if (port_handler_->openPort()) { + fprintf( + stderr, + "Succeeded to open the port [%s]! (attempt %d/%d)\n", + port_name.c_str(), + attempt + 1, + MAX_COMM_RETRIES); + port_opened = true; + break; + } + + fprintf( + stderr, + "Failed to open the port [%s]! (attempt %d/%d)\n", + port_name.c_str(), + attempt + 1, + MAX_COMM_RETRIES); + + if (attempt + 1 == MAX_COMM_RETRIES) { + return DxlError::OPEN_PORT_FAIL; + } + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } + + if (!port_opened) { return DxlError::OPEN_PORT_FAIL; } @@ -204,114 +224,117 @@ DxlError Dynamixel::InitDxlComm( return DxlError::OPEN_PORT_FAIL; } + read_data_list_.clear(); + write_data_list_.clear(); + return DxlError::OK; +} + +DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) +{ uint16_t dxl_model_number; uint8_t dxl_error = 0; - for (auto pr : comm_id_id_arr) { - uint8_t comm_id = pr.first; - uint8_t id = pr.second; - fprintf(stderr, "[comm_id:%03d][ID:%03d] Request ping\t", comm_id, id); - int dxl_comm_result = packet_handler_->ping( - port_handler_, comm_id, &dxl_model_number, &dxl_error); - if (dxl_comm_result != COMM_SUCCESS) { - fprintf(stderr, " - COMM_ERROR : %s\n", packet_handler_->getTxRxResult(dxl_comm_result)); - return DxlError::CANNOT_FIND_CONTROL_ITEM; - } + fprintf(stderr, "[comm_id:%03d][ID:%03d] Request ping\t", comm_id, id); + int dxl_comm_result = packet_handler_->ping( + port_handler_, comm_id, &dxl_model_number, &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + fprintf(stderr, " - COMM_ERROR : %s\n", packet_handler_->getTxRxResult(dxl_comm_result)); + return DxlError::CANNOT_FIND_CONTROL_ITEM; + } - // First, read the model file to get the control table structure - try { - dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); - } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); - return DxlError::CANNOT_FIND_CONTROL_ITEM; - } + // First, read the model file to get the control table structure + try { + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); + } catch (const std::exception & e) { + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + return DxlError::CANNOT_FIND_CONTROL_ITEM; + } - if (dxl_error != 0) { - fprintf(stderr, " - RX_PACKET_ERROR : %s\n", packet_handler_->getRxPacketError(dxl_error)); - - // Check if Hardware Error Status control item exists - uint16_t hw_error_addr, error_code_addr; - uint8_t hw_error_size, error_code_size; - bool hw_error_exists = dxl_info_.GetDxlControlItem( - comm_id, id, "Hardware Error Status", hw_error_addr, hw_error_size); - bool error_code_exists = dxl_info_.GetDxlControlItem( - comm_id, id, "Error Code", error_code_addr, error_code_size); - - if (hw_error_exists) { - uint32_t hw_error_status = 0; - ReadItem(comm_id, id, "Hardware Error Status", hw_error_status); - - std::string error_string = ""; - uint8_t hw_error_byte = static_cast(hw_error_status); - - for (int bit = 0; bit < 8; ++bit) { - if (hw_error_byte & (1 << bit)) { - const HardwareErrorStatusBitInfo * bit_info = get_hardware_error_status_bit_info(bit); - if (bit_info) { - error_string += bit_info->label; - error_string += " (" + std::string(bit_info->description) + ")/ "; - } else { - error_string += "Unknown Error Bit " + std::to_string(bit) + "/ "; - } - } - } + if (dxl_error != 0) { + fprintf(stderr, " - RX_PACKET_ERROR : %s\n", packet_handler_->getRxPacketError(dxl_error)); - if (!error_string.empty()) { - fprintf( - stderr, "[comm_id:%03d][ID:%03d] Hardware Error Details: 0x%x (%d): %s\n", - comm_id, id, hw_error_byte, hw_error_byte, error_string.c_str()); - } - } else if (error_code_exists) { - uint32_t error_code = 0; - ReadItem(comm_id, id, "Error Code", error_code); - - uint8_t error_code_byte = static_cast(error_code); - if (error_code_byte != 0x00) { - const ErrorCodeInfo * error_info = get_error_code_info(error_code_byte); - if (error_info) { - fprintf( - stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (%s): %s\n", - comm_id, id, error_code_byte, error_info->label, error_info->description); + // Check if Hardware Error Status control item exists + uint16_t hw_error_addr, error_code_addr; + uint8_t hw_error_size, error_code_size; + bool hw_error_exists = dxl_info_.GetDxlControlItem( + comm_id, id, "Hardware Error Status", hw_error_addr, hw_error_size); + bool error_code_exists = dxl_info_.GetDxlControlItem( + comm_id, id, "Error Code", error_code_addr, error_code_size); + + if (hw_error_exists) { + uint32_t hw_error_status = 0; + ReadItem(comm_id, id, "Hardware Error Status", hw_error_status); + + std::string error_string = ""; + uint8_t hw_error_byte = static_cast(hw_error_status); + + for (int bit = 0; bit < 8; ++bit) { + if (hw_error_byte & (1 << bit)) { + const HardwareErrorStatusBitInfo * bit_info = get_hardware_error_status_bit_info(bit); + if (bit_info) { + error_string += bit_info->label; + error_string += " (" + std::string(bit_info->description) + ")/ "; } else { - fprintf( - stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (Unknown Error Code)\n", - comm_id, id, error_code_byte); + error_string += "Unknown Error Bit " + std::to_string(bit) + "/ "; } } - } else { - fprintf( - stderr, - "[comm_id:%03d][ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", - comm_id, id - ); } - Reboot(id); - return DxlError::DXL_HARDWARE_ERROR; + if (!error_string.empty()) { + fprintf( + stderr, "[comm_id:%03d][ID:%03d] Hardware Error Details: 0x%x (%d): %s\n", + comm_id, id, hw_error_byte, hw_error_byte, error_string.c_str()); + } + } else if (error_code_exists) { + uint32_t error_code = 0; + ReadItem(comm_id, id, "Error Code", error_code); + + uint8_t error_code_byte = static_cast(error_code); + if (error_code_byte != 0x00) { + const ErrorCodeInfo * error_info = get_error_code_info(error_code_byte); + if (error_info) { + fprintf( + stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (%s): %s\n", + comm_id, id, error_code_byte, error_info->label, error_info->description); + } else { + fprintf( + stderr, "[comm_id:%03d][ID:%03d] Error Code Details: 0x%x (Unknown Error Code)\n", + comm_id, id, error_code_byte); + } + } } else { - std::string model_name = dxl_info_.GetModelName(dxl_model_number); fprintf( - stderr, " - Ping succeeded. Dynamixel model number : %d (%s)\n", dxl_model_number, - model_name.c_str()); + stderr, + "[comm_id:%03d][ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", + comm_id, id + ); } + Reboot(id); + return DxlError::DXL_HARDWARE_ERROR; + } else { + std::string model_name = dxl_info_.GetModelName(dxl_model_number); + fprintf( + stderr, " - Ping succeeded. Dynamixel model number : %d (%s)\n", dxl_model_number, + model_name.c_str()); + } + + try { + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); + } catch (const std::exception & e) { + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + return DxlError::CANNOT_FIND_CONTROL_ITEM; + } + + uint8_t firmware_version = 0; + DxlError fw_result = ReadFirmwareVersion(comm_id, id, firmware_version); + if (fw_result == DxlError::OK && firmware_version > 0) { try { - dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); + dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number, firmware_version); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); - return DxlError::CANNOT_FIND_CONTROL_ITEM; - } - - uint8_t firmware_version = 0; - DxlError fw_result = ReadFirmwareVersion(comm_id, id, firmware_version); - if (fw_result == DxlError::OK && firmware_version > 0) { - try { - dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number, firmware_version); - } catch (const std::exception & e) { - fprintf( - stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", - comm_id, id, e.what()); - } + fprintf( + stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", + comm_id, id, e.what()); } } diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index 1ff8380..cf5467c 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -190,78 +190,55 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } } - if (controller_comm_id_id_.size() > 0) { - for (int i = 0; i < 10; i++) { - std::vector> comm_id_id_arr; - for (auto pr : controller_comm_id_id_) { - comm_id_id_arr.emplace_back(pr.first, pr.second); - } - if (dxl_comm_->InitDxlComm(comm_id_id_arr, port_name_, baud_rate_) == DxlError::OK) { - RCLCPP_INFO_STREAM(logger_, "Trying to connect to the communication port..."); - break; - } else { - std::this_thread::sleep_for(std::chrono::seconds(1)); - if (i == 9) { - RCLCPP_ERROR_STREAM(logger_, "Cannot connect communication port! :("); - return hardware_interface::CallbackReturn::ERROR; - } - } - } - } - - // if (!InitControllerItems()) { - // RCLCPP_ERROR_STREAM(logger_, "Error: InitControllerItems"); - // return hardware_interface::CallbackReturn::ERROR; - // } - - for (int i = 0; i < 10; i++) { - std::vector> comm_id_id_arr; - for (auto pr : dxl_comm_id_id_) { - comm_id_id_arr.emplace_back(pr.first, pr.second); - } - for (auto pr : sensor_comm_id_id_) { - comm_id_id_arr.emplace_back(pr.first, pr.second); - } - if (dxl_comm_->InitDxlComm(comm_id_id_arr, port_name_, baud_rate_) == DxlError::OK) { - RCLCPP_INFO_STREAM(logger_, "Trying to connect to the communication port..."); - break; - } else { - std::this_thread::sleep_for(std::chrono::seconds(1)); - if (i == 9) { - RCLCPP_ERROR_STREAM(logger_, "Cannot connect communication port! :("); - return hardware_interface::CallbackReturn::ERROR; - } - } + if (dxl_comm_->SetupPort(port_name_, baud_rate_) != DxlError::OK) { + return hardware_interface::CallbackReturn::ERROR; } - std::vector> torque_init_pairs; + torque_enabled_comm_id_id_.clear(); for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { - if (gpio.parameters.find("ID") == gpio.parameters.end() || - gpio.parameters.find("type") == gpio.parameters.end()) - { - continue; - } uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? static_cast(stoi(gpio.parameters.at("comm_id"))) : id; const std::string & type = gpio.parameters.at("type"); - // Include both real and virtual_dxl in torque init (per user request) + bool requires_ping = (type == "controller" || type == "dxl" || type == "sensor"); + if (requires_ping) { + bool success = false; + for (int attempt = 0; attempt < 10; ++attempt) { + if (dxl_comm_->InitDxlComm(comm_id, id) == DxlError::OK) { + success = true; + break; + } + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + if (!success) { + RCLCPP_ERROR_STREAM( + logger_, + "[comm_id:" << static_cast(comm_id) << + "][ID:" << static_cast(id) << + "] Cannot connect communication port! :("); + return hardware_interface::CallbackReturn::ERROR; + } + } + if (type == "dxl" || type == "virtual_dxl") { - torque_init_pairs.emplace_back(comm_id, id); + std::vector> single_pair = {{comm_id, id}}; + if (dxl_comm_->InitTorqueStates(single_pair, disable_torque_at_init) != DxlError::OK) { + RCLCPP_ERROR_STREAM( + logger_, + "[comm_id:" << static_cast(comm_id) << + "][ID:" << static_cast(id) << "] Error: InitTorqueStates"); + return hardware_interface::CallbackReturn::ERROR; + } } - } - if (dxl_comm_->InitTorqueStates( - torque_init_pairs, - disable_torque_at_init) != DxlError::OK) - { - RCLCPP_ERROR_STREAM(logger_, "Error: InitTorqueStates"); - return hardware_interface::CallbackReturn::ERROR; - } - if (!InitItems()) { - RCLCPP_ERROR_STREAM(logger_, "Error: InitItems"); - return hardware_interface::CallbackReturn::ERROR; + if (!InitItem(gpio)) { + RCLCPP_ERROR_STREAM( + logger_, + "[comm_id:" << static_cast(comm_id) << + "][ID:" << static_cast(id) << "] Error: InitItem"); + return hardware_interface::CallbackReturn::ERROR; + } } if (!InitDxlReadItems()) { @@ -824,160 +801,125 @@ bool DynamixelHardware::CommReset() return false; } -bool DynamixelHardware::InitItems() +bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) { - std::vector reboot_comm_id_id_; - for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { - uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); - bool reboot_enabled = (gpio.parameters.find("Reboot") != gpio.parameters.end() && std::stoi(gpio.parameters.at("Reboot")) != 0); - if (reboot_enabled) { - reboot_comm_id_id_.emplace_back(id); - } - } - for (auto id : reboot_comm_id_id_) { - for (int i = 0; i < 5; i++) { - if (dxl_comm_->Reboot(id) != DxlError::OK) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } else { + uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); + uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? + static_cast(stoi(gpio.parameters.at("comm_id"))) : id; + + bool reboot_enabled = + (gpio.parameters.find("Reboot") != gpio.parameters.end() && + std::stoi(gpio.parameters.at("Reboot")) != 0); + if (reboot_enabled) { + for (int attempt = 0; attempt < 5; ++attempt) { + if (dxl_comm_->Reboot(id) == DxlError::OK) { break; } + std::this_thread::sleep_for(std::chrono::milliseconds(500)); } } - for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { - uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); - uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? - static_cast(stoi(gpio.parameters.at("comm_id"))) : id; - // Handle [unit info] override before any device writes - auto unit_it = gpio.parameters.find("[unit info]"); - if (unit_it != gpio.parameters.end()) { - std::string value = unit_it->second; - std::vector entries; - { - std::stringstream ss(value); - std::string token; - while (std::getline(ss, token, ';')) { - // Trim whitespace from token - size_t first = token.find_first_not_of(" \t\r\n"); - if (first != std::string::npos) { - size_t last = token.find_last_not_of(" \t\r\n"); - token = token.substr(first, last - first + 1); - } else { - token.clear(); - } - if (!token.empty()) {entries.push_back(token);} + auto unit_it = gpio.parameters.find("[unit info]"); + if (unit_it != gpio.parameters.end()) { + std::string value = unit_it->second; + std::vector entries; + { + std::stringstream ss(value); + std::string token; + while (std::getline(ss, token, ';')) { + size_t first = token.find_first_not_of(" \t\r\n"); + if (first != std::string::npos) { + size_t last = token.find_last_not_of(" \t\r\n"); + token = token.substr(first, last - first + 1); + } else { + token.clear(); } - if (entries.empty()) {entries.push_back(value);} // single entry + if (!token.empty()) {entries.push_back(token);} } - for (auto & entry : entries) { - std::stringstream ls(entry); - std::string line; - while (std::getline(ls, line)) { - // Trim whitespace from line - size_t first = line.find_first_not_of(" \t\r\n"); - if (first != std::string::npos) { - size_t last = line.find_last_not_of(" \t\r\n"); - line = line.substr(first, last - first + 1); + if (entries.empty()) {entries.push_back(value);} + } + for (auto & entry : entries) { + std::stringstream ls(entry); + std::string line; + while (std::getline(ls, line)) { + size_t first = line.find_first_not_of(" \t\r\n"); + if (first != std::string::npos) { + size_t last = line.find_last_not_of(" \t\r\n"); + line = line.substr(first, last - first + 1); + } else { + line.clear(); + } + if (line.empty()) {continue;} + std::vector parts; + std::stringstream ps(line); + std::string p; + while (std::getline(ps, p, ',')) { + size_t p_first = p.find_first_not_of(" \t\r\n"); + if (p_first != std::string::npos) { + size_t p_last = p.find_last_not_of(" \t\r\n"); + p = p.substr(p_first, p_last - p_first + 1); } else { - line.clear(); - } - if (line.empty()) {continue;} - std::vector parts; - std::stringstream ps(line); - std::string p; - while (std::getline(ps, p, ',')) { - // Trim whitespace from each part - size_t p_first = p.find_first_not_of(" \t\r\n"); - if (p_first != std::string::npos) { - size_t p_last = p.find_last_not_of(" \t\r\n"); - p = p.substr(p_first, p_last - p_first + 1); - } else { - p.clear(); - } - parts.push_back(p); + p.clear(); } - if (parts.size() < 4) {continue;} - std::string data_name = parts[0]; - double unit_multiplier = 1.0; - try {unit_multiplier = std::stod(parts[1]);} catch (...) {unit_multiplier = 1.0;} - bool is_signed = (parts[3] == std::string("signed")); - double offset = 0.0; - if (parts.size() >= 5) { - try {offset = std::stod(parts[4]);} catch (...) {offset = 0.0;} - } - dxl_comm_->OverrideUnitInfo(comm_id, id, data_name, unit_multiplier, is_signed, offset); - RCLCPP_INFO_STREAM( - logger_, - "[ID:" << std::to_string(id) << "] override [unit info] for '" << data_name - << "' = multiplier:" << unit_multiplier << ", signed:" << (is_signed?"true":"false") - << ", offset:" << offset); + parts.push_back(p); } - } - } - - // Handle torque enable parameter - bool torque_enabled = (gpio.parameters.find("type") != gpio.parameters.end() && (gpio.parameters.at("type") == "dxl" || gpio.parameters.at("type") == "virtual_dxl")); - if (gpio.parameters.find("Torque Enable") != gpio.parameters.end()) { - torque_enabled = std::stoi(gpio.parameters.at("Torque Enable")) != 0; - } - if (torque_enabled) { - torque_enabled_comm_id_id_.emplace_back(comm_id, id); - } - - // 1. First pass: Write Operating Mode parameters - for (const auto & param : gpio.parameters) { - const std::string & param_name = param.first; - if (param_name == "Operating Mode") { + if (parts.size() < 4) {continue;} + std::string data_name = parts[0]; + double unit_multiplier = 1.0; + try {unit_multiplier = std::stod(parts[1]);} catch (...) {unit_multiplier = 1.0;} + bool is_signed = (parts[3] == std::string("signed")); + double offset = 0.0; + if (parts.size() >= 5) { + try {offset = std::stod(parts[4]);} catch (...) {offset = 0.0;} + } + dxl_comm_->OverrideUnitInfo(comm_id, id, data_name, unit_multiplier, is_signed, offset); RCLCPP_INFO_STREAM( logger_, - "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << - param.second); - if (dxl_comm_->WriteItem( - comm_id, id, param_name, - static_cast(stoi(param.second))) != DxlError::OK) - { - return false; - } + "[ID:" << std::to_string(id) << "] override [unit info] for '" << data_name + << "' = multiplier:" << unit_multiplier << ", signed:" << (is_signed?"true":"false") + << ", offset:" << offset); } } + } - // 2. Second pass: Write all Limit parameters - for (const auto & param : gpio.parameters) { - const std::string & param_name = param.first; - if (param_name == "ID" || param_name == "type" || - param_name == "Torque Enable" || param_name == "Operating Mode" || - param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot") + bool torque_enabled = + (gpio.parameters.find("type") != gpio.parameters.end() && + (gpio.parameters.at("type") == "dxl" || gpio.parameters.at("type") == "virtual_dxl")); + if (gpio.parameters.find("Torque Enable") != gpio.parameters.end()) { + torque_enabled = std::stoi(gpio.parameters.at("Torque Enable")) != 0; + } + if (torque_enabled) { + torque_enabled_comm_id_id_.emplace_back(comm_id, id); + } + + for (const auto & param : gpio.parameters) { + const std::string & param_name = param.first; + if (param_name == "Operating Mode") { + RCLCPP_INFO_STREAM( + logger_, + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << + param.second); + if (dxl_comm_->WriteItem( + comm_id, id, param_name, + static_cast(stoi(param.second))) != DxlError::OK) { - continue; - } - if (param_name.find("Limit") != std::string::npos) { - RCLCPP_INFO_STREAM( - logger_, - "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << - param.second); - if (dxl_comm_->WriteItem( - comm_id, id, param_name, - static_cast(stoi(param.second))) != DxlError::OK) - { - return false; - } + return false; } } + } - // 3. Third pass: Write all other parameters (excluding already written ones) - for (const auto & param : gpio.parameters) { - const std::string & param_name = param.first; - if (param_name == "ID" || param_name == "type" || - param_name == "Torque Enable" || param_name == "Operating Mode" || - param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot" || - param_name == "[unit info]" || - param_name.find("Limit") != std::string::npos) - { - continue; - } + for (const auto & param : gpio.parameters) { + const std::string & param_name = param.first; + if (param_name == "ID" || param_name == "type" || + param_name == "Torque Enable" || param_name == "Operating Mode" || + param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot") + { + continue; + } + if (param_name.find("Limit") != std::string::npos) { RCLCPP_INFO_STREAM( logger_, - "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << param.second); if (dxl_comm_->WriteItem( comm_id, id, param_name, @@ -987,6 +929,28 @@ bool DynamixelHardware::InitItems() } } } + + for (const auto & param : gpio.parameters) { + const std::string & param_name = param.first; + if (param_name == "ID" || param_name == "type" || + param_name == "Torque Enable" || param_name == "Operating Mode" || + param_name == "model_num" || param_name == "comm_id" || param_name == "Reboot" || + param_name == "[unit info]" || + param_name.find("Limit") != std::string::npos) + { + continue; + } + RCLCPP_INFO_STREAM( + logger_, + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << + param.second); + if (dxl_comm_->WriteItem( + comm_id, id, param_name, + static_cast(stoi(param.second))) != DxlError::OK) + { + return false; + } + } return true; } From ad32bde613305a2a537794b01ed0ae0f81906d72 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Wed, 12 Nov 2025 21:26:06 +0900 Subject: [PATCH 10/26] refactor: Update synchronization table model names in Dynamixel configuration --- param/dxl_model/dynamixel.model | 40 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index fdfda11..8bcf116 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -5,31 +5,31 @@ Number Name 231 omy_end_rh_p12_rn.model 260 hx5_d20_rr.model 261 hx5_d20_rl.model -6001 hx5_d20_r_synctable_3_device_1.model -6002 hx5_d20_r_synctable_3_device_2.model -6003 hx5_d20_r_synctable_3_device_3.model -6004 hx5_d20_r_synctable_3_device_4.model -6005 hx5_d20_r_synctable_3_device_5.model -6006 hx5_d20_r_synctable_5_device_1.model -6007 hx5_d20_r_synctable_5_device_2.model -6008 hx5_d20_r_synctable_5_device_3.model -6009 hx5_d20_r_synctable_5_device_4.model -6010 hx5_d20_r_synctable_5_device_5.model -6011 hx5_d20_r_synctable_2_device_1.model -6012 hx5_d20_r_synctable_2_device_2.model -6013 hx5_d20_r_synctable_2_device_3.model -6014 hx5_d20_r_synctable_2_device_4.model -6015 hx5_d20_r_synctable_2_device_5.model +6001 hx5_d20_r_synctable_1_device_1.model +6002 hx5_d20_r_synctable_1_device_2.model +6003 hx5_d20_r_synctable_1_device_3.model +6004 hx5_d20_r_synctable_1_device_4.model +6005 hx5_d20_r_synctable_1_device_5.model +6006 hx5_d20_r_synctable_2_device_1.model +6007 hx5_d20_r_synctable_2_device_2.model +6008 hx5_d20_r_synctable_2_device_3.model +6009 hx5_d20_r_synctable_2_device_4.model +6010 hx5_d20_r_synctable_2_device_5.model +6011 hx5_d20_r_synctable_3_device_1.model +6012 hx5_d20_r_synctable_3_device_2.model +6013 hx5_d20_r_synctable_3_device_3.model +6014 hx5_d20_r_synctable_3_device_4.model +6015 hx5_d20_r_synctable_3_device_5.model 6016 hx5_d20_r_synctable_4_device_1.model 6017 hx5_d20_r_synctable_4_device_2.model 6018 hx5_d20_r_synctable_4_device_3.model 6019 hx5_d20_r_synctable_4_device_4.model 6020 hx5_d20_r_synctable_4_device_5.model -6021 hx5_d20_r_synctable_1_device_1.model -6022 hx5_d20_r_synctable_1_device_2.model -6023 hx5_d20_r_synctable_1_device_3.model -6024 hx5_d20_r_synctable_1_device_4.model -6025 hx5_d20_r_synctable_1_device_5.model +6021 hx5_d20_r_synctable_5_device_1.model +6022 hx5_d20_r_synctable_5_device_2.model +6023 hx5_d20_r_synctable_5_device_3.model +6024 hx5_d20_r_synctable_5_device_4.model +6025 hx5_d20_r_synctable_5_device_5.model 311 mx_64.model 321 mx_106.model 350 xl320.model From d562b833aaa817c29058785c0b99d7202dec15e5 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Wed, 12 Nov 2025 22:06:11 +0900 Subject: [PATCH 11/26] feat: Implement reboot functionality for Dynamixel devices during initialization --- src/dynamixel_hardware_interface.cpp | 29 ++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index cf5467c..851689e 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -194,6 +194,23 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( return hardware_interface::CallbackReturn::ERROR; } + std::vector reboot_dxl; + for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { + if (gpio.parameters.find("Reboot") != gpio.parameters.end() && + std::stoi(gpio.parameters.at("Reboot")) != 0) { + reboot_dxl.push_back(static_cast(stoi(gpio.parameters.at("ID")))); + } + } + for (uint8_t id : reboot_dxl) { + for (int attempt = 0; attempt < 5; ++attempt) { + if (dxl_comm_->Reboot(id) != DxlError::OK) { + RCLCPP_ERROR_STREAM(logger_, "Failed to reboot DXL: " << static_cast(id)); + return hardware_interface::CallbackReturn::ERROR; + } + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } + } + torque_enabled_comm_id_id_.clear(); for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { uint8_t id = static_cast(stoi(gpio.parameters.at("ID"))); @@ -807,18 +824,6 @@ bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) uint8_t comm_id = (gpio.parameters.find("comm_id") != gpio.parameters.end()) ? static_cast(stoi(gpio.parameters.at("comm_id"))) : id; - bool reboot_enabled = - (gpio.parameters.find("Reboot") != gpio.parameters.end() && - std::stoi(gpio.parameters.at("Reboot")) != 0); - if (reboot_enabled) { - for (int attempt = 0; attempt < 5; ++attempt) { - if (dxl_comm_->Reboot(id) == DxlError::OK) { - break; - } - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - } - auto unit_it = gpio.parameters.find("[unit info]"); if (unit_it != gpio.parameters.end()) { std::string value = unit_it->second; From 324fd610ad5eac6129ddbbd08d569a2a22922964 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Wed, 12 Nov 2025 22:12:32 +0900 Subject: [PATCH 12/26] fix: Correct reboot logic in Dynamixel hardware interface to ensure proper device initialization --- src/dynamixel_hardware_interface.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index 851689e..b9a5241 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -203,9 +203,8 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } for (uint8_t id : reboot_dxl) { for (int attempt = 0; attempt < 5; ++attempt) { - if (dxl_comm_->Reboot(id) != DxlError::OK) { - RCLCPP_ERROR_STREAM(logger_, "Failed to reboot DXL: " << static_cast(id)); - return hardware_interface::CallbackReturn::ERROR; + if (dxl_comm_->Reboot(id) == DxlError::OK) { + break; } std::this_thread::sleep_for(std::chrono::milliseconds(500)); } From fcb8b29b50f9b979ec152c85dbdc7e8e6c593ee8 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Thu, 13 Nov 2025 09:47:43 +0900 Subject: [PATCH 13/26] fix: Reduce sleep duration during reboot in Dynamixel hardware interface for faster initialization --- src/dynamixel_hardware_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index b9a5241..235b5b4 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -206,7 +206,7 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( if (dxl_comm_->Reboot(id) == DxlError::OK) { break; } - std::this_thread::sleep_for(std::chrono::milliseconds(500)); + std::this_thread::sleep_for(std::chrono::milliseconds(250)); } } From 4343a04865a0fa59e4589a4e3b00721f0c4b6ca8 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Fri, 14 Nov 2025 12:20:16 +0900 Subject: [PATCH 14/26] Update Dynamixel model files to change unit notation from 'N/m' to 'N m' for consistency --- param/dxl_model/xc330_t181.model | 4 ++-- param/dxl_model/xc330_t181_fw52.model | 4 ++-- param/dxl_model/xc330_t288.model | 4 ++-- param/dxl_model/xc330_t288_fw52.model | 4 ++-- param/dxl_model/xh540_w150.model | 4 ++-- param/dxl_model/ym070_210_a099.model | 4 ++-- param/dxl_model/ym070_210_r099.model | 4 ++-- param/dxl_model/ym080_230_a099.model | 4 ++-- param/dxl_model/ym080_230_r099.model | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/param/dxl_model/xc330_t181.model b/param/dxl_model/xc330_t181.model index b7e1008..ff95eaa 100644 --- a/param/dxl_model/xc330_t181.model +++ b/param/dxl_model/xc330_t181.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 -Present Current 0.0006709470296015791 N/m signed 0.0 -Goal Current 0.0006709470296015791 N/m signed 0.0 +Present Current 0.0006709470296015791 N m signed 0.0 +Goal Current 0.0006709470296015791 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/xc330_t181_fw52.model b/param/dxl_model/xc330_t181_fw52.model index f6de2e4..aa9325a 100644 --- a/param/dxl_model/xc330_t181_fw52.model +++ b/param/dxl_model/xc330_t181_fw52.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 -Present Current 0.0006709470296015791 N/m signed 0.0 -Goal Current 0.0006709470296015791 N/m signed 0.0 +Present Current 0.0006709470296015791 N m signed 0.0 +Goal Current 0.0006709470296015791 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/xc330_t288.model b/param/dxl_model/xc330_t288.model index aefe037..8b1e433 100644 --- a/param/dxl_model/xc330_t288.model +++ b/param/dxl_model/xc330_t288.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 -Present Current 0.0009674796739867748 N/m signed 0.0 -Goal Current 0.0009674796739867748 N/m signed 0.0 +Present Current 0.0009674796739867748 N m signed 0.0 +Goal Current 0.0009674796739867748 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/xc330_t288_fw52.model b/param/dxl_model/xc330_t288_fw52.model index 7313d1d..694994d 100644 --- a/param/dxl_model/xc330_t288_fw52.model +++ b/param/dxl_model/xc330_t288_fw52.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 -Present Current 0.0009674796739867748 N/m signed 0.0 -Goal Current 0.0009674796739867748 N/m signed 0.0 +Present Current 0.0009674796739867748 N m signed 0.0 +Goal Current 0.0009674796739867748 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/xh540_w150.model b/param/dxl_model/xh540_w150.model index c805140..d343814 100644 --- a/param/dxl_model/xh540_w150.model +++ b/param/dxl_model/xh540_w150.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 -Present Current 0.0045 N/m signed 0.0 -Goal Current 0.0045 N/m signed 0.0 +Present Current 0.0045 N m signed 0.0 +Goal Current 0.0045 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/ym070_210_a099.model b/param/dxl_model/ym070_210_a099.model index 4442319..379b7ee 100644 --- a/param/dxl_model/ym070_210_a099.model +++ b/param/dxl_model/ym070_210_a099.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0010471976 rad/s signed 0.0 Goal Velocity 0.0010471976 rad/s signed 0.0 -Present Current 0.04 N/m signed 0.0 -Goal Current 0.04 N/m signed 0.0 +Present Current 0.04 N m signed 0.0 +Goal Current 0.04 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/ym070_210_r099.model b/param/dxl_model/ym070_210_r099.model index 4442319..379b7ee 100644 --- a/param/dxl_model/ym070_210_r099.model +++ b/param/dxl_model/ym070_210_r099.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0010471976 rad/s signed 0.0 Goal Velocity 0.0010471976 rad/s signed 0.0 -Present Current 0.04 N/m signed 0.0 -Goal Current 0.04 N/m signed 0.0 +Present Current 0.04 N m signed 0.0 +Goal Current 0.04 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/ym080_230_a099.model b/param/dxl_model/ym080_230_a099.model index ef8dbaa..a8f7c59 100644 --- a/param/dxl_model/ym080_230_a099.model +++ b/param/dxl_model/ym080_230_a099.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0010471976 rad/s signed 0.0 Goal Velocity 0.0010471976 rad/s signed 0.0 -Present Current 0.07692307692 N/m signed 0.0 -Goal Current 0.07692307692 N/m signed 0.0 +Present Current 0.07692307692 N m signed 0.0 +Goal Current 0.07692307692 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned diff --git a/param/dxl_model/ym080_230_r099.model b/param/dxl_model/ym080_230_r099.model index ef8dbaa..a8f7c59 100644 --- a/param/dxl_model/ym080_230_r099.model +++ b/param/dxl_model/ym080_230_r099.model @@ -2,8 +2,8 @@ Data Name value unit Sign Type Offset Present Velocity 0.0010471976 rad/s signed 0.0 Goal Velocity 0.0010471976 rad/s signed 0.0 -Present Current 0.07692307692 N/m signed 0.0 -Goal Current 0.07692307692 N/m signed 0.0 +Present Current 0.07692307692 N m signed 0.0 +Goal Current 0.07692307692 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 Present Input Voltage 0.1 V unsigned From 88ae1fb398d72a2ceef2c4889427b946b2ef7144 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Mon, 17 Nov 2025 18:37:10 +0900 Subject: [PATCH 15/26] refactor: Replace dynamic memory allocation with std::vector for transmission matrices in Dynamixel hardware interface --- .../dynamixel_hardware_interface.hpp | 6 +++--- src/dynamixel_hardware_interface.cpp | 16 ++++++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp index d43a289..768ab53 100644 --- a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp +++ b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp @@ -256,8 +256,8 @@ class DynamixelHardware : public // joint <-> transmission matrix size_t num_of_joints_; size_t num_of_transmissions_; - double ** transmission_to_joint_matrix_; - double ** joint_to_transmission_matrix_; + std::vector> transmission_to_joint_matrix_; + std::vector> joint_to_transmission_matrix_; /** * @brief Helper function to initialize items @@ -364,7 +364,7 @@ class DynamixelHardware : public size_t inner_size, std::vector & outer_handlers, std::vector & inner_handlers, - double ** matrix, + const std::vector> & matrix, const std::unordered_map> & iface_map, const std::string & conversion_iface = "", const std::string & conversion_name = "", diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index 235b5b4..d96a980 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -1179,11 +1179,9 @@ bool DynamixelHardware::SetMatrix() std::string str; std::vector d_vec; - // dynamic allocation (number_of_transmissions x number_of_joint) - transmission_to_joint_matrix_ = new double *[num_of_joints_]; - for (size_t i = 0; i < num_of_joints_; i++) { - transmission_to_joint_matrix_[i] = new double[num_of_transmissions_]; - } + // resize storage (number_of_transmissions x number_of_joint) + transmission_to_joint_matrix_.assign( + num_of_joints_, std::vector(num_of_transmissions_, 0.0)); d_vec.clear(); if (info_.hardware_parameters.find("transmission_to_joint_matrix") == @@ -1232,10 +1230,8 @@ bool DynamixelHardware::SetMatrix() fprintf(stderr, "\n"); } - joint_to_transmission_matrix_ = new double *[num_of_transmissions_]; - for (size_t i = 0; i < num_of_transmissions_; i++) { - joint_to_transmission_matrix_[i] = new double[num_of_joints_]; - } + joint_to_transmission_matrix_.assign( + num_of_transmissions_, std::vector(num_of_joints_, 0.0)); d_vec.clear(); if (info_.hardware_parameters.find("joint_to_transmission_matrix") == @@ -1293,7 +1289,7 @@ void DynamixelHardware::MapInterfaces( size_t inner_size, std::vector & outer_handlers, std::vector & inner_handlers, - double ** matrix, + const std::vector> & matrix, const std::unordered_map> & iface_map, const std::string & conversion_iface, const std::string & conversion_name, From d4c7ad6d9ef7e03371f76a0683a52a131e9525b9 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Mon, 17 Nov 2025 20:49:56 +0900 Subject: [PATCH 16/26] Update Dynamixel model files to set Present Input Voltage offset to 0.0 for consistency across all models --- param/dxl_model/2xc430_w250.model | 2 +- param/dxl_model/2xl430_w250.model | 2 +- param/dxl_model/ffw_sg2_drive_1.model | 2 +- param/dxl_model/ffw_sg2_drive_2.model | 2 +- param/dxl_model/ffw_sg2_drive_3.model | 2 +- param/dxl_model/ffw_sg2_steer_1.model | 2 +- param/dxl_model/ffw_sg2_steer_2.model | 2 +- param/dxl_model/ffw_sg2_steer_3.model | 2 +- param/dxl_model/h42_20_s300_ra.model | 23 +++++++++-------------- param/dxl_model/h54_100_s500_ra.model | 22 ++++++++-------------- param/dxl_model/h54_200_s500_ra.model | 22 ++++++++-------------- param/dxl_model/m42_10_s260_ra.model | 22 ++++++++-------------- param/dxl_model/m54_40_s250_ra.model | 22 ++++++++-------------- param/dxl_model/m54_60_s250_ra.model | 22 ++++++++-------------- param/dxl_model/mx_106.model | 2 +- param/dxl_model/mx_28.model | 2 +- param/dxl_model/mx_64.model | 2 +- param/dxl_model/ph42_020_s300.model | 22 ++++++++-------------- param/dxl_model/ph54_100_s500.model | 22 ++++++++-------------- param/dxl_model/ph54_200_s500.model | 22 ++++++++-------------- param/dxl_model/pm42_010_s260.model | 22 ++++++++-------------- param/dxl_model/pm54_040_s250.model | 22 ++++++++-------------- param/dxl_model/pm54_060_s250.model | 22 ++++++++-------------- param/dxl_model/rh_p12_rn.model | 2 +- param/dxl_model/xc330_m181.model | 2 +- param/dxl_model/xc330_m181_fw52.model | 2 +- param/dxl_model/xc330_m288.model | 2 +- param/dxl_model/xc330_m288_fw52.model | 2 +- param/dxl_model/xc330_t181.model | 2 +- param/dxl_model/xc330_t181_fw52.model | 2 +- param/dxl_model/xc330_t288.model | 2 +- param/dxl_model/xc330_t288_fw52.model | 2 +- param/dxl_model/xc430_w150.model | 2 +- param/dxl_model/xc430_w240.model | 2 +- param/dxl_model/xd430_t210.model | 2 +- param/dxl_model/xd430_t350.model | 2 +- param/dxl_model/xd540_t150.model | 2 +- param/dxl_model/xd540_t270.model | 2 +- param/dxl_model/xh430_v210.model | 2 +- param/dxl_model/xh430_v350.model | 2 +- param/dxl_model/xh430_w210.model | 2 +- param/dxl_model/xh430_w350.model | 2 +- param/dxl_model/xh540_v150.model | 2 +- param/dxl_model/xh540_v270.model | 2 +- param/dxl_model/xh540_w150.model | 2 +- param/dxl_model/xh540_w270.model | 2 +- param/dxl_model/xl330_m077.model | 2 +- param/dxl_model/xl330_m077_fw52.model | 2 +- param/dxl_model/xl330_m288.model | 2 +- param/dxl_model/xl330_m288_fw52.model | 2 +- param/dxl_model/xl430_w250.model | 2 +- param/dxl_model/xm430_w210.model | 2 +- param/dxl_model/xm430_w350.model | 2 +- param/dxl_model/xm540_w150.model | 2 +- param/dxl_model/xm540_w270.model | 2 +- param/dxl_model/xw430_t200.model | 2 +- param/dxl_model/xw430_t333.model | 2 +- param/dxl_model/xw540_h260.model | 2 +- param/dxl_model/xw540_t140.model | 2 +- param/dxl_model/xw540_t260.model | 2 +- param/dxl_model/ym070_210_a051.model | 2 +- param/dxl_model/ym070_210_a099.model | 2 +- param/dxl_model/ym070_210_b001.model | 2 +- param/dxl_model/ym070_210_m001.model | 2 +- param/dxl_model/ym070_210_r051.model | 2 +- param/dxl_model/ym070_210_r099.model | 2 +- param/dxl_model/ym080_230_a051.model | 2 +- param/dxl_model/ym080_230_a099.model | 2 +- param/dxl_model/ym080_230_b001.model | 2 +- param/dxl_model/ym080_230_m001.model | 2 +- param/dxl_model/ym080_230_r051.model | 2 +- param/dxl_model/ym080_230_r099.model | 2 +- 72 files changed, 157 insertions(+), 228 deletions(-) diff --git a/param/dxl_model/2xc430_w250.model b/param/dxl_model/2xc430_w250.model index 8f6ce17..4459483 100644 --- a/param/dxl_model/2xc430_w250.model +++ b/param/dxl_model/2xc430_w250.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/2xl430_w250.model b/param/dxl_model/2xl430_w250.model index 8f6ce17..4459483 100644 --- a/param/dxl_model/2xl430_w250.model +++ b/param/dxl_model/2xl430_w250.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_drive_1.model b/param/dxl_model/ffw_sg2_drive_1.model index af2f488..0d0a5cb 100644 --- a/param/dxl_model/ffw_sg2_drive_1.model +++ b/param/dxl_model/ffw_sg2_drive_1.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_drive_2.model b/param/dxl_model/ffw_sg2_drive_2.model index c9e704a..25b5276 100644 --- a/param/dxl_model/ffw_sg2_drive_2.model +++ b/param/dxl_model/ffw_sg2_drive_2.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_drive_3.model b/param/dxl_model/ffw_sg2_drive_3.model index 4af11ba..f83a9a1 100644 --- a/param/dxl_model/ffw_sg2_drive_3.model +++ b/param/dxl_model/ffw_sg2_drive_3.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_steer_1.model b/param/dxl_model/ffw_sg2_steer_1.model index fea752b..3e2300b 100644 --- a/param/dxl_model/ffw_sg2_steer_1.model +++ b/param/dxl_model/ffw_sg2_steer_1.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_steer_2.model b/param/dxl_model/ffw_sg2_steer_2.model index 8288119..54bd78b 100644 --- a/param/dxl_model/ffw_sg2_steer_2.model +++ b/param/dxl_model/ffw_sg2_steer_2.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ffw_sg2_steer_3.model b/param/dxl_model/ffw_sg2_steer_3.model index 22a9c8b..914e796 100644 --- a/param/dxl_model/ffw_sg2_steer_3.model +++ b/param/dxl_model/ffw_sg2_steer_3.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/h42_20_s300_ra.model b/param/dxl_model/h42_20_s300_ra.model index fc09a0d..0936df9 100644 --- a/param/dxl_model/h42_20_s300_ra.model +++ b/param/dxl_model/h42_20_s300_ra.model @@ -1,18 +1,13 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 303750 -value_of_min_radian_position -303750 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000010342691863670101 rad signed 0.0 +Goal Position 0.000010342691863670101 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 + [control table] Address Size Data Name diff --git a/param/dxl_model/h54_100_s500_ra.model b/param/dxl_model/h54_100_s500_ra.model index f7f4016..bf34627 100644 --- a/param/dxl_model/h54_100_s500_ra.model +++ b/param/dxl_model/h54_100_s500_ra.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 501923 -value_of_min_radian_position -501923 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000006259112759506524 rad signed 0.0 +Goal Position 0.000006259112759506524 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/h54_200_s500_ra.model b/param/dxl_model/h54_200_s500_ra.model index f7f4016..bf34627 100644 --- a/param/dxl_model/h54_200_s500_ra.model +++ b/param/dxl_model/h54_200_s500_ra.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 501923 -value_of_min_radian_position -501923 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000006259112759506524 rad signed 0.0 +Goal Position 0.000006259112759506524 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/m42_10_s260_ra.model b/param/dxl_model/m42_10_s260_ra.model index 6c76c9a..a03d0bb 100644 --- a/param/dxl_model/m42_10_s260_ra.model +++ b/param/dxl_model/m42_10_s260_ra.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 263187 -value_of_min_radian_position -263187 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011936731881095164 rad signed 0.0 +Goal Position 0.000011936731881095164 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/m54_40_s250_ra.model b/param/dxl_model/m54_40_s250_ra.model index 8db5473..e2b349c 100644 --- a/param/dxl_model/m54_40_s250_ra.model +++ b/param/dxl_model/m54_40_s250_ra.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 251417 -value_of_min_radian_position -251417 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.00001249554586042230 rad signed 0.0 +Goal Position 0.00001249554586042230 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/m54_60_s250_ra.model b/param/dxl_model/m54_60_s250_ra.model index 8db5473..e2b349c 100644 --- a/param/dxl_model/m54_60_s250_ra.model +++ b/param/dxl_model/m54_60_s250_ra.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 251417 -value_of_min_radian_position -251417 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.00001249554586042230 rad signed 0.0 +Goal Position 0.00001249554586042230 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/mx_106.model b/param/dxl_model/mx_106.model index 7404a8a..c7defa4 100644 --- a/param/dxl_model/mx_106.model +++ b/param/dxl_model/mx_106.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/mx_28.model b/param/dxl_model/mx_28.model index ef6755a..367b6ed 100644 --- a/param/dxl_model/mx_28.model +++ b/param/dxl_model/mx_28.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/mx_64.model b/param/dxl_model/mx_64.model index 7404a8a..c7defa4 100644 --- a/param/dxl_model/mx_64.model +++ b/param/dxl_model/mx_64.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ph42_020_s300.model b/param/dxl_model/ph42_020_s300.model index 9945d0e..f6fe3c1 100644 --- a/param/dxl_model/ph42_020_s300.model +++ b/param/dxl_model/ph42_020_s300.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 303750 -value_of_min_radian_position -303750 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000010342691863670101 rad signed 0.0 +Goal Position 0.000010342691863670101 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ph54_100_s500.model b/param/dxl_model/ph54_100_s500.model index 0ac4491..518672e 100644 --- a/param/dxl_model/ph54_100_s500.model +++ b/param/dxl_model/ph54_100_s500.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 501923 -value_of_min_radian_position -501923 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000006259112759506524 rad signed 0.0 +Goal Position 0.000006259112759506524 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ph54_200_s500.model b/param/dxl_model/ph54_200_s500.model index 0ac4491..518672e 100644 --- a/param/dxl_model/ph54_200_s500.model +++ b/param/dxl_model/ph54_200_s500.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 501923 -value_of_min_radian_position -501923 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000006259112759506524 rad signed 0.0 +Goal Position 0.000006259112759506524 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/pm42_010_s260.model b/param/dxl_model/pm42_010_s260.model index 7c91a61..a302b7a 100644 --- a/param/dxl_model/pm42_010_s260.model +++ b/param/dxl_model/pm42_010_s260.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 263187 -value_of_min_radian_position -263187 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.000011936731881095164 rad signed 0.0 +Goal Position 0.000011936731881095164 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/pm54_040_s250.model b/param/dxl_model/pm54_040_s250.model index fe0228a..9355d75 100644 --- a/param/dxl_model/pm54_040_s250.model +++ b/param/dxl_model/pm54_040_s250.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 251417 -value_of_min_radian_position -251417 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.00001249554586042230 rad signed 0.0 +Goal Position 0.00001249554586042230 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/pm54_060_s250.model b/param/dxl_model/pm54_060_s250.model index fe0228a..9355d75 100644 --- a/param/dxl_model/pm54_060_s250.model +++ b/param/dxl_model/pm54_060_s250.model @@ -1,18 +1,12 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 251417 -value_of_min_radian_position -251417 -min_radian -3.14159265 -max_radian 3.14159265 - [unit info] -Data Name value unit Sign Type -Present Velocity 0.0010471976 rad/s signed -Goal Velocity 0.0010471976 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Data Name value unit Sign Type Offset +Present Velocity 0.0010471976 rad/s signed 0.0 +Goal Velocity 0.0010471976 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.00001249554586042230 rad signed 0.0 +Goal Position 0.00001249554586042230 rad signed 0.0 +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/rh_p12_rn.model b/param/dxl_model/rh_p12_rn.model index c65812b..fa7b45b 100644 --- a/param/dxl_model/rh_p12_rn.model +++ b/param/dxl_model/rh_p12_rn.model @@ -12,7 +12,7 @@ Present Velocity 0.0119380521 rad/s signed Goal Velocity 0.0119380521 rad/s signed Present Current 1.0 raw signed Goal Current 1.0 raw signed -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_m181.model b/param/dxl_model/xc330_m181.model index e5617bf..6b0d506 100644 --- a/param/dxl_model/xc330_m181.model +++ b/param/dxl_model/xc330_m181.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_m181_fw52.model b/param/dxl_model/xc330_m181_fw52.model index 0b987e7..39cb598 100644 --- a/param/dxl_model/xc330_m181_fw52.model +++ b/param/dxl_model/xc330_m181_fw52.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_m288.model b/param/dxl_model/xc330_m288.model index e5617bf..6b0d506 100644 --- a/param/dxl_model/xc330_m288.model +++ b/param/dxl_model/xc330_m288.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_m288_fw52.model b/param/dxl_model/xc330_m288_fw52.model index 0b987e7..39cb598 100644 --- a/param/dxl_model/xc330_m288_fw52.model +++ b/param/dxl_model/xc330_m288_fw52.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_t181.model b/param/dxl_model/xc330_t181.model index ff95eaa..2cf1ae4 100644 --- a/param/dxl_model/xc330_t181.model +++ b/param/dxl_model/xc330_t181.model @@ -6,7 +6,7 @@ Present Current 0.0006709470296015791 N m signed 0.0 Goal Current 0.0006709470296015791 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_t181_fw52.model b/param/dxl_model/xc330_t181_fw52.model index aa9325a..aca648c 100644 --- a/param/dxl_model/xc330_t181_fw52.model +++ b/param/dxl_model/xc330_t181_fw52.model @@ -6,7 +6,7 @@ Present Current 0.0006709470296015791 N m signed 0.0 Goal Current 0.0006709470296015791 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_t288.model b/param/dxl_model/xc330_t288.model index 8b1e433..bd5289b 100644 --- a/param/dxl_model/xc330_t288.model +++ b/param/dxl_model/xc330_t288.model @@ -6,7 +6,7 @@ Present Current 0.0009674796739867748 N m signed 0.0 Goal Current 0.0009674796739867748 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc330_t288_fw52.model b/param/dxl_model/xc330_t288_fw52.model index 694994d..ea92f25 100644 --- a/param/dxl_model/xc330_t288_fw52.model +++ b/param/dxl_model/xc330_t288_fw52.model @@ -6,7 +6,7 @@ Present Current 0.0009674796739867748 N m signed 0.0 Goal Current 0.0009674796739867748 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc430_w150.model b/param/dxl_model/xc430_w150.model index 8f6ce17..4459483 100644 --- a/param/dxl_model/xc430_w150.model +++ b/param/dxl_model/xc430_w150.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc430_w240.model b/param/dxl_model/xc430_w240.model index 8f6ce17..4459483 100644 --- a/param/dxl_model/xc430_w240.model +++ b/param/dxl_model/xc430_w240.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xd430_t210.model b/param/dxl_model/xd430_t210.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xd430_t210.model +++ b/param/dxl_model/xd430_t210.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xd430_t350.model b/param/dxl_model/xd430_t350.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xd430_t350.model +++ b/param/dxl_model/xd430_t350.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xd540_t150.model b/param/dxl_model/xd540_t150.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xd540_t150.model +++ b/param/dxl_model/xd540_t150.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xd540_t270.model b/param/dxl_model/xd540_t270.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xd540_t270.model +++ b/param/dxl_model/xd540_t270.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh430_v210.model b/param/dxl_model/xh430_v210.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xh430_v210.model +++ b/param/dxl_model/xh430_v210.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh430_v350.model b/param/dxl_model/xh430_v350.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xh430_v350.model +++ b/param/dxl_model/xh430_v350.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh430_w210.model b/param/dxl_model/xh430_w210.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xh430_w210.model +++ b/param/dxl_model/xh430_w210.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh430_w350.model b/param/dxl_model/xh430_w350.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xh430_w350.model +++ b/param/dxl_model/xh430_w350.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh540_v150.model b/param/dxl_model/xh540_v150.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xh540_v150.model +++ b/param/dxl_model/xh540_v150.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh540_v270.model b/param/dxl_model/xh540_v270.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xh540_v270.model +++ b/param/dxl_model/xh540_v270.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh540_w150.model b/param/dxl_model/xh540_w150.model index d343814..3b26818 100644 --- a/param/dxl_model/xh540_w150.model +++ b/param/dxl_model/xh540_w150.model @@ -6,7 +6,7 @@ Present Current 0.0045 N m signed 0.0 Goal Current 0.0045 N m signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xh540_w270.model b/param/dxl_model/xh540_w270.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xh540_w270.model +++ b/param/dxl_model/xh540_w270.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xl330_m077.model b/param/dxl_model/xl330_m077.model index e5617bf..6b0d506 100644 --- a/param/dxl_model/xl330_m077.model +++ b/param/dxl_model/xl330_m077.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xl330_m077_fw52.model b/param/dxl_model/xl330_m077_fw52.model index 0b987e7..39cb598 100644 --- a/param/dxl_model/xl330_m077_fw52.model +++ b/param/dxl_model/xl330_m077_fw52.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xl330_m288.model b/param/dxl_model/xl330_m288.model index e5617bf..6b0d506 100644 --- a/param/dxl_model/xl330_m288.model +++ b/param/dxl_model/xl330_m288.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xl330_m288_fw52.model b/param/dxl_model/xl330_m288_fw52.model index 0b987e7..39cb598 100644 --- a/param/dxl_model/xl330_m288_fw52.model +++ b/param/dxl_model/xl330_m288_fw52.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xl430_w250.model b/param/dxl_model/xl430_w250.model index 8f6ce17..4459483 100644 --- a/param/dxl_model/xl430_w250.model +++ b/param/dxl_model/xl430_w250.model @@ -4,7 +4,7 @@ Present Velocity 0.0239691227 rad/s signed 0.0 Goal Velocity 0.0239691227 rad/s signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xm430_w210.model b/param/dxl_model/xm430_w210.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xm430_w210.model +++ b/param/dxl_model/xm430_w210.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xm430_w350.model b/param/dxl_model/xm430_w350.model index 71652a3..bcbe162 100644 --- a/param/dxl_model/xm430_w350.model +++ b/param/dxl_model/xm430_w350.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xm540_w150.model b/param/dxl_model/xm540_w150.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xm540_w150.model +++ b/param/dxl_model/xm540_w150.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xm540_w270.model b/param/dxl_model/xm540_w270.model index 97756de..e82ea32 100644 --- a/param/dxl_model/xm540_w270.model +++ b/param/dxl_model/xm540_w270.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xw430_t200.model b/param/dxl_model/xw430_t200.model index 002c09e..5d409f1 100644 --- a/param/dxl_model/xw430_t200.model +++ b/param/dxl_model/xw430_t200.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xw430_t333.model b/param/dxl_model/xw430_t333.model index 002c09e..5d409f1 100644 --- a/param/dxl_model/xw430_t333.model +++ b/param/dxl_model/xw430_t333.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xw540_h260.model b/param/dxl_model/xw540_h260.model index 002c09e..5d409f1 100644 --- a/param/dxl_model/xw540_h260.model +++ b/param/dxl_model/xw540_h260.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xw540_t140.model b/param/dxl_model/xw540_t140.model index 002c09e..5d409f1 100644 --- a/param/dxl_model/xw540_t140.model +++ b/param/dxl_model/xw540_t140.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xw540_t260.model b/param/dxl_model/xw540_t260.model index 002c09e..5d409f1 100644 --- a/param/dxl_model/xw540_t260.model +++ b/param/dxl_model/xw540_t260.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.0015339807878856412 rad signed -3.14159265359 Goal Position 0.0015339807878856412 rad signed -3.14159265359 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_a051.model b/param/dxl_model/ym070_210_a051.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym070_210_a051.model +++ b/param/dxl_model/ym070_210_a051.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_a099.model b/param/dxl_model/ym070_210_a099.model index 379b7ee..9e5b7b6 100644 --- a/param/dxl_model/ym070_210_a099.model +++ b/param/dxl_model/ym070_210_a099.model @@ -6,7 +6,7 @@ Present Current 0.04 N m signed 0.0 Goal Current 0.04 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_b001.model b/param/dxl_model/ym070_210_b001.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym070_210_b001.model +++ b/param/dxl_model/ym070_210_b001.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_m001.model b/param/dxl_model/ym070_210_m001.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym070_210_m001.model +++ b/param/dxl_model/ym070_210_m001.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_r051.model b/param/dxl_model/ym070_210_r051.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym070_210_r051.model +++ b/param/dxl_model/ym070_210_r051.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym070_210_r099.model b/param/dxl_model/ym070_210_r099.model index 379b7ee..9e5b7b6 100644 --- a/param/dxl_model/ym070_210_r099.model +++ b/param/dxl_model/ym070_210_r099.model @@ -6,7 +6,7 @@ Present Current 0.04 N m signed 0.0 Goal Current 0.04 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_a051.model b/param/dxl_model/ym080_230_a051.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym080_230_a051.model +++ b/param/dxl_model/ym080_230_a051.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_a099.model b/param/dxl_model/ym080_230_a099.model index a8f7c59..22333e7 100644 --- a/param/dxl_model/ym080_230_a099.model +++ b/param/dxl_model/ym080_230_a099.model @@ -6,7 +6,7 @@ Present Current 0.07692307692 N m signed 0.0 Goal Current 0.07692307692 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_b001.model b/param/dxl_model/ym080_230_b001.model index 7b9dff7..6c149fe 100644 --- a/param/dxl_model/ym080_230_b001.model +++ b/param/dxl_model/ym080_230_b001.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_m001.model b/param/dxl_model/ym080_230_m001.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym080_230_m001.model +++ b/param/dxl_model/ym080_230_m001.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_r051.model b/param/dxl_model/ym080_230_r051.model index da2a869..15ee310 100644 --- a/param/dxl_model/ym080_230_r051.model +++ b/param/dxl_model/ym080_230_r051.model @@ -6,7 +6,7 @@ Present Current 1.0 raw signed 0.0 Goal Current 1.0 raw signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/ym080_230_r099.model b/param/dxl_model/ym080_230_r099.model index a8f7c59..22333e7 100644 --- a/param/dxl_model/ym080_230_r099.model +++ b/param/dxl_model/ym080_230_r099.model @@ -6,7 +6,7 @@ Present Current 0.07692307692 N m signed 0.0 Goal Current 0.07692307692 N m signed 0.0 Present Position 0.000011984224905356572 rad signed 0.0 Goal Position 0.000011984224905356572 rad signed 0.0 -Present Input Voltage 0.1 V unsigned +Present Input Voltage 0.1 V unsigned 0.0 [control table] Address Size Data Name From ee76bcadf2472574648761b8dcd54db95f333cf5 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 12:25:40 +0900 Subject: [PATCH 17/26] Update unit info for rh_p12_rna --- param/dxl_model/omy_end_rh_p12_rn.model | 10 ++-------- param/dxl_model/rh_p12_rn.model | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/param/dxl_model/omy_end_rh_p12_rn.model b/param/dxl_model/omy_end_rh_p12_rn.model index 8e7a4b3..e4ad86c 100644 --- a/param/dxl_model/omy_end_rh_p12_rn.model +++ b/param/dxl_model/omy_end_rh_p12_rn.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 740 -value_of_min_radian_position -740 -min_radian -1.099 -max_radian 1.099 - [unit info] Data Name value unit Sign Type Present Velocity 0.0119380521 rad/s signed Goal Velocity 0.0119380521 rad/s signed Present Current 1.0 raw signed Goal Current 1.0 raw signed +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 [control table] Address Size Data Name diff --git a/param/dxl_model/rh_p12_rn.model b/param/dxl_model/rh_p12_rn.model index fa7b45b..b973b30 100644 --- a/param/dxl_model/rh_p12_rn.model +++ b/param/dxl_model/rh_p12_rn.model @@ -1,17 +1,11 @@ -[type info] -name value -value_of_zero_radian_position 0 -value_of_max_radian_position 740 -value_of_min_radian_position -740 -min_radian -1.099 -max_radian 1.099 - [unit info] Data Name value unit Sign Type Present Velocity 0.0119380521 rad/s signed Goal Velocity 0.0119380521 rad/s signed Present Current 1.0 raw signed Goal Current 1.0 raw signed +Present Position 0.0015339807878856412 rad signed -3.14159265359 +Goal Position 0.0015339807878856412 rad signed -3.14159265359 Present Input Voltage 0.1 V unsigned 0.0 [control table] From 73e1f9726d5c86c4c251922f364f3d5950261105 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 16:53:20 +0900 Subject: [PATCH 18/26] refactor: Standardize formatting in Dynamixel interface header and implementation files for improved readability --- .../dynamixel/dynamixel.hpp | 13 +- .../dynamixel/dynamixel_info.hpp | 12 +- .../dynamixel_hardware_interface.hpp | 10 +- src/dynamixel/dynamixel.cpp | 146 ++++++++++++------ src/dynamixel/dynamixel_info.cpp | 16 +- src/dynamixel_hardware_interface.cpp | 39 +++-- 6 files changed, 160 insertions(+), 76 deletions(-) diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index 3c41990..3d610d4 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp @@ -264,8 +264,8 @@ class Dynamixel // Set Dxl Option // DxlError SetOperatingMode(uint8_t id, uint8_t dynamixel_mode); - DxlError DynamixelEnable(const std::vector> & comm_id_id_arr); - DxlError DynamixelDisable(const std::vector> & comm_id_id_arr); + DxlError DynamixelEnable(const std::vector> & comm_id_id_arr); + DxlError DynamixelDisable(const std::vector> & comm_id_id_arr); // DXL Item Write DxlError WriteItem(uint8_t comm_id, uint8_t id, std::string item_name, uint32_t data); @@ -281,15 +281,18 @@ class Dynamixel uint32_t GetReadItemDataBuf(uint8_t id, std::string item_name); DynamixelInfo GetDxlInfo() {return dxl_info_;} - std::map, bool> GetDxlTorqueState() {return torque_state_;} + std::map, bool> GetDxlTorqueState() {return torque_state_;} static std::string DxlErrorToString(DxlError error_num); DxlError ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num); - DxlError ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version); + DxlError ReadDxlModelFile( + uint8_t comm_id, uint8_t id, uint16_t model_num, + uint8_t firmware_version); DxlError ReadFirmwareVersion(uint8_t comm_id, uint8_t id, uint8_t & firmware_version); - DxlError InitTorqueStates(std::vector> comm_id_id_arr, + DxlError InitTorqueStates( + std::vector> comm_id_id_arr, bool disable_torque = false); void OverrideUnitInfo( diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp index 90ec669..b8a8442 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel_info.hpp @@ -81,7 +81,9 @@ class DynamixelInfo void ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num); void ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version); - bool GetDxlControlItem(uint8_t comm_id, uint8_t id, std::string item_name, uint16_t & addr, uint8_t & size); + bool GetDxlControlItem( + uint8_t comm_id, uint8_t id, std::string item_name, uint16_t & addr, + uint8_t & size); bool CheckDxlControlItem(uint8_t comm_id, uint8_t id, std::string item_name); bool GetDxlUnitValue(uint8_t comm_id, uint8_t id, std::string data_name, double & unit_value); @@ -105,7 +107,9 @@ class DynamixelInfo // Template implementations template -double DynamixelInfo::ConvertValueToUnit(uint8_t comm_id, uint8_t id, std::string data_name, T value) +double DynamixelInfo::ConvertValueToUnit( + uint8_t comm_id, uint8_t id, std::string data_name, + T value) { auto & info = dxl_info_by_comm_[comm_id][id]; auto it = info.unit_map.find(data_name); @@ -121,7 +125,9 @@ double DynamixelInfo::ConvertValueToUnit(uint8_t comm_id, uint8_t id, std::strin } template -T DynamixelInfo::ConvertUnitToValue(uint8_t comm_id, uint8_t id, std::string data_name, double unit_value) +T DynamixelInfo::ConvertUnitToValue( + uint8_t comm_id, uint8_t id, std::string data_name, + double unit_value) { auto & info = dxl_info_by_comm_[comm_id][id]; auto it = info.unit_map.find(data_name); diff --git a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp index 768ab53..bb26f38 100644 --- a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp +++ b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp @@ -183,7 +183,7 @@ class DynamixelHardware : public std::map dxl_error_code_; DxlTorqueStatus dxl_torque_status_; std::map, bool /*enable*/> dxl_torque_state_; - std::vector> torque_enabled_comm_id_id_; + std::vector> torque_enabled_comm_id_id_; double err_timeout_ms_; rclcpp::Duration read_error_duration_{0, 0}; rclcpp::Duration write_error_duration_{0, 0}; @@ -228,13 +228,13 @@ class DynamixelHardware : public ///// dxl variable std::string port_name_; std::string baud_rate_; - std::vector> dxl_comm_id_id_; - std::vector> virtual_dxl_comm_id_id_; + std::vector> dxl_comm_id_id_; + std::vector> virtual_dxl_comm_id_id_; - std::vector> sensor_comm_id_id_; + std::vector> sensor_comm_id_id_; std::map sensor_item_; - std::vector> controller_comm_id_id_; + std::vector> controller_comm_id_id_; std::map controller_item_; ///// handler variable diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 11a4985..31773ae 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -86,18 +86,22 @@ DxlError Dynamixel::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model dxl_info_.ReadDxlModelFile(comm_id, id, model_num); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", + comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } -DxlError Dynamixel::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version) +DxlError Dynamixel::ReadDxlModelFile( + uint8_t comm_id, uint8_t id, uint16_t model_num, + uint8_t firmware_version) { try { dxl_info_.ReadDxlModelFile(comm_id, id, model_num, firmware_version); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", + comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } @@ -109,12 +113,15 @@ DxlError Dynamixel::ReadFirmwareVersion(uint8_t comm_id, uint8_t id, uint8_t & f if (result == DxlError::OK) { firmware_version = static_cast(fw_version_data); } else { - fprintf(stderr, "[ReadFirmwareVersion][comm_id:%03d][ID:%03d] Failed to read firmware version\n", comm_id, id); + fprintf(stderr, + "[ReadFirmwareVersion][comm_id:%03d][ID:%03d] Failed to read firmware version\n", comm_id, + id); } return result; } -DxlError Dynamixel::InitTorqueStates(std::vector> comm_id_id_arr, +DxlError Dynamixel::InitTorqueStates( + std::vector> comm_id_id_arr, bool disable_torque) { for (auto it_pair : comm_id_id_arr) { @@ -125,7 +132,8 @@ DxlError Dynamixel::InitTorqueStates(std::vector> com uint32_t torque_state = 0; DxlError result = ReadItem(it_comm, it_id, "Torque Enable", torque_state); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error reading torque state\n", it_comm, it_id); + fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error reading torque state\n", + it_comm, it_id); return result; } @@ -134,10 +142,13 @@ DxlError Dynamixel::InitTorqueStates(std::vector> com if (torque_state_[{it_comm, it_id}] == TORQUE_ON) { if (disable_torque) { fprintf( - stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, disabling torque\n", it_comm, it_id); + stderr, + "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, disabling torque\n", + it_comm, it_id); result = WriteItem(it_comm, it_id, "Torque Enable", TORQUE_OFF); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error disabling torque\n", it_comm, it_id); + fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error disabling torque\n", + it_comm, it_id); return result; } torque_state_[{it_comm, it_id}] = TORQUE_OFF; @@ -154,12 +165,14 @@ DxlError Dynamixel::InitTorqueStates(std::vector> com } fprintf( - stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Current torque state: %s\n", it_comm, it_id, + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Current torque state: %s\n", it_comm, + it_id, torque_state_[{it_comm, it_id}] ? "ON" : "OFF"); } } catch (const std::exception & e) { fprintf( - stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error checking control item: %s\n", it_comm, it_id, + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error checking control item: %s\n", + it_comm, it_id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -246,7 +259,8 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) try { dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, + id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -322,7 +336,8 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) try { dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, id, e.what()); + fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, + id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -333,7 +348,8 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number, firmware_version); } catch (const std::exception & e) { fprintf( - stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", + stderr, + "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", comm_id, id, e.what()); } } @@ -400,7 +416,8 @@ DxlError Dynamixel::SetDxlReadItems( uint8_t ITEM_SIZE; if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, id, + stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, + id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -508,7 +525,8 @@ DxlError Dynamixel::SetDxlWriteItems( uint8_t ITEM_SIZE; if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( - stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, id, + stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, + id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -588,7 +606,7 @@ DxlError Dynamixel::SetMultiDxlWrite() } } -DxlError Dynamixel::DynamixelEnable(const std::vector> & comm_id_id_arr) +DxlError Dynamixel::DynamixelEnable(const std::vector> & comm_id_id_arr) { for (auto p : comm_id_id_arr) { uint8_t comm_id = p.first; @@ -598,7 +616,8 @@ DxlError Dynamixel::DynamixelEnable(const std::vector } if (torque_state_[{comm_id, id}] == TORQUE_OFF) { if (WriteItem(comm_id, id, "Torque Enable", TORQUE_ON) < 0) { - fprintf(stderr, "[comm_id:%03d][ID:%03d] Cannot write \"Torque On\" command!\n", comm_id, id); + fprintf(stderr, "[comm_id:%03d][ID:%03d] Cannot write \"Torque On\" command!\n", comm_id, + id); return DxlError::ITEM_WRITE_FAIL; } torque_state_[{comm_id, id}] = TORQUE_ON; @@ -608,7 +627,9 @@ DxlError Dynamixel::DynamixelEnable(const std::vector return DxlError::OK; } -DxlError Dynamixel::DynamixelDisable(const std::vector> & comm_id_id_arr) +DxlError Dynamixel::DynamixelDisable( + const std::vector> & comm_id_id_arr) { DxlError result = DxlError::OK; for (auto p : comm_id_id_arr) { @@ -619,7 +640,8 @@ DxlError Dynamixel::DynamixelDisable(const std::vector> pairs; + std::vector> pairs; for (auto it_read_data : read_data_list_) { pairs.emplace_back(it_read_data.comm_id, it_read_data.comm_id); } @@ -1184,7 +1211,9 @@ DxlError Dynamixel::SetFastSyncReadHandler(std::vector id_arr) uint8_t IN_SIZE = 0; for (auto it_id : id_arr) { - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + IN_SIZE) == false) + { fprintf( stderr, "Fail to set indirect address fast sync read. " @@ -1240,7 +1269,9 @@ DxlError Dynamixel::SetSyncReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + IN_SIZE) == false) + { fprintf( stderr, "Fail to set indirect address sync read. " @@ -1415,8 +1446,10 @@ DxlError Dynamixel::SetBulkReadItemAndHandler() } { - std::vector> pairs; - for (auto cid : indirect_id_arr) pairs.emplace_back(cid, cid); + std::vector> pairs; + for (auto cid : indirect_id_arr) { + pairs.emplace_back(cid, cid); + } DynamixelDisable(pairs); } ResetIndirectRead(indirect_id_arr); @@ -1474,7 +1507,9 @@ DxlError Dynamixel::SetFastBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + IN_SIZE) == false) + { fprintf( stderr, "Fail to set indirect address fast bulk read. " @@ -1526,7 +1561,9 @@ DxlError Dynamixel::SetBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + IN_SIZE) == false) + { fprintf( stderr, "Fail to set indirect address bulk read. " @@ -1937,8 +1974,10 @@ DxlError Dynamixel::SetSyncWriteItemAndHandler() } { - std::vector> pairs; - for (auto cid : id_arr) pairs.emplace_back(cid, cid); + std::vector> pairs; + for (auto cid : id_arr) { + pairs.emplace_back(cid, cid); + } DynamixelDisable(pairs); } ResetIndirectWrite(id_arr); @@ -2025,7 +2064,8 @@ DxlError Dynamixel::SetDxlValueToSyncWrite() dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility @@ -2137,8 +2177,10 @@ DxlError Dynamixel::SetBulkWriteItemAndHandler() // Handle indirect writes { - std::vector> pairs; - for (auto cid : indirect_id_arr) pairs.emplace_back(cid, cid); + std::vector> pairs; + for (auto cid : indirect_id_arr) { + pairs.emplace_back(cid, cid); + } DynamixelDisable(pairs); } ResetIndirectWrite(indirect_id_arr); @@ -2180,7 +2222,9 @@ DxlError Dynamixel::SetBulkWriteHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Write", IN_ADDR, IN_SIZE) == false) { + if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Write", IN_ADDR, + IN_SIZE) == false) + { fprintf( stderr, "Fail to set indirect address bulk write. " @@ -2219,16 +2263,17 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() // Check if there is unit info for this item double unit_value; bool is_signed; - if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_name, unit_value) && - dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) + if (dxl_info_.GetDxlUnitValue(comm_id, ID, item_name, unit_value) && + dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility if (item_name == "Goal Position") { - int32_t goal_position = dxl_info_.ConvertRadianToValue(comm_id, ID, data); + int32_t goal_position = dxl_info_.ConvertRadianToValue(comm_id, ID, data); WriteValueToBuffer( param_write_value, added_byte, static_cast(goal_position), 4); @@ -2265,7 +2310,8 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility @@ -2402,26 +2448,32 @@ uint32_t Dynamixel::ConvertUnitValueToRawValue( { if (size == 1) { if (is_signed) { - int8_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + int8_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint8_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + uint8_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return static_cast(unsigned_value); } } else if (size == 2) { if (is_signed) { - int16_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + int16_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint16_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + uint16_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return static_cast(unsigned_value); } } else if (size == 4) { if (is_signed) { - int32_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + int32_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint32_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, unit_value); + uint32_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, + unit_value); return unsigned_value; } } diff --git a/src/dynamixel/dynamixel_info.cpp b/src/dynamixel/dynamixel_info.cpp index 29bc55a..63c3095 100644 --- a/src/dynamixel/dynamixel_info.cpp +++ b/src/dynamixel/dynamixel_info.cpp @@ -58,7 +58,9 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model ReadDxlModelFile(comm_id, id, model_num, 0); } -void DynamixelInfo::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model_num, uint8_t firmware_version) +void DynamixelInfo::ReadDxlModelFile( + uint8_t comm_id, uint8_t id, uint16_t model_num, + uint8_t firmware_version) { std::string path = dxl_model_file_dir + "/"; @@ -401,7 +403,9 @@ double DynamixelInfo::ConvertValueToRadian(uint8_t comm_id, uint8_t id, int32_t } } -bool DynamixelInfo::GetDxlUnitValue(uint8_t comm_id, uint8_t id, std::string data_name, double & unit_value) +bool DynamixelInfo::GetDxlUnitValue( + uint8_t comm_id, uint8_t id, std::string data_name, + double & unit_value) { auto cit = dxl_info_by_comm_.find(comm_id); if (cit != dxl_info_by_comm_.end()) { @@ -417,7 +421,9 @@ bool DynamixelInfo::GetDxlUnitValue(uint8_t comm_id, uint8_t id, std::string dat return false; } -bool DynamixelInfo::GetDxlSignType(uint8_t comm_id, uint8_t id, std::string data_name, bool & is_signed) +bool DynamixelInfo::GetDxlSignType( + uint8_t comm_id, uint8_t id, std::string data_name, + bool & is_signed) { auto cit = dxl_info_by_comm_.find(comm_id); if (cit != dxl_info_by_comm_.end()) { @@ -433,7 +439,9 @@ bool DynamixelInfo::GetDxlSignType(uint8_t comm_id, uint8_t id, std::string data return false; } -bool DynamixelInfo::GetDxlOffsetValue(uint8_t comm_id, uint8_t id, std::string data_name, double & offset_value) +bool DynamixelInfo::GetDxlOffsetValue( + uint8_t comm_id, uint8_t id, std::string data_name, + double & offset_value) { auto cit = dxl_info_by_comm_.find(comm_id); if (cit != dxl_info_by_comm_.end()) { diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index d96a980..ad8c01f 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -180,10 +180,12 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } else if (type == "controller") { controller_comm_id_id_.emplace_back(comm_id, id); } else if (type == "virtual_dxl") { - dxl_comm_->ReadDxlModelFile(comm_id, id, static_cast(stoi(gpio.parameters.at("model_num")))); + dxl_comm_->ReadDxlModelFile(comm_id, id, + static_cast(stoi(gpio.parameters.at("model_num")))); virtual_dxl_comm_id_id_.emplace_back(comm_id, id); } else if (type == "virtual_sensor") { - dxl_comm_->ReadDxlModelFile(comm_id, id, static_cast(stoi(gpio.parameters.at("model_num")))); + dxl_comm_->ReadDxlModelFile(comm_id, id, + static_cast(stoi(gpio.parameters.at("model_num")))); } else { RCLCPP_ERROR_STREAM(logger_, "Invalid DXL / Sensor type"); exit(-1); @@ -197,7 +199,8 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( std::vector reboot_dxl; for (const hardware_interface::ComponentInfo & gpio : info_.gpios) { if (gpio.parameters.find("Reboot") != gpio.parameters.end() && - std::stoi(gpio.parameters.at("Reboot")) != 0) { + std::stoi(gpio.parameters.at("Reboot")) != 0) + { reboot_dxl.push_back(static_cast(stoi(gpio.parameters.at("ID")))); } } @@ -870,18 +873,27 @@ bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) if (parts.size() < 4) {continue;} std::string data_name = parts[0]; double unit_multiplier = 1.0; - try {unit_multiplier = std::stod(parts[1]);} catch (...) {unit_multiplier = 1.0;} + try { + unit_multiplier = std::stod(parts[1]); + } catch (...) { + unit_multiplier = 1.0; + } bool is_signed = (parts[3] == std::string("signed")); double offset = 0.0; if (parts.size() >= 5) { - try {offset = std::stod(parts[4]);} catch (...) {offset = 0.0;} + try { + offset = std::stod(parts[4]); + } catch (...) { + offset = 0.0; + } } dxl_comm_->OverrideUnitInfo(comm_id, id, data_name, unit_multiplier, is_signed, offset); RCLCPP_INFO_STREAM( logger_, "[ID:" << std::to_string(id) << "] override [unit info] for '" << data_name - << "' = multiplier:" << unit_multiplier << ", signed:" << (is_signed?"true":"false") - << ", offset:" << offset); + << "' = multiplier:" << unit_multiplier << ", signed:" << + (is_signed ? "true" : "false") + << ", offset:" << offset); } } } @@ -901,7 +913,8 @@ bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) if (param_name == "Operating Mode") { RCLCPP_INFO_STREAM( logger_, - "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << + "] item_name: " << param_name.c_str() << "\tdata: " << param.second); if (dxl_comm_->WriteItem( comm_id, id, param_name, @@ -923,7 +936,8 @@ bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) if (param_name.find("Limit") != std::string::npos) { RCLCPP_INFO_STREAM( logger_, - "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << + "] item_name: " << param_name.c_str() << "\tdata: " << param.second); if (dxl_comm_->WriteItem( comm_id, id, param_name, @@ -946,7 +960,8 @@ bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) } RCLCPP_INFO_STREAM( logger_, - "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << "] item_name: " << param_name.c_str() << "\tdata: " << + "[InitItem][comm_id:" << std::to_string(comm_id) << "][ID:" << std::to_string(id) << + "] item_name: " << param_name.c_str() << "\tdata: " << param.second); if (dxl_comm_->WriteItem( comm_id, id, param_name, @@ -1212,7 +1227,7 @@ bool DynamixelHardware::SetMatrix() RCLCPP_ERROR_STREAM( logger_, "Parameter 'transmission_to_joint_matrix' has " << d_vec.size() - << " elements, expected " << expected_tj); + << " elements, expected " << expected_tj); return false; } for (size_t i = 0; i < num_of_joints_; i++) { @@ -1262,7 +1277,7 @@ bool DynamixelHardware::SetMatrix() RCLCPP_ERROR_STREAM( logger_, "Parameter 'joint_to_transmission_matrix' has " << d_vec.size() - << " elements, expected " << expected_jt); + << " elements, expected " << expected_jt); return false; } for (size_t i = 0; i < num_of_transmissions_; i++) { From 0477c6692e3585f26e32bf8fc38e948da7cd75dc Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 16:57:13 +0900 Subject: [PATCH 19/26] refactor: Add header to Dynamixel interface files for enhanced functionality --- include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp | 1 + .../dynamixel_hardware_interface.hpp | 1 + src/dynamixel/dynamixel.cpp | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index 3d610d4..70a5473 100644 --- a/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp +++ b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp @@ -28,6 +28,7 @@ #include #include #include +#include namespace dynamixel_hardware_interface { diff --git a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp index bb26f38..a1b61da 100644 --- a/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp +++ b/include/dynamixel_hardware_interface/dynamixel_hardware_interface.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "rclcpp/rclcpp.hpp" #include "ament_index_cpp/get_package_share_directory.hpp" diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 31773ae..99f9144 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -319,7 +319,8 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) } else { fprintf( stderr, - "[comm_id:%03d][ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", + "[comm_id:%03d][ID:%03d] Neither Hardware Error Status" + " nor Error Code control items available.\n", comm_id, id ); } From 8c3990f15edd30e9d0518ebd667673bcbc12e957 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 17:15:48 +0900 Subject: [PATCH 20/26] refactor: Improve code formatting and readability in SyncTable model generator and XML parser scripts --- scripts/hx_synctable_model_generator.py | 242 ++++++++++++++---------- scripts/xml_to_model_parser.py | 97 +++++----- 2 files changed, 194 insertions(+), 145 deletions(-) diff --git a/scripts/hx_synctable_model_generator.py b/scripts/hx_synctable_model_generator.py index 5f7d7a8..93ed3bd 100644 --- a/scripts/hx_synctable_model_generator.py +++ b/scripts/hx_synctable_model_generator.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -SyncTable-based Dynamixel Model File Generator +SyncTable-based Dynamixel Model File Generator. This script generates Dynamixel model files for hand finger joints and pressure sensors based on the SyncTable concept. The hand models are virtual Dynamixels that use SyncTable @@ -14,13 +14,14 @@ """ import os -from typing import Dict, List, Tuple, Optional +from typing import Dict, List, Tuple class SyncTableModelGenerator: """Generator for SyncTable-based Dynamixel model files.""" - def __init__(self, output_dir: str = ".", hx_model_file: str = "../param/dxl_model/hx5_d20_rl.model"): + def __init__(self, output_dir: str = '.', + hx_model_file: str = '../param/dxl_model/hx5_d20_rl.model') -> None: """Initialize the generator with output directory and hx model file.""" self.output_dir = output_dir self.hx_model_file = hx_model_file @@ -35,15 +36,45 @@ def __init__(self, output_dir: str = ".", hx_model_file: str = "../param/dxl_mod # Unit info constants self.finger_unit_info = { - "Present Current": {"value": "1.0", "unit": "raw", "sign_type": "signed", "offset": "0.0"}, - "Present Velocity": {"value": "0.0239691227", "unit": "rad/s", "sign_type": "signed", "offset": "0.0"}, - "Present Position": {"value": "0.0015339807878856412", "unit": "rad", "sign_type": "signed", "offset": "-3.14159265359"}, - "Goal Current": {"value": "1.0", "unit": "raw", "sign_type": "signed", "offset": "0.0"}, - "Goal Position": {"value": "0.0015339807878856412", "unit": "rad", "sign_type": "signed", "offset": "-3.14159265359"} + 'Present Current': { + 'value': '1.0', + 'unit': 'raw', + 'sign_type': 'signed', + 'offset': '0.0' + }, + 'Present Velocity': { + 'value': '0.0239691227', + 'unit': 'rad/s', + 'sign_type': 'signed', + 'offset': '0.0' + }, + 'Present Position': { + 'value': '0.0015339807878856412', + 'unit': 'rad', + 'sign_type': 'signed', + 'offset': '-3.14159265359' + }, + 'Goal Current': { + 'value': '1.0', + 'unit': 'raw', + 'sign_type': 'signed', + 'offset': '0.0' + }, + 'Goal Position': { + 'value': '0.0015339807878856412', + 'unit': 'rad', + 'sign_type': 'signed', + 'offset': '-3.14159265359' + } } self.pressure_unit_info = { - f"Present Pressure {i}": {"value": "1.0", "unit": "raw", "sign_type": "unsigned", "offset": "0.0"} + f'Present Pressure {i}': { + 'value': '1.0', + 'unit': 'raw', + 'sign_type': 'unsigned', + 'offset': '0.0' + } for i in range(1, 10) # 9 pressure sensors } @@ -55,36 +86,39 @@ def parse_hx_model_file(self) -> None: # Find SyncTable read and write data base addresses for line in lines: - if "SyncTable" in line and "Read Data 1" in line: + if 'SyncTable' in line and 'Read Data 1' in line: parts = line.strip().split('\t') if len(parts) >= 1: address = int(parts[0]) # Extract SyncTable number - synctable_num = int(line.split("SyncTable ")[1].split(" ")[0]) + synctable_num = int(line.split('SyncTable ')[1].split(' ')[0]) if synctable_num not in self.synctable_base_addresses: self.synctable_base_addresses[synctable_num] = {} # Only set if not already set (to get the first occurrence) if 'read_base' not in self.synctable_base_addresses[synctable_num]: self.synctable_base_addresses[synctable_num]['read_base'] = address - elif "SyncTable" in line and "Write Data 1" in line: + elif 'SyncTable' in line and 'Write Data 1' in line: parts = line.strip().split('\t') if len(parts) >= 1: address = int(parts[0]) # Extract SyncTable number - synctable_num = int(line.split("SyncTable ")[1].split(" ")[0]) + synctable_num = int(line.split('SyncTable ')[1].split(' ')[0]) if synctable_num not in self.synctable_base_addresses: self.synctable_base_addresses[synctable_num] = {} # Only set if not already set (to get the first occurrence) if 'write_base' not in self.synctable_base_addresses[synctable_num]: self.synctable_base_addresses[synctable_num]['write_base'] = address - print(f"Parsed {len(self.synctable_base_addresses)} SyncTables from {self.hx_model_file}") + print(f'Parsed {len(self.synctable_base_addresses)} SyncTables from ' + f'{self.hx_model_file}') for synctable_num, addresses in self.synctable_base_addresses.items(): - print(f" SyncTable {synctable_num}: read_base={addresses.get('read_base', 'N/A')}, write_base={addresses.get('write_base', 'N/A')}") + print(f' SyncTable {synctable_num}: ' + f'read_base={addresses.get("read_base", "N/A")}, ' + f'write_base={addresses.get("write_base", "N/A")}') except FileNotFoundError: - print(f"Warning: Could not find {self.hx_model_file}, using default addresses") + print(f'Warning: Could not find {self.hx_model_file}, using default addresses') # Set default addresses if file not found for i in range(1, 6): self.synctable_base_addresses[i] = { @@ -92,7 +126,7 @@ def parse_hx_model_file(self) -> None: 'write_base': 1141 + (i-1) * 72 } except Exception as e: - print(f"Error parsing {self.hx_model_file}: {e}") + print(f'Error parsing {self.hx_model_file}: {e}') # Set default addresses on error for i in range(1, 6): self.synctable_base_addresses[i] = { @@ -100,9 +134,11 @@ def parse_hx_model_file(self) -> None: 'write_base': 1141 + (i-1) * 72 } - def calculate_synctable_addresses(self, synctable_num: int, - finger_joints: List[int], - pressure_sensors: List[int]) -> Tuple[List[int], List[int]]: + def calculate_synctable_addresses( + self, synctable_num: int, + finger_joints: List[int], + pressure_sensors: List[int] + ) -> Tuple[List[int], List[int]]: """ Calculate addresses for SyncTable read and write data areas. @@ -116,7 +152,7 @@ def calculate_synctable_addresses(self, synctable_num: int, """ # Get base addresses from parsed hx model file if synctable_num not in self.synctable_base_addresses: - raise ValueError(f"SyncTable {synctable_num} not found in {self.hx_model_file}") + raise ValueError(f'SyncTable {synctable_num} not found in {self.hx_model_file}') base_read_addr = self.synctable_base_addresses[synctable_num]['read_base'] base_write_addr = self.synctable_base_addresses[synctable_num]['write_base'] @@ -145,7 +181,8 @@ def calculate_synctable_addresses(self, synctable_num: int, for sensor_num in pressure_sensors: # Each pressure sensor takes 9 bytes for read, 0 bytes for write # For pressure sensors: 9 values of size 1 each = 9 bytes total - sensor_read_addrs = list(range(current_read_addr, current_read_addr + self.pressure_read_size)) + sensor_read_addrs = list( + range(current_read_addr, current_read_addr + self.pressure_read_size)) read_addresses.extend(sensor_read_addrs) # No write addresses for pressure sensors @@ -155,8 +192,8 @@ def calculate_synctable_addresses(self, synctable_num: int, return read_addresses, write_addresses def generate_finger_joint_model(self, joint_number: int, - read_addresses: List[int], - write_addresses: List[int]) -> str: + read_addresses: List[int], + write_addresses: List[int]) -> str: """ Generate a hand finger joint model file. @@ -169,39 +206,40 @@ def generate_finger_joint_model(self, joint_number: int, The model file content as a string """ # Generate unit info section - unit_info_lines = ["[unit info]", "Data Name value unit Sign Type Offset"] + unit_info_lines = ['[unit info]', 'Data Name value unit Sign Type Offset'] for data_name, info in self.finger_unit_info.items(): - unit_info_lines.append(f"{data_name} {info['value']} {info['unit']} {info['sign_type']} {info['offset']}") + unit_info_lines.append(f'{data_name} {info["value"]} {info["unit"]} ' + f'{info["sign_type"]} {info["offset"]}') # Generate control table section - control_table_lines = ["", "[control table]", "Address Size Data Name"] + control_table_lines = ['', '[control table]', 'Address Size Data Name'] # Map read addresses to data names (present values only) read_data_mapping = [ - ("Present Current", 2), - ("Present Velocity", 2), - ("Present Position", 2) + ('Present Current', 2), + ('Present Velocity', 2), + ('Present Position', 2) ] for i, (data_name, size) in enumerate(read_data_mapping): if i < len(read_addresses): - control_table_lines.append(f"{read_addresses[i]} {size} {data_name}") + control_table_lines.append(f'{read_addresses[i]} {size} {data_name}') # Map write addresses to data names (goal commands only) write_data_mapping = [ - ("Goal Current", 2), - ("Goal Position", 2) + ('Goal Current', 2), + ('Goal Position', 2) ] for i, (data_name, size) in enumerate(write_data_mapping): if i < len(write_addresses): - control_table_lines.append(f"{write_addresses[i]} {size} {data_name}") + control_table_lines.append(f'{write_addresses[i]} {size} {data_name}') - content = "\n".join(unit_info_lines + control_table_lines) + "\n" + content = '\n'.join(unit_info_lines + control_table_lines) + '\n' return content def generate_pressure_sensor_model(self, sensor_number: int, - read_addresses: List[int]) -> str: + read_addresses: List[int]) -> str: """ Generate a hand pressure sensor model file. @@ -213,18 +251,19 @@ def generate_pressure_sensor_model(self, sensor_number: int, The model file content as a string """ # Generate unit info section - unit_info_lines = ["[unit info]", "Data Name value unit Sign Type Offset"] + unit_info_lines = ['[unit info]', 'Data Name value unit Sign Type Offset'] for data_name, info in self.pressure_unit_info.items(): - unit_info_lines.append(f"{data_name} {info['value']} {info['unit']} {info['sign_type']} {info['offset']}") + unit_info_lines.append(f'{data_name} {info["value"]} {info["unit"]} ' + f'{info["sign_type"]} {info["offset"]}') # Generate control table section - control_table_lines = ["", "[control table]", "Address Size Data Name"] + control_table_lines = ['', '[control table]', 'Address Size Data Name'] for i in range(1, 10): # 9 pressure sensors if i-1 < len(read_addresses): - control_table_lines.append(f"{read_addresses[i-1]} 1 Present Pressure {i}") + control_table_lines.append(f'{read_addresses[i-1]} 1 Present Pressure {i}') - content = "\n".join(unit_info_lines + control_table_lines) + "\n" + content = '\n'.join(unit_info_lines + control_table_lines) + '\n' return content def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> None: @@ -234,17 +273,21 @@ def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> Args: synctable_groups: Dictionary mapping SyncTable numbers to their configurations Example: { - 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, - 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, + 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [1]}, + 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [2]}, ... } """ for synctable_num, config in synctable_groups.items(): - finger_joints = config.get("finger_joints", []) - pressure_sensors = config.get("pressure_sensors", []) + finger_joints = config.get('finger_joints', []) + pressure_sensors = config.get('pressure_sensors', []) - print(f"Processing SyncTable {synctable_num}: joints {finger_joints}, sensors {pressure_sensors}") - print(f" Will generate files: hx5_d20_r_synctable_{synctable_num}_device_1.model to hx5_d20_r_synctable_{synctable_num}_device_{len(finger_joints) + len(pressure_sensors)}.model") + print(f'Processing SyncTable {synctable_num}: joints {finger_joints}, ' + f'sensors {pressure_sensors}') + print(f' Will generate files: ' + f'hx5_d20_r_synctable_{synctable_num}_device_1.model to ' + f'hx5_d20_r_synctable_{synctable_num}_device_' + f'{len(finger_joints) + len(pressure_sensors)}.model') # Calculate addresses for this SyncTable read_addresses, write_addresses = self.calculate_synctable_addresses( @@ -261,8 +304,9 @@ def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> joint_read_addrs = read_addresses[current_read_idx:current_read_idx + 3] joint_write_addrs = write_addresses[current_write_idx:current_write_idx + 2] - content = self.generate_finger_joint_model(joint_num, joint_read_addrs, joint_write_addrs) - filename = f"hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model" + content = self.generate_finger_joint_model( + joint_num, joint_read_addrs, joint_write_addrs) + filename = f'hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model' self.save_model_file(filename, content) current_read_idx += 3 # 3 read addresses per joint @@ -271,10 +315,11 @@ def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> # Generate pressure sensor models for sensor_num in pressure_sensors: - sensor_read_addrs = read_addresses[current_read_idx:current_read_idx + self.pressure_read_size] + sensor_read_addrs = read_addresses[ + current_read_idx:current_read_idx + self.pressure_read_size] content = self.generate_pressure_sensor_model(sensor_num, sensor_read_addrs) - filename = f"hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model" + filename = f'hx5_d20_r_synctable_{synctable_num}_device_{device_num}.model' self.save_model_file(filename, content) current_read_idx += self.pressure_read_size @@ -284,11 +329,11 @@ def generate_default_hand_models(self) -> None: """Generate default hand models with standard SyncTable configuration.""" # Default configuration: 5 SyncTables with 4 finger joints + 1 pressure sensor each synctable_groups = { - 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, - 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, - 3: {"finger_joints": [9, 10, 11, 12], "pressure_sensors": [3]}, - 4: {"finger_joints": [13, 14, 15, 16], "pressure_sensors": [4]}, - 5: {"finger_joints": [17, 18, 19, 20], "pressure_sensors": [5]}, + 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [1]}, + 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [2]}, + 3: {'finger_joints': [9, 10, 11, 12], 'pressure_sensors': [3]}, + 4: {'finger_joints': [13, 14, 15, 16], 'pressure_sensors': [4]}, + 5: {'finger_joints': [17, 18, 19, 20], 'pressure_sensors': [5]}, } self.generate_synctable_configuration(synctable_groups) @@ -300,27 +345,27 @@ def generate_custom_hand_models(self, custom_config: Dict) -> None: Args: custom_config: Custom configuration dictionary Example: { - "synctable_groups": { - 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [5]}, - 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [10]}, + 'synctable_groups': { + 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [5]}, + 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [10]}, }, - "finger_read_size": 6, - "finger_write_size": 4, - "pressure_read_size": 9, - "pressure_write_size": 0 + 'finger_read_size': 6, + 'finger_write_size': 4, + 'pressure_read_size': 9, + 'pressure_write_size': 0 } """ # Update configuration if provided - if "finger_read_size" in custom_config: - self.finger_read_size = custom_config["finger_read_size"] - if "finger_write_size" in custom_config: - self.finger_write_size = custom_config["finger_write_size"] - if "pressure_read_size" in custom_config: - self.pressure_read_size = custom_config["pressure_read_size"] - if "pressure_write_size" in custom_config: - self.pressure_write_size = custom_config["pressure_write_size"] - - synctable_groups = custom_config.get("synctable_groups", {}) + if 'finger_read_size' in custom_config: + self.finger_read_size = custom_config['finger_read_size'] + if 'finger_write_size' in custom_config: + self.finger_write_size = custom_config['finger_write_size'] + if 'pressure_read_size' in custom_config: + self.pressure_read_size = custom_config['pressure_read_size'] + if 'pressure_write_size' in custom_config: + self.pressure_write_size = custom_config['pressure_write_size'] + + synctable_groups = custom_config.get('synctable_groups', {}) self.generate_synctable_configuration(synctable_groups) def save_model_file(self, filename: str, content: str) -> None: @@ -328,9 +373,11 @@ def save_model_file(self, filename: str, content: str) -> None: filepath = os.path.join(self.output_dir, filename) with open(filepath, 'w') as f: f.write(content) - print(f"Generated: {filepath}") + print(f'Generated: {filepath}') - def generate_simple_hand_models(self, num_synctables: int = 5, joints_per_synctable: int = 4) -> None: + def generate_simple_hand_models( + self, num_synctables: int = 5, joints_per_synctable: int = 4 + ) -> None: """ Generate hand models with a simple, sequential configuration. @@ -350,17 +397,18 @@ def generate_simple_hand_models(self, num_synctables: int = 5, joints_per_syncta pressure_sensors = [i] synctable_groups[i] = { - "finger_joints": finger_joints, - "pressure_sensors": pressure_sensors + 'finger_joints': finger_joints, + 'pressure_sensors': pressure_sensors } - print(f"Generated configuration for {num_synctables} SyncTables:") + print(f'Generated configuration for {num_synctables} SyncTables:') for synctable_num, config in synctable_groups.items(): - print(f" SyncTable {synctable_num}: joints {config['finger_joints']}, sensor {config['pressure_sensors']}") + print(f' SyncTable {synctable_num}: joints {config["finger_joints"]}, ' + f'sensor {config["pressure_sensors"]}') self.generate_synctable_configuration(synctable_groups) - def analyze_existing_models(self, model_dir: str = "../param/dxl_model") -> Dict: + def analyze_existing_models(self, model_dir: str = '../param/dxl_model') -> Dict: """ Analyze existing hand models to extract SyncTable configuration. @@ -373,38 +421,28 @@ def analyze_existing_models(self, model_dir: str = "../param/dxl_model") -> Dict # This would analyze existing files to extract the SyncTable mapping # For now, return a placeholder return { - "message": "Analysis functionality would extract SyncTable configuration from existing models" + 'message': 'Analysis functionality would extract ' + 'SyncTable configuration from existing models' } def main(): - """Main function to demonstrate usage.""" + """Demonstrate usage of the SyncTable-based model generator.""" # You can specify a different hx model file if needed - generator = SyncTableModelGenerator(output_dir="../param/dxl_model", hx_model_file="../param/dxl_model/hx5_d20_rl.model") + generator = SyncTableModelGenerator( + output_dir='../param/dxl_model', + hx_model_file='../param/dxl_model/hx5_d20_rl.model' + ) - print("SyncTable-based Dynamixel Model Generator") - print("=" * 50) + print('SyncTable-based Dynamixel Model Generator') + print('=' * 50) # Example 1: Generate simple hand models (recommended) - print("\n1. Generating simple hand models...") + print('\n1. Generating simple hand models...') generator.generate_simple_hand_models(num_synctables=5, joints_per_synctable=4) - # # Example 2: Generate custom models - # print("\n2. Generating custom models...") - # custom_config = { - # "synctable_groups": { - # 1: {"finger_joints": [1, 2, 3, 4], "pressure_sensors": [1]}, - # 2: {"finger_joints": [5, 6, 7, 8], "pressure_sensors": [2]}, - # }, - # "finger_read_size": 6, - # "finger_write_size": 4, - # "pressure_read_size": 9, - # "pressure_write_size": 0 - # } - # generator.generate_custom_hand_models(custom_config) - - print("\nModel generation complete!") + print('\nModel generation complete!') -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/scripts/xml_to_model_parser.py b/scripts/xml_to_model_parser.py index 03e36f4..ca6f5cf 100644 --- a/scripts/xml_to_model_parser.py +++ b/scripts/xml_to_model_parser.py @@ -1,15 +1,15 @@ #!/usr/bin/env python3 """ -XML to Dynamixel Model File Parser (Generic Version) +Parse a Dynamixel XML configuration and generate a generic model file. -This script parses a Dynamixel XML configuration file and generates -a corresponding model file using a generic approach without hardcoded categories. +This script reads a Dynamixel XML configuration file and outputs +a corresponding model file, using a generic approach (no hardcoded categories). """ -import xml.etree.ElementTree as ET -import sys import os -from typing import List, Dict, Tuple +import sys +import xml.etree.ElementTree as ET + def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: """ @@ -28,7 +28,7 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: device_name = root.get('Name', 'Unknown') model_number = root.get('ModelNumber', '0') - print(f"Processing device: {device_name} (Model: {model_number})") + print(f'Processing device: {device_name} (Model: {model_number})') # Collect all items items = [] @@ -51,7 +51,7 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: addr_int = int(address) items.append((addr_int, int(length), name)) except ValueError: - print(f"Warning: Invalid address '{address}' for item '{name}'") + print(f'Warning: Invalid address "{address}" for item "{name}"') continue # Process Category elements @@ -73,15 +73,17 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: try: start, end = map(int, continue_range.split('~')) - # Special handling for Indirect Address and Data (only include first entry) - if category_name in ["Indirect Address", "Indirect Data"]: + # Special handling for Indirect Address and Data + # (only include first entry) + if category_name in ['Indirect Address', 'Indirect Data']: if start == 1: try: addr_int = int(address) - item_name = f"{category_name} {start}" + item_name = f'{category_name} {start}' items.append((addr_int, int(length), item_name)) except ValueError: - print(f"Warning: Invalid address '{address}' for item '{item_name}'") + print(f'Warning: Invalid address "{address}" ' + f'for item "{item_name}"') continue else: # Generic handling for all other categories @@ -95,19 +97,24 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: else: addr_int = base_addr - # Generate item name using category name + template replacement - if name_template == "{0}": + # Generate item name using + # category name + template replacement + if name_template == '{0}': # If template is just {0}, use category name + number - item_name = f"{category_name} {i}" + item_name = f'{category_name} {i}' else: # Otherwise use template replacement item_name = name_template.replace('{0}', str(i)) items.append((addr_int, int(length), item_name)) except ValueError: - print(f"Warning: Invalid address '{address}' for item '{item_name}'") + print(f'Warning: Invalid address "{address}" ' + f'for item "{item_name}"') continue except (ValueError, IndexError): - print(f"Warning: Invalid continue range '{continue_range}' for category '{category_name}'") + print( + f'Warning: Invalid continue range "{continue_range}" ' + f'for category "{category_name}"' + ) continue else: # Single item @@ -115,15 +122,17 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: addr_int = int(address) items.append((addr_int, int(length), name_template)) except ValueError: - print(f"Warning: Invalid address '{address}' for item '{name_template}'") + print( + f'Warning: Invalid address "{address}" for item "{name_template}"' + ) continue # Add special entries that are in the reference but not in XML special_entries = [ - (122, 2, "Indirect Address Read"), - (634, 1, "Indirect Data Read"), - (452, 2, "Indirect Address Write"), - (799, 1, "Indirect Data Write") + (122, 2, 'Indirect Address Read'), + (634, 1, 'Indirect Data Read'), + (452, 2, 'Indirect Address Write'), + (799, 1, 'Indirect Data Write') ] for addr, size, name in special_entries: @@ -144,31 +153,32 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: # Write to output file with open(output_file_path, 'w') as f: - f.write("[control table]\n") - f.write("Address\tSize\tData Name\n") + f.write('[control table]\n') + f.write('Address\tSize\tData Name\n') for address, size, name in unique_items: - f.write(f"{address}\t{size}\t{name}\n") + f.write(f'{address}\t{size}\t{name}\n') - print(f"Successfully generated model file: {output_file_path}") - print(f"Total items processed: {len(unique_items)}") + print(f'Successfully generated model file: {output_file_path}') + print(f'Total items processed: {len(unique_items)}') except ET.ParseError as e: - print(f"Error parsing XML file: {e}") + print(f'Error parsing XML file: {e}') sys.exit(1) except FileNotFoundError: - print(f"Error: XML file not found: {xml_file_path}") + print(f'Error: XML file not found: {xml_file_path}') sys.exit(1) except Exception as e: - print(f"Error: {e}") + print(f'Error: {e}') sys.exit(1) -def main(): - """Main function to handle command line arguments and execute parsing.""" + +def main() -> None: + """Handle command-line arguments and run the XML-to-model parsing.""" # Default paths - default_xml_file = "HX5-D20-RL.xml" + default_xml_file = 'HX5-D20-RL.xml' default_model_files = [ - "../param/dxl_model/hx5_d20_rl.model", - "../param/dxl_model/hx5_d20_rr.model" + '../param/dxl_model/hx5_d20_rl.model', + '../param/dxl_model/hx5_d20_rr.model' ] # Use command line arguments if provided, otherwise use defaults @@ -177,8 +187,8 @@ def main(): model_file = sys.argv[2] elif len(sys.argv) == 1: xml_file = default_xml_file - print(f"Using default input: {xml_file}") - print(f"Using default outputs: {default_model_files}") + print(f'Using default input: {xml_file}') + print(f'Using default outputs: {default_model_files}') # Process each default model file for model_file in default_model_files: @@ -191,15 +201,15 @@ def main(): parse_xml_to_model(xml_file, model_file) return else: - print("Usage: python xml_to_model_parser_generic.py [input_xml_file] [output_model_file]") - print("If no arguments provided, uses defaults:") - print(f" Input: {default_xml_file}") - print(f" Outputs: {default_model_files}") + print('Usage: python xml_to_model_parser_generic.py [input_xml_file] [output_model_file]') + print('If no arguments provided, uses defaults:') + print(f' Input: {default_xml_file}') + print(f' Outputs: {default_model_files}') sys.exit(1) # Check if input file exists if not os.path.exists(xml_file): - print(f"Error: Input file '{xml_file}' does not exist") + print(f'Error: Input file "{xml_file}" does not exist') sys.exit(1) # Create output directory if it doesn't exist @@ -210,5 +220,6 @@ def main(): # Parse XML and generate model file parse_xml_to_model(xml_file, model_file) -if __name__ == "__main__": + +if __name__ == '__main__': main() From 02d1c65ccf8c50e2200f21746e42f4e3fb0b28ba Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 17:40:24 +0900 Subject: [PATCH 21/26] refactor: Update parameter documentation in SyncTable model generator and XML parser for clarity and consistency --- scripts/hx_synctable_model_generator.py | 116 +++++++++++++++--------- scripts/xml_to_model_parser.py | 10 +- 2 files changed, 82 insertions(+), 44 deletions(-) diff --git a/scripts/hx_synctable_model_generator.py b/scripts/hx_synctable_model_generator.py index 93ed3bd..8c6713b 100644 --- a/scripts/hx_synctable_model_generator.py +++ b/scripts/hx_synctable_model_generator.py @@ -142,13 +142,20 @@ def calculate_synctable_addresses( """ Calculate addresses for SyncTable read and write data areas. - Args: - synctable_num: SyncTable number (1, 2, 3, etc.) - finger_joints: List of finger joint numbers in this SyncTable - pressure_sensors: List of pressure sensor numbers in this SyncTable - - Returns: + Parameters + ---------- + synctable_num : int + SyncTable number (1, 2, 3, etc.). + finger_joints : list[int] + Finger joint numbers included in this SyncTable. + pressure_sensors : list[int] + Pressure sensor numbers included in this SyncTable. + + Returns + ------- + tuple[list[int], list[int]] Tuple of (read_addresses, write_addresses) + """ # Get base addresses from parsed hx model file if synctable_num not in self.synctable_base_addresses: @@ -197,13 +204,20 @@ def generate_finger_joint_model(self, joint_number: int, """ Generate a hand finger joint model file. - Args: - joint_number: The joint number (1, 2, 3, etc.) - read_addresses: List of read addresses for this joint - write_addresses: List of write addresses for this joint - - Returns: + Parameters + ---------- + joint_number : int + Joint number (1, 2, 3, etc.). + read_addresses : list[int] + Read addresses allocated to this joint. + write_addresses : list[int] + Write addresses allocated to this joint. + + Returns + ------- + str The model file content as a string + """ # Generate unit info section unit_info_lines = ['[unit info]', 'Data Name value unit Sign Type Offset'] @@ -243,12 +257,18 @@ def generate_pressure_sensor_model(self, sensor_number: int, """ Generate a hand pressure sensor model file. - Args: - sensor_number: The sensor number (5, 10, 15, 20, 25) - read_addresses: List of read addresses for this sensor + Parameters + ---------- + sensor_number : int + Sensor number (5, 10, 15, 20, 25). + read_addresses : list[int] + Read addresses allocated to this sensor. - Returns: + Returns + ------- + str The model file content as a string + """ # Generate unit info section unit_info_lines = ['[unit info]', 'Data Name value unit Sign Type Offset'] @@ -270,13 +290,15 @@ def generate_synctable_configuration(self, synctable_groups: Dict[int, Dict]) -> """ Generate models based on SyncTable group configuration. - Args: - synctable_groups: Dictionary mapping SyncTable numbers to their configurations - Example: { - 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [1]}, - 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [2]}, - ... - } + Parameters + ---------- + synctable_groups : dict[int, dict] + Mapping of SyncTable numbers to their configurations. Example: + { + 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [1]}, + 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [2]}, + } + """ for synctable_num, config in synctable_groups.items(): finger_joints = config.get('finger_joints', []) @@ -342,18 +364,21 @@ def generate_custom_hand_models(self, custom_config: Dict) -> None: """ Generate custom hand models based on provided configuration. - Args: - custom_config: Custom configuration dictionary - Example: { - 'synctable_groups': { - 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [5]}, - 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [10]}, - }, - 'finger_read_size': 6, - 'finger_write_size': 4, - 'pressure_read_size': 9, - 'pressure_write_size': 0 - } + Parameters + ---------- + custom_config : dict + Custom configuration dictionary. Example: + { + 'synctable_groups': { + 1: {'finger_joints': [1, 2, 3, 4], 'pressure_sensors': [5]}, + 2: {'finger_joints': [5, 6, 7, 8], 'pressure_sensors': [10]}, + }, + 'finger_read_size': 6, + 'finger_write_size': 4, + 'pressure_read_size': 9, + 'pressure_write_size': 0 + } + """ # Update configuration if provided if 'finger_read_size' in custom_config: @@ -381,9 +406,13 @@ def generate_simple_hand_models( """ Generate hand models with a simple, sequential configuration. - Args: - num_synctables: Number of SyncTables to generate - joints_per_synctable: Number of finger joints per SyncTable + Parameters + ---------- + num_synctables : int + Number of SyncTables to generate. + joints_per_synctable : int + Number of finger joints per SyncTable. + """ synctable_groups = {} @@ -412,11 +441,16 @@ def analyze_existing_models(self, model_dir: str = '../param/dxl_model') -> Dict """ Analyze existing hand models to extract SyncTable configuration. - Args: - model_dir: Directory containing existing model files + Parameters + ---------- + model_dir : str + Directory containing existing model files. - Returns: + Returns + ------- + dict Dictionary containing extracted configuration + """ # This would analyze existing files to extract the SyncTable mapping # For now, return a placeholder diff --git a/scripts/xml_to_model_parser.py b/scripts/xml_to_model_parser.py index ca6f5cf..e6986ae 100644 --- a/scripts/xml_to_model_parser.py +++ b/scripts/xml_to_model_parser.py @@ -15,9 +15,13 @@ def parse_xml_to_model(xml_file_path: str, output_file_path: str) -> None: """ Parse XML file and generate model file using a generic approach. - Args: - xml_file_path: Path to input XML file - output_file_path: Path to output model file + Parameters + ---------- + xml_file_path : str + Path to the XML file that will be parsed. + output_file_path : str + Path where the generated model file will be saved. + """ try: # Parse XML file From 81087c2d4a080316130a1ca561576c5740dc7203 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 17:44:34 +0900 Subject: [PATCH 22/26] chore: Add copyright notice and licensing information to SyncTable model generator and XML parser scripts --- scripts/hx_synctable_model_generator.py | 17 +++++++++++++++++ scripts/xml_to_model_parser.py | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/scripts/hx_synctable_model_generator.py b/scripts/hx_synctable_model_generator.py index 8c6713b..b5b287a 100644 --- a/scripts/hx_synctable_model_generator.py +++ b/scripts/hx_synctable_model_generator.py @@ -1,4 +1,21 @@ #!/usr/bin/env python3 +# +# Copyright 2025 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. +# +# Author: Woojin Wie + """ SyncTable-based Dynamixel Model File Generator. diff --git a/scripts/xml_to_model_parser.py b/scripts/xml_to_model_parser.py index e6986ae..d18afa0 100644 --- a/scripts/xml_to_model_parser.py +++ b/scripts/xml_to_model_parser.py @@ -1,4 +1,21 @@ #!/usr/bin/env python3 +# +# Copyright 2025 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. +# +# Author: Woojin Wie + """ Parse a Dynamixel XML configuration and generate a generic model file. From 156b962a264949757afec1e1af453b835e971935 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 17:54:45 +0900 Subject: [PATCH 23/26] refactor: Enhance code readability by standardizing formatting and indentation in Dynamixel hardware interface and implementation files --- src/dynamixel/dynamixel.cpp | 89 +++++++++++++++++----------- src/dynamixel_hardware_interface.cpp | 10 ++-- 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 99f9144..174d7c7 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -86,8 +86,9 @@ DxlError Dynamixel::ReadDxlModelFile(uint8_t comm_id, uint8_t id, uint16_t model dxl_info_.ReadDxlModelFile(comm_id, id, model_num); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", - comm_id, id, e.what()); + fprintf( + stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", + comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } @@ -100,8 +101,9 @@ DxlError Dynamixel::ReadDxlModelFile( dxl_info_.ReadDxlModelFile(comm_id, id, model_num, firmware_version); return DxlError::OK; } catch (const std::exception & e) { - fprintf(stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", - comm_id, id, e.what()); + fprintf( + stderr, "[ReadDxlModelFile][comm_id:%03d][ID:%03d] Error reading model file: %s\n", + comm_id, id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } } @@ -113,9 +115,10 @@ DxlError Dynamixel::ReadFirmwareVersion(uint8_t comm_id, uint8_t id, uint8_t & f if (result == DxlError::OK) { firmware_version = static_cast(fw_version_data); } else { - fprintf(stderr, - "[ReadFirmwareVersion][comm_id:%03d][ID:%03d] Failed to read firmware version\n", comm_id, - id); + fprintf( + stderr, + "[ReadFirmwareVersion][comm_id:%03d][ID:%03d] Failed to read firmware version\n", comm_id, + id); } return result; } @@ -132,8 +135,9 @@ DxlError Dynamixel::InitTorqueStates( uint32_t torque_state = 0; DxlError result = ReadItem(it_comm, it_id, "Torque Enable", torque_state); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error reading torque state\n", - it_comm, it_id); + fprintf( + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error reading torque state\n", + it_comm, it_id); return result; } @@ -680,7 +684,7 @@ DxlError Dynamixel::WriteItem(uint8_t comm_id, uint8_t id, std::string item_name if (dxl_info_.GetDxlControlItem(comm_id, id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( stderr, "[WriteItem][comm_id:%03d][ID:%03d] Cannot find control item in model file. : %s\n", - comm_id, id, + comm_id, id, item_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -777,7 +781,8 @@ DxlError Dynamixel::WriteItemBuf() stderr, "[comm_id:%03d][ID:%03d] Set Torque %s\n", it_write_item.comm_id, it_write_item.id, torque_state_[{it_write_item.comm_id, it_write_item.id}] ? "ON" : "OFF"); } else { - if ((dxl_info_.CheckDxlControlItem(it_write_item.comm_id, it_write_item.id, + if ((dxl_info_.CheckDxlControlItem( + it_write_item.comm_id, it_write_item.id, "Torque Enable")) && torque_state_[{it_write_item.comm_id, it_write_item.id}] == TORQUE_ON) { @@ -810,7 +815,7 @@ DxlError Dynamixel::ReadItem(uint8_t comm_id, uint8_t id, std::string item_name, if (dxl_info_.GetDxlControlItem(comm_id, id, item_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( stderr, "[ReadItem][comm_id:%03d][ID:%03d] Cannot find control item in model file. : %s\n", - comm_id, id, + comm_id, id, item_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -1212,7 +1217,8 @@ DxlError Dynamixel::SetFastSyncReadHandler(std::vector id_arr) uint8_t IN_SIZE = 0; for (auto it_id : id_arr) { - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + if (dxl_info_.GetDxlControlItem( + it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( @@ -1270,7 +1276,8 @@ DxlError Dynamixel::SetSyncReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + if (dxl_info_.GetDxlControlItem( + it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( @@ -1508,7 +1515,8 @@ DxlError Dynamixel::SetFastBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + if (dxl_info_.GetDxlControlItem( + it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( @@ -1562,7 +1570,8 @@ DxlError Dynamixel::SetBulkReadHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Read", IN_ADDR, + if (dxl_info_.GetDxlControlItem( + it_id, it_id, "Indirect Data Read", IN_ADDR, IN_SIZE) == false) { fprintf( @@ -2065,8 +2074,9 @@ DxlError Dynamixel::SetDxlValueToSyncWrite() dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, - is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue( + comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility @@ -2223,7 +2233,8 @@ DxlError Dynamixel::SetBulkWriteHandler(std::vector id_arr) for (auto it_id : id_arr) { // Get the indirect addr. - if (dxl_info_.GetDxlControlItem(it_id, it_id, "Indirect Data Write", IN_ADDR, + if (dxl_info_.GetDxlControlItem( + it_id, it_id, "Indirect Data Write", IN_ADDR, IN_SIZE) == false) { fprintf( @@ -2268,8 +2279,9 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, - is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue( + comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility @@ -2311,8 +2323,9 @@ DxlError Dynamixel::SetDxlValueToBulkWrite() dxl_info_.GetDxlSignType(comm_id, ID, item_name, is_signed)) { // Use unit info and sign type to properly convert the value - uint32_t raw_value = ConvertUnitValueToRawValue(comm_id, ID, item_name, data, size, - is_signed); + uint32_t raw_value = ConvertUnitValueToRawValue( + comm_id, ID, item_name, data, size, + is_signed); WriteValueToBuffer(param_write_value, added_byte, raw_value, size); } else { // Fallback to existing logic for compatibility @@ -2449,32 +2462,38 @@ uint32_t Dynamixel::ConvertUnitValueToRawValue( { if (size == 1) { if (is_signed) { - int8_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + int8_t signed_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint8_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + uint8_t unsigned_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return static_cast(unsigned_value); } } else if (size == 2) { if (is_signed) { - int16_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + int16_t signed_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint16_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + uint16_t unsigned_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return static_cast(unsigned_value); } } else if (size == 4) { if (is_signed) { - int32_t signed_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + int32_t signed_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return static_cast(signed_value); } else { - uint32_t unsigned_value = dxl_info_.ConvertUnitToValue(comm_id, id, item_name, - unit_value); + uint32_t unsigned_value = dxl_info_.ConvertUnitToValue( + comm_id, id, item_name, + unit_value); return unsigned_value; } } diff --git a/src/dynamixel_hardware_interface.cpp b/src/dynamixel_hardware_interface.cpp index ad8c01f..0b73025 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -180,12 +180,14 @@ hardware_interface::CallbackReturn DynamixelHardware::on_init( } else if (type == "controller") { controller_comm_id_id_.emplace_back(comm_id, id); } else if (type == "virtual_dxl") { - dxl_comm_->ReadDxlModelFile(comm_id, id, - static_cast(stoi(gpio.parameters.at("model_num")))); + dxl_comm_->ReadDxlModelFile( + comm_id, id, + static_cast(stoi(gpio.parameters.at("model_num")))); virtual_dxl_comm_id_id_.emplace_back(comm_id, id); } else if (type == "virtual_sensor") { - dxl_comm_->ReadDxlModelFile(comm_id, id, - static_cast(stoi(gpio.parameters.at("model_num")))); + dxl_comm_->ReadDxlModelFile( + comm_id, id, + static_cast(stoi(gpio.parameters.at("model_num")))); } else { RCLCPP_ERROR_STREAM(logger_, "Invalid DXL / Sensor type"); exit(-1); From 9ba58cfdbb3a7069280f8b80e1a622a6c60dfc7c Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Tue, 25 Nov 2025 18:26:02 +0900 Subject: [PATCH 24/26] refactor: Standardize error message formatting in Dynamixel implementation for improved readability --- src/dynamixel/dynamixel.cpp | 39 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/dynamixel/dynamixel.cpp b/src/dynamixel/dynamixel.cpp index 174d7c7..01ef70c 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -147,12 +147,13 @@ DxlError Dynamixel::InitTorqueStates( if (disable_torque) { fprintf( stderr, - "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, disabling torque\n", - it_comm, it_id); + "[InitTorqueStates][comm_id:%03d][ID:%03d] Torque is enabled, disabling torque\n", + it_comm, it_id); result = WriteItem(it_comm, it_id, "Torque Enable", TORQUE_OFF); if (result != DxlError::OK) { - fprintf(stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error disabling torque\n", - it_comm, it_id); + fprintf( + stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error disabling torque\n", + it_comm, it_id); return result; } torque_state_[{it_comm, it_id}] = TORQUE_OFF; @@ -170,13 +171,13 @@ DxlError Dynamixel::InitTorqueStates( fprintf( stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Current torque state: %s\n", it_comm, - it_id, + it_id, torque_state_[{it_comm, it_id}] ? "ON" : "OFF"); } } catch (const std::exception & e) { fprintf( stderr, "[InitTorqueStates][comm_id:%03d][ID:%03d] Error checking control item: %s\n", - it_comm, it_id, + it_comm, it_id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -263,8 +264,9 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) try { dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, - id, e.what()); + fprintf( + stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, + id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -341,8 +343,9 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) try { dxl_info_.ReadDxlModelFile(comm_id, id, dxl_model_number); } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, - id, e.what()); + fprintf( + stderr, "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading model file: %s\n", comm_id, + id, e.what()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -354,7 +357,7 @@ DxlError Dynamixel::InitDxlComm(uint8_t comm_id, uint8_t id) } catch (const std::exception & e) { fprintf( stderr, - "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", + "[InitDxlComm][comm_id:%03d][ID:%03d] Error reading firmware-specific model file: %s\n", comm_id, id, e.what()); } } @@ -422,7 +425,7 @@ DxlError Dynamixel::SetDxlReadItems( if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, - id, + id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -531,7 +534,7 @@ DxlError Dynamixel::SetDxlWriteItems( if (dxl_info_.GetDxlControlItem(comm_id, id, it_name, ITEM_ADDR, ITEM_SIZE) == false) { fprintf( stderr, "[comm_id:%03d][ID:%03d] Cannot find control item in model file : %s\n", comm_id, - id, + id, it_name.c_str()); return DxlError::CANNOT_FIND_CONTROL_ITEM; } @@ -621,8 +624,9 @@ DxlError Dynamixel::DynamixelEnable(const std::vector Date: Wed, 26 Nov 2025 16:44:45 +0900 Subject: [PATCH 25/26] refactor: Update Offset column to unit info in Dynamixel model files for consistency and clarity --- param/dxl_model/omy_end_rh_p12_rn.model | 14 +++++++------- param/dxl_model/rh_p12_rn.model | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/param/dxl_model/omy_end_rh_p12_rn.model b/param/dxl_model/omy_end_rh_p12_rn.model index e4ad86c..dae6b7b 100644 --- a/param/dxl_model/omy_end_rh_p12_rn.model +++ b/param/dxl_model/omy_end_rh_p12_rn.model @@ -1,11 +1,11 @@ [unit info] -Data Name value unit Sign Type -Present Velocity 0.0119380521 rad/s signed -Goal Velocity 0.0119380521 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 +Data Name value unit Sign Type Offset +Present Velocity 0.0119380521 rad/s signed 0.0 +Goal Velocity 0.0119380521 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed 0.0 +Goal Position 0.0015339807878856412 rad signed 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/rh_p12_rn.model b/param/dxl_model/rh_p12_rn.model index b973b30..db80eec 100644 --- a/param/dxl_model/rh_p12_rn.model +++ b/param/dxl_model/rh_p12_rn.model @@ -1,11 +1,11 @@ [unit info] -Data Name value unit Sign Type -Present Velocity 0.0119380521 rad/s signed -Goal Velocity 0.0119380521 rad/s signed -Present Current 1.0 raw signed -Goal Current 1.0 raw signed -Present Position 0.0015339807878856412 rad signed -3.14159265359 -Goal Position 0.0015339807878856412 rad signed -3.14159265359 +Data Name value unit Sign Type Offset +Present Velocity 0.0119380521 rad/s signed 0.0 +Goal Velocity 0.0119380521 rad/s signed 0.0 +Present Current 1.0 raw signed 0.0 +Goal Current 1.0 raw signed 0.0 +Present Position 0.0015339807878856412 rad signed 0.0 +Goal Position 0.0015339807878856412 rad signed 0.0 Present Input Voltage 0.1 V unsigned 0.0 [control table] From 931e0736f84f6a4d1836bef47ab0ce5cabc5ad90 Mon Sep 17 00:00:00 2001 From: Woojin Wie Date: Wed, 26 Nov 2025 19:09:39 +0900 Subject: [PATCH 26/26] chore: Release version 1.5.0 --- CHANGELOG.rst | 9 +++++++++ package.xml | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a8505a5..c89a21c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,15 @@ Changelog for package dynamixel_hardware_interface ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.5.0 (2025-11-26) +------------------ +* Added comm_id/id concept for virtual_* devices. +* Added unit info system for Unified unit conversion logic. +* Added sequential initialization logic. +* Fixed memory leak of matrix malloc. +* Refactored every type info based unit conversion to unit info based system. +* Contributors: Woojin Wie + 1.4.16 (2025-10-14) ------------------- * Added support for default unit information for Present Input Voltage to model files diff --git a/package.xml b/package.xml index f345ade..06b9da5 100644 --- a/package.xml +++ b/package.xml @@ -2,7 +2,7 @@ dynamixel_hardware_interface - 1.4.16 + 1.5.0 ROS 2 package providing a hardware interface for controlling Dynamixel motors via the ROS 2 control framework.