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/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp b/include/dynamixel_hardware_interface/dynamixel/dynamixel.hpp index 99586f5..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 { @@ -164,6 +165,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 +199,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 +236,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 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(); // 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 +265,44 @@ 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); + 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); - void SetCommId(uint8_t id, uint8_t comm_id) {comm_id_[id] = comm_id;} + DxlError InitTorqueStates( + std::vector> comm_id_id_arr, + bool disable_torque = false); - DxlError InitTorqueStates(std::vector 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(); @@ -334,7 +345,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 +383,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 +392,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..b8a8442 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,65 @@ 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..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" @@ -182,8 +183,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 +229,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 @@ -256,27 +257,14 @@ 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 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 InitItem(const hardware_interface::ComponentInfo & gpio); /** * @brief Initializes the read items for Dynamixel. @@ -377,7 +365,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/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. diff --git a/param/dxl_model/2xc430_w250.model b/param/dxl_model/2xc430_w250.model index 4144035..4459483 100644 --- a/param/dxl_model/2xc430_w250.model +++ b/param/dxl_model/2xc430_w250.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 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 4144035..4459483 100644 --- a/param/dxl_model/2xl430_w250.model +++ b/param/dxl_model/2xl430_w250.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/dynamixel.model b/param/dxl_model/dynamixel.model index 9d45f88..8bcf116 100644 --- a/param/dxl_model/dynamixel.model +++ b/param/dxl_model/dynamixel.model @@ -3,6 +3,33 @@ Number Name 220 omy_hat.model 230 omy_end.model 231 omy_end_rh_p12_rn.model +260 hx5_d20_rr.model +261 hx5_d20_rl.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_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 @@ -50,6 +77,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/ffw_sg2_drive_1.model b/param/dxl_model/ffw_sg2_drive_1.model index d14fdc1..0d0a5cb 100644 --- a/param/dxl_model/ffw_sg2_drive_1.model +++ b/param/dxl_model/ffw_sg2_drive_1.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ffw_sg2_drive_2.model b/param/dxl_model/ffw_sg2_drive_2.model index 1c298c2..25b5276 100644 --- a/param/dxl_model/ffw_sg2_drive_2.model +++ b/param/dxl_model/ffw_sg2_drive_2.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ffw_sg2_drive_3.model b/param/dxl_model/ffw_sg2_drive_3.model index 15e51e7..f83a9a1 100644 --- a/param/dxl_model/ffw_sg2_drive_3.model +++ b/param/dxl_model/ffw_sg2_drive_3.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ffw_sg2_steer_1.model b/param/dxl_model/ffw_sg2_steer_1.model index 5770dcc..3e2300b 100644 --- a/param/dxl_model/ffw_sg2_steer_1.model +++ b/param/dxl_model/ffw_sg2_steer_1.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ffw_sg2_steer_2.model b/param/dxl_model/ffw_sg2_steer_2.model index a1656da..54bd78b 100644 --- a/param/dxl_model/ffw_sg2_steer_2.model +++ b/param/dxl_model/ffw_sg2_steer_2.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ffw_sg2_steer_3.model b/param/dxl_model/ffw_sg2_steer_3.model index 6873ea1..914e796 100644 --- a/param/dxl_model/ffw_sg2_steer_3.model +++ b/param/dxl_model/ffw_sg2_steer_3.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/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/hx5_d20_r_synctable_1_device_1.model b/param/dxl_model/hx5_d20_r_synctable_1_device_1.model new file mode 100644 index 0000000..0f91334 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_1_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 +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/hx5_d20_r_synctable_1_device_2.model b/param/dxl_model/hx5_d20_r_synctable_1_device_2.model new file mode 100644 index 0000000..da52e99 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_1_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 +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/hx5_d20_r_synctable_1_device_3.model b/param/dxl_model/hx5_d20_r_synctable_1_device_3.model new file mode 100644 index 0000000..289e47d --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_1_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 +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/hx5_d20_r_synctable_1_device_4.model b/param/dxl_model/hx5_d20_r_synctable_1_device_4.model new file mode 100644 index 0000000..7c23c26 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_1_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 +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/hx5_d20_r_synctable_1_device_5.model b/param/dxl_model/hx5_d20_r_synctable_1_device_5.model new file mode 100644 index 0000000..cee82ba --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_1_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 +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/hx5_d20_r_synctable_2_device_1.model b/param/dxl_model/hx5_d20_r_synctable_2_device_1.model new file mode 100644 index 0000000..65ea36c --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_2_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 +1276 2 Present Current +1278 2 Present Velocity +1280 2 Present 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/hx5_d20_r_synctable_2_device_5.model b/param/dxl_model/hx5_d20_r_synctable_2_device_5.model new file mode 100644 index 0000000..84f9534 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_2_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 +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/hx5_d20_r_synctable_3_device_5.model b/param/dxl_model/hx5_d20_r_synctable_3_device_5.model new file mode 100644 index 0000000..3b9afc5 --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_3_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 +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/hx5_d20_r_synctable_4_device_5.model b/param/dxl_model/hx5_d20_r_synctable_4_device_5.model new file mode 100644 index 0000000..3f1096e --- /dev/null +++ b/param/dxl_model/hx5_d20_r_synctable_4_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 +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/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 122eb65..c7defa4 100644 --- a/param/dxl_model/mx_106.model +++ b/param/dxl_model/mx_106.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d8d8ca4..367b6ed 100644 --- a/param/dxl_model/mx_28.model +++ b/param/dxl_model/mx_28.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 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 122eb65..c7defa4 100644 --- a/param/dxl_model/mx_64.model +++ b/param/dxl_model/mx_64.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/omy_end_rh_p12_rn.model b/param/dxl_model/omy_end_rh_p12_rn.model index 8e7a4b3..dae6b7b 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 +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/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..db80eec 100644 --- a/param/dxl_model/rh_p12_rn.model +++ b/param/dxl_model/rh_p12_rn.model @@ -1,18 +1,12 @@ -[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 Input Voltage 0.1 V unsigned +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] Address Size Data Name diff --git a/param/dxl_model/xc330_m181.model b/param/dxl_model/xc330_m181.model index d5e212a..6b0d506 100644 --- a/param/dxl_model/xc330_m181.model +++ b/param/dxl_model/xc330_m181.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1cb5bd1..39cb598 100644 --- a/param/dxl_model/xc330_m181_fw52.model +++ b/param/dxl_model/xc330_m181_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d5e212a..6b0d506 100644 --- a/param/dxl_model/xc330_m288.model +++ b/param/dxl_model/xc330_m288.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1cb5bd1..39cb598 100644 --- a/param/dxl_model/xc330_m288_fw52.model +++ b/param/dxl_model/xc330_m288_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 4292b6a..2cf1ae4 100644 --- a/param/dxl_model/xc330_t181.model +++ b/param/dxl_model/xc330_t181.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 b607acb..aca648c 100644 --- a/param/dxl_model/xc330_t181_fw52.model +++ b/param/dxl_model/xc330_t181_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a60032..bd5289b 100644 --- a/param/dxl_model/xc330_t288.model +++ b/param/dxl_model/xc330_t288.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 73cbfb5..ea92f25 100644 --- a/param/dxl_model/xc330_t288_fw52.model +++ b/param/dxl_model/xc330_t288_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 0.0 [control table] Address Size Data Name diff --git a/param/dxl_model/xc335_t332.model b/param/dxl_model/xc335_t332.model new file mode 100644 index 0000000..d21a3b0 --- /dev/null +++ b/param/dxl_model/xc335_t332.model @@ -0,0 +1,124 @@ +[unit info] +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 +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/param/dxl_model/xc430_w150.model b/param/dxl_model/xc430_w150.model index 4144035..4459483 100644 --- a/param/dxl_model/xc430_w150.model +++ b/param/dxl_model/xc430_w150.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 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 4144035..4459483 100644 --- a/param/dxl_model/xc430_w240.model +++ b/param/dxl_model/xc430_w240.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xd430_t210.model +++ b/param/dxl_model/xd430_t210.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xd430_t350.model +++ b/param/dxl_model/xd430_t350.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xd540_t150.model +++ b/param/dxl_model/xd540_t150.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xd540_t270.model +++ b/param/dxl_model/xd540_t270.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xh430_v210.model +++ b/param/dxl_model/xh430_v210.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xh430_v350.model +++ b/param/dxl_model/xh430_v350.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xh430_w210.model +++ b/param/dxl_model/xh430_w210.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xh430_w350.model +++ b/param/dxl_model/xh430_w350.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xh540_v150.model +++ b/param/dxl_model/xh540_v150.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xh540_v270.model +++ b/param/dxl_model/xh540_v270.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 c817a81..3b26818 100644 --- a/param/dxl_model/xh540_w150.model +++ b/param/dxl_model/xh540_w150.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xh540_w270.model +++ b/param/dxl_model/xh540_w270.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 0.0 [control table] Address Size Data Name 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..6b0d506 100644 --- a/param/dxl_model/xl330_m077.model +++ b/param/dxl_model/xl330_m077.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1cb5bd1..39cb598 100644 --- a/param/dxl_model/xl330_m077_fw52.model +++ b/param/dxl_model/xl330_m077_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d5e212a..6b0d506 100644 --- a/param/dxl_model/xl330_m288.model +++ b/param/dxl_model/xl330_m288.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1cb5bd1..39cb598 100644 --- a/param/dxl_model/xl330_m288_fw52.model +++ b/param/dxl_model/xl330_m288_fw52.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 4144035..4459483 100644 --- a/param/dxl_model/xl430_w250.model +++ b/param/dxl_model/xl430_w250.model @@ -1,16 +1,10 @@ -[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 Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xm430_w210.model +++ b/param/dxl_model/xm430_w210.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 d2a2f76..bcbe162 100644 --- a/param/dxl_model/xm430_w350.model +++ b/param/dxl_model/xm430_w350.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xm540_w150.model +++ b/param/dxl_model/xm540_w150.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 1748bbb..e82ea32 100644 --- a/param/dxl_model/xm540_w270.model +++ b/param/dxl_model/xm540_w270.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a03da7..5d409f1 100644 --- a/param/dxl_model/xw430_t200.model +++ b/param/dxl_model/xw430_t200.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a03da7..5d409f1 100644 --- a/param/dxl_model/xw430_t333.model +++ b/param/dxl_model/xw430_t333.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a03da7..5d409f1 100644 --- a/param/dxl_model/xw540_h260.model +++ b/param/dxl_model/xw540_h260.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a03da7..5d409f1 100644 --- a/param/dxl_model/xw540_t140.model +++ b/param/dxl_model/xw540_t140.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 5a03da7..5d409f1 100644 --- a/param/dxl_model/xw540_t260.model +++ b/param/dxl_model/xw540_t260.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 342fd9d..15ee310 100644 --- a/param/dxl_model/ym070_210_a051.model +++ b/param/dxl_model/ym070_210_a051.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym070_210_a099.model b/param/dxl_model/ym070_210_a099.model index 71f5f57..9e5b7b6 100644 --- a/param/dxl_model/ym070_210_a099.model +++ b/param/dxl_model/ym070_210_a099.model @@ -1,18 +1,12 @@ -[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 -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 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 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 342fd9d..15ee310 100644 --- a/param/dxl_model/ym070_210_b001.model +++ b/param/dxl_model/ym070_210_b001.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym070_210_m001.model b/param/dxl_model/ym070_210_m001.model index 342fd9d..15ee310 100644 --- a/param/dxl_model/ym070_210_m001.model +++ b/param/dxl_model/ym070_210_m001.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym070_210_r051.model b/param/dxl_model/ym070_210_r051.model index 342fd9d..15ee310 100644 --- a/param/dxl_model/ym070_210_r051.model +++ b/param/dxl_model/ym070_210_r051.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym070_210_r099.model b/param/dxl_model/ym070_210_r099.model index 71f5f57..9e5b7b6 100644 --- a/param/dxl_model/ym070_210_r099.model +++ b/param/dxl_model/ym070_210_r099.model @@ -1,18 +1,12 @@ -[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 -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 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 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 342fd9d..15ee310 100644 --- a/param/dxl_model/ym080_230_a051.model +++ b/param/dxl_model/ym080_230_a051.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym080_230_a099.model b/param/dxl_model/ym080_230_a099.model index ef5c469..22333e7 100644 --- a/param/dxl_model/ym080_230_a099.model +++ b/param/dxl_model/ym080_230_a099.model @@ -1,18 +1,12 @@ -[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 -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 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 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 342fd9d..6c149fe 100644 --- a/param/dxl_model/ym080_230_b001.model +++ b/param/dxl_model/ym080_230_b001.model @@ -1,18 +1,12 @@ -[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 -Present Input Voltage 0.1 V unsigned +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 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 342fd9d..15ee310 100644 --- a/param/dxl_model/ym080_230_m001.model +++ b/param/dxl_model/ym080_230_m001.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym080_230_r051.model b/param/dxl_model/ym080_230_r051.model index 342fd9d..15ee310 100644 --- a/param/dxl_model/ym080_230_r051.model +++ b/param/dxl_model/ym080_230_r051.model @@ -1,18 +1,12 @@ -[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 -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.000011984224905356572 rad signed 0.0 +Goal Position 0.000011984224905356572 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/ym080_230_r099.model b/param/dxl_model/ym080_230_r099.model index ef5c469..22333e7 100644 --- a/param/dxl_model/ym080_230_r099.model +++ b/param/dxl_model/ym080_230_r099.model @@ -1,18 +1,12 @@ -[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 -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 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 0.0 [control table] Address Size Data Name 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..b5b287a --- /dev/null +++ b/scripts/hx_synctable_model_generator.py @@ -0,0 +1,499 @@ +#!/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. + +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 + + +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') -> None: + """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 ' + f'{self.hx_model_file}') + for synctable_num, addresses in self.synctable_base_addresses.items(): + 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') + # 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. + + 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: + 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. + + 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'] + for data_name, info in self.finger_unit_info.items(): + 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'] + + # 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. + + Parameters + ---------- + sensor_number : int + Sensor number (5, 10, 15, 20, 25). + read_addresses : list[int] + Read addresses allocated to this sensor. + + 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'] + for data_name, info in self.pressure_unit_info.items(): + 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'] + + 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. + + 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', []) + pressure_sensors = config.get('pressure_sensors', []) + + 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( + 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. + + 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: + 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. + + Parameters + ---------- + num_synctables : int + Number of SyncTables to generate. + joints_per_synctable : int + 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"]}, ' + f'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. + + Parameters + ---------- + model_dir : str + Directory containing existing model files. + + Returns + ------- + dict + 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(): + """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' + ) + + 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) + + 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..d18afa0 --- /dev/null +++ b/scripts/xml_to_model_parser.py @@ -0,0 +1,246 @@ +#!/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. + +This script reads a Dynamixel XML configuration file and outputs +a corresponding model file, using a generic approach (no hardcoded categories). +""" + +import os +import sys +import xml.etree.ElementTree as ET + + +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. + + 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 + 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}" ' + f'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}" ' + f'for item "{item_name}"') + continue + except (ValueError, IndexError): + print( + f'Warning: Invalid continue range "{continue_range}" ' + f'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() -> None: + """Handle command-line arguments and run the XML-to-model 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.cpp b/src/dynamixel/dynamixel.cpp index 87234d2..01ef70c 100644 --- a/src/dynamixel/dynamixel.cpp +++ b/src/dynamixel/dynamixel.cpp @@ -80,86 +80,104 @@ 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; } @@ -167,137 +185,185 @@ DxlError Dynamixel::InitTorqueStates(std::vector id_arr, bool disable_t return DxlError::OK; } -DxlError Dynamixel::InitDxlComm( - std::vector id_arr, - std::string port_name, - std::string baudrate) +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::SetupPort(const std::string & port_name, const 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"); - } else { - fprintf(stderr, "Failed to open the port!\n"); + 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; } 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; } + 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 it_id : id_arr) { - fprintf(stderr, "[ID:%03d] Request ping\t", it_id); - int dxl_comm_result = packet_handler_->ping( - port_handler_, it_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(it_id, dxl_model_number); - } catch (const std::exception & e) { - fprintf(stderr, "[InitDxlComm][ID:%03d] Error reading model file: %s\n", it_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( - it_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); - - if (hw_error_exists) { - uint32_t hw_error_status = 0; - ReadItem(it_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, "[ID:%03d] Hardware Error Details: 0x%x (%d): %s\n", - it_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); - - 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); + // 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, "[ID:%03d] Error Code Details: 0x%x (Unknown Error Code)\n", - it_id, error_code_byte); + error_string += "Unknown Error Bit " + std::to_string(bit) + "/ "; } } - } else { - fprintf( - stderr, - "[ID:%03d] Neither Hardware Error Status nor Error Code control items available.\n", - it_id - ); } - Reboot(it_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()); - } - - // Read firmware version and reload model file with firmware-specific version if available - uint8_t firmware_version = 0; - DxlError fw_result = ReadFirmwareVersion(it_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); - } catch (const std::exception & e) { + if (!error_string.empty()) { 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, "[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 { + 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; + } 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, 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()); } } read_data_list_.clear(); write_data_list_.clear(); - return DxlError::OK; } @@ -332,13 +398,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 +422,10 @@ 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 +508,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 +531,10 @@ 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 +614,48 @@ 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 +682,24 @@ 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 +752,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 +775,34 @@ 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 +813,18 @@ 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 +896,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 +1076,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 +1124,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 +1159,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 +1174,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 +1222,10 @@ 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 +1281,10 @@ 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 +1458,13 @@ 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 +1520,10 @@ 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 +1575,10 @@ 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 +1854,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 +1894,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 +1934,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 +1952,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 +1962,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 +1988,13 @@ 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 +2035,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 +2075,18 @@ 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 +2192,13 @@ 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 +2238,10 @@ 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 +2280,18 @@ 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 +2324,18 @@ 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 +2391,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 +2426,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 +2462,43 @@ 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..63c3095 100644 --- a/src/dynamixel/dynamixel_info.cpp +++ b/src/dynamixel/dynamixel_info.cpp @@ -53,12 +53,14 @@ 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 + "/"; @@ -70,8 +72,11 @@ void DynamixelInfo::ReadDxlModelFile(uint8_t id, uint16_t model_num, uint8_t fir 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); @@ -144,7 +149,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 +171,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 +225,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 +332,136 @@ 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..0b73025 100644 --- a/src/dynamixel_hardware_interface.cpp +++ b/src/dynamixel_hardware_interface.cpp @@ -169,87 +169,97 @@ 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 (dxl_comm_->SetupPort(port_name_, baud_rate_) != DxlError::OK) { + return hardware_interface::CallbackReturn::ERROR; } - if (controller_id_.size() > 0) { - for (int i = 0; i < 10; i++) { - std::vector id_arr; - for (auto controller : controller_id_) { - id_arr.push_back(controller); - } - if (dxl_comm_->InitDxlComm(id_arr, port_name_, baud_rate_) == DxlError::OK) { - RCLCPP_INFO_STREAM(logger_, "Trying to connect to the communication port..."); + 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) { 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; - } } + std::this_thread::sleep_for(std::chrono::milliseconds(250)); } } - if (!InitControllerItems()) { - RCLCPP_ERROR_STREAM(logger_, "Error: InitControllerItems"); - return hardware_interface::CallbackReturn::ERROR; - } + torque_enabled_comm_id_id_.clear(); + 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; + const std::string & type = gpio.parameters.at("type"); - for (int i = 0; i < 10; i++) { - std::vector id_arr; - for (auto dxl : dxl_id_) { - id_arr.push_back(dxl); - } - for (auto sensor : sensor_id_) { - id_arr.push_back(sensor); - } - if (dxl_comm_->InitDxlComm(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! :("); + 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; } } - } - 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()); - if (dxl_comm_->InitTorqueStates( - dxl_id_with_virtual_dxl, - disable_torque_at_init) != DxlError::OK) - { - RCLCPP_ERROR_STREAM(logger_, "Error: InitTorqueStates"); - return hardware_interface::CallbackReturn::ERROR; - } + if (type == "dxl" || type == "virtual_dxl") { + 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 (!InitDxlItems()) { - RCLCPP_ERROR_STREAM(logger_, "Error: InitDxlItems"); - 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()) { @@ -566,10 +576,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 +595,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 +653,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 +796,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 +805,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,97 +822,157 @@ bool DynamixelHardware::CommReset() return false; } -bool DynamixelHardware::initItems(const std::string & type_filter) +bool DynamixelHardware::InitItem(const hardware_interface::ComponentInfo & gpio) { - RCLCPP_INFO_STREAM(logger_, "$$$$$ Init Items for type: " << type_filter); - 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"))); - - // Handle torque enable parameter - bool torque_enabled = type_filter == "dxl" || type_filter == "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); - } - - // 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") { - RCLCPP_INFO_STREAM( - logger_, - "[ID:" << std::to_string(id) << "] item_name:" << param_name.c_str() << "\tdata:" << - param.second); - if (dxl_comm_->WriteItem( - id, param_name, - static_cast(stoi(param.second))) != DxlError::OK) - { - return false; + 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; + + 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 (!token.empty()) {entries.push_back(token);} } + if (entries.empty()) {entries.push_back(value);} } - - // 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") - { - continue; - } - if (param_name.find("Limit") != std::string::npos) { + 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 { + p.clear(); + } + 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) << "] item_name:" << param_name.c_str() << "\tdata:" << - param.second); - if (dxl_comm_->WriteItem( - 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); } } + } + + 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); + } - // 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.find("Limit") != std::string::npos) + 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; + return false; } + } + } + + 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( - id, param_name, + comm_id, id, param_name, static_cast(stoi(param.second))) != DxlError::OK) { return false; } } } - return true; -} -bool DynamixelHardware::InitControllerItems() -{ - return initItems("controller") && initItems("virtual_dxl"); -} - -bool DynamixelHardware::InitDxlItems() -{ - return initItems("dxl") && initItems("sensor"); + 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; } bool DynamixelHardware::InitDxlReadItems() @@ -970,13 +1042,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 +1069,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 +1077,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 +1154,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 +1163,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; @@ -1111,28 +1196,46 @@ 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") == 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); + } } } @@ -1144,27 +1247,45 @@ 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") == 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); + } } } @@ -1185,7 +1306,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, @@ -1321,22 +1442,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;