From 79e67cc72e1108ad910c89a07ff0ed4b861c8389 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Wed, 9 Dec 2020 14:55:10 +0100 Subject: [PATCH] Initial structure and HTML scraper --- dynamixel/__init__.py | 0 dynamixel/channel/__init__.py | 0 dynamixel/model/2xc430_w250.py | 65 +++++++ dynamixel/model/2xl430_w250_t.py | 65 +++++++ dynamixel/model/ax_12a.py | 46 +++++ dynamixel/model/ax_12w.py | 46 +++++ dynamixel/model/ax_18a.py | 46 +++++ dynamixel/model/dx_113.py | 46 +++++ dynamixel/model/dx_116.py | 46 +++++ dynamixel/model/dx_117.py | 46 +++++ dynamixel/model/ex_106+.py | 48 +++++ dynamixel/model/h42_20_s300_r.py | 56 ++++++ dynamixel/model/h42_20_s300_r_a.py | 71 +++++++ dynamixel/model/h54_100_s500_r.py | 56 ++++++ dynamixel/model/h54_100_s500_r_a.py | 71 +++++++ dynamixel/model/h54_200_s500_r.py | 56 ++++++ dynamixel/model/h54_200_s500_r_a.py | 71 +++++++ dynamixel/model/l42_10_s300_r.py | 56 ++++++ dynamixel/model/l54_30_s400_r.py | 56 ++++++ dynamixel/model/l54_30_s500_r.py | 56 ++++++ dynamixel/model/l54_50_s290_r.py | 56 ++++++ dynamixel/model/l54_50_s500_r.py | 56 ++++++ dynamixel/model/m42_10_s260_r.py | 56 ++++++ dynamixel/model/m42_10_s260_r_a.py | 71 +++++++ dynamixel/model/m54_40_s250_r.py | 56 ++++++ dynamixel/model/m54_40_s250_r_a.py | 71 +++++++ dynamixel/model/m54_60_s250_r.py | 56 ++++++ dynamixel/model/m54_60_s250_r_a.py | 71 +++++++ dynamixel/model/mx_106t_r.py | 53 ++++++ dynamixel/model/mx_106t_r_2.0.py | 68 +++++++ dynamixel/model/mx_12w.py | 49 +++++ dynamixel/model/mx_28t_r_at_ar.py | 49 +++++ dynamixel/model/mx_28t_r_at_ar_2.0.py | 66 +++++++ dynamixel/model/mx_64t_r_at_ar.py | 52 +++++ dynamixel/model/mx_64t_r_at_ar_2.0.py | 68 +++++++ dynamixel/model/ph42_020_s300_r.py | 72 +++++++ dynamixel/model/ph54_100_s500_r.py | 72 +++++++ dynamixel/model/ph54_200_s500_r.py | 72 +++++++ dynamixel/model/pm42_010_s260_r.py | 72 +++++++ dynamixel/model/pm54_040_s250_r.py | 72 +++++++ dynamixel/model/pm54_060_s250_r.py | 72 +++++++ dynamixel/model/rx_10.py | 46 +++++ dynamixel/model/rx_24f.py | 46 +++++ dynamixel/model/rx_28.py | 46 +++++ dynamixel/model/rx_64.py | 46 +++++ dynamixel/model/xc430_w150_t.py | 65 +++++++ dynamixel/model/xc430_w240_t.py | 65 +++++++ dynamixel/model/xh430_v210_r.py | 67 +++++++ dynamixel/model/xh430_v350_r.py | 67 +++++++ dynamixel/model/xh430_w210_t_r.py | 67 +++++++ dynamixel/model/xh430_w350_t_r.py | 67 +++++++ dynamixel/model/xh540_v150_r.py | 69 +++++++ dynamixel/model/xh540_v270_r.py | 69 +++++++ dynamixel/model/xh540_w150_t_r.py | 69 +++++++ dynamixel/model/xh540_w270_t_r.py | 69 +++++++ dynamixel/model/xl430_w250_t.py | 65 +++++++ dynamixel/model/xl_320.py | 45 +++++ dynamixel/model/xm430_w210_t_r.py | 67 +++++++ dynamixel/model/xm430_w350_t_r.py | 67 +++++++ dynamixel/model/xm540_w150_t_r.py | 69 +++++++ dynamixel/model/xm540_w270_t_r.py | 69 +++++++ dynamixel/model/xw540_t140_r.py | 66 +++++++ dynamixel/model/xw540_t260_r.py | 66 +++++++ dynamixel/protocol/Protocol2.py | 2 + dynamixel/protocol/__init__.py | 1 + dynamixel/servo/__init__.py | 30 +++ tools/html2desc.py | 265 ++++++++++++++++++++++++++ 67 files changed, 4003 insertions(+) create mode 100644 dynamixel/__init__.py create mode 100644 dynamixel/channel/__init__.py create mode 100644 dynamixel/model/2xc430_w250.py create mode 100644 dynamixel/model/2xl430_w250_t.py create mode 100644 dynamixel/model/ax_12a.py create mode 100644 dynamixel/model/ax_12w.py create mode 100644 dynamixel/model/ax_18a.py create mode 100644 dynamixel/model/dx_113.py create mode 100644 dynamixel/model/dx_116.py create mode 100644 dynamixel/model/dx_117.py create mode 100644 dynamixel/model/ex_106+.py create mode 100644 dynamixel/model/h42_20_s300_r.py create mode 100644 dynamixel/model/h42_20_s300_r_a.py create mode 100644 dynamixel/model/h54_100_s500_r.py create mode 100644 dynamixel/model/h54_100_s500_r_a.py create mode 100644 dynamixel/model/h54_200_s500_r.py create mode 100644 dynamixel/model/h54_200_s500_r_a.py create mode 100644 dynamixel/model/l42_10_s300_r.py create mode 100644 dynamixel/model/l54_30_s400_r.py create mode 100644 dynamixel/model/l54_30_s500_r.py create mode 100644 dynamixel/model/l54_50_s290_r.py create mode 100644 dynamixel/model/l54_50_s500_r.py create mode 100644 dynamixel/model/m42_10_s260_r.py create mode 100644 dynamixel/model/m42_10_s260_r_a.py create mode 100644 dynamixel/model/m54_40_s250_r.py create mode 100644 dynamixel/model/m54_40_s250_r_a.py create mode 100644 dynamixel/model/m54_60_s250_r.py create mode 100644 dynamixel/model/m54_60_s250_r_a.py create mode 100644 dynamixel/model/mx_106t_r.py create mode 100644 dynamixel/model/mx_106t_r_2.0.py create mode 100644 dynamixel/model/mx_12w.py create mode 100644 dynamixel/model/mx_28t_r_at_ar.py create mode 100644 dynamixel/model/mx_28t_r_at_ar_2.0.py create mode 100644 dynamixel/model/mx_64t_r_at_ar.py create mode 100644 dynamixel/model/mx_64t_r_at_ar_2.0.py create mode 100644 dynamixel/model/ph42_020_s300_r.py create mode 100644 dynamixel/model/ph54_100_s500_r.py create mode 100644 dynamixel/model/ph54_200_s500_r.py create mode 100644 dynamixel/model/pm42_010_s260_r.py create mode 100644 dynamixel/model/pm54_040_s250_r.py create mode 100644 dynamixel/model/pm54_060_s250_r.py create mode 100644 dynamixel/model/rx_10.py create mode 100644 dynamixel/model/rx_24f.py create mode 100644 dynamixel/model/rx_28.py create mode 100644 dynamixel/model/rx_64.py create mode 100644 dynamixel/model/xc430_w150_t.py create mode 100644 dynamixel/model/xc430_w240_t.py create mode 100644 dynamixel/model/xh430_v210_r.py create mode 100644 dynamixel/model/xh430_v350_r.py create mode 100644 dynamixel/model/xh430_w210_t_r.py create mode 100644 dynamixel/model/xh430_w350_t_r.py create mode 100644 dynamixel/model/xh540_v150_r.py create mode 100644 dynamixel/model/xh540_v270_r.py create mode 100644 dynamixel/model/xh540_w150_t_r.py create mode 100644 dynamixel/model/xh540_w270_t_r.py create mode 100644 dynamixel/model/xl430_w250_t.py create mode 100644 dynamixel/model/xl_320.py create mode 100644 dynamixel/model/xm430_w210_t_r.py create mode 100644 dynamixel/model/xm430_w350_t_r.py create mode 100644 dynamixel/model/xm540_w150_t_r.py create mode 100644 dynamixel/model/xm540_w270_t_r.py create mode 100644 dynamixel/model/xw540_t140_r.py create mode 100644 dynamixel/model/xw540_t260_r.py create mode 100644 dynamixel/protocol/Protocol2.py create mode 100644 dynamixel/protocol/__init__.py create mode 100644 dynamixel/servo/__init__.py create mode 100755 tools/html2desc.py diff --git a/dynamixel/__init__.py b/dynamixel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dynamixel/channel/__init__.py b/dynamixel/channel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dynamixel/model/2xc430_w250.py b/dynamixel/model/2xc430_w250.py new file mode 100644 index 0000000..80b014c --- /dev/null +++ b/dynamixel/model/2xc430_w250.py @@ -0,0 +1,65 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class 2XC430_W250(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1160), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=None), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=60), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='velocity_limit', address=44, size=4, default=275), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=700), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(2XC430_W250, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/2xl430_w250_t.py b/dynamixel/model/2xl430_w250_t.py new file mode 100644 index 0000000..3e3ed98 --- /dev/null +++ b/dynamixel/model/2xl430_w250_t.py @@ -0,0 +1,65 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class 2XL430_W250_T(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1090), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=None), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=72), + Row(name='max_voltage_limit', address=32, size=2, default=140), + Row(name='min_voltage_limit', address=34, size=2, default=60), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='velocity_limit', address=44, size=4, default=250), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1800), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=2000), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=640), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(2XL430_W250_T, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ax_12a.py b/dynamixel/model/ax_12a.py new file mode 100644 index 0000000..4572b88 --- /dev/null +++ b/dynamixel/model/ax_12a.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class AX_12A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=12), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=1), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=70), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=140), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(AX_12A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ax_12w.py b/dynamixel/model/ax_12w.py new file mode 100644 index 0000000..9ab069d --- /dev/null +++ b/dynamixel/model/ax_12w.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class AX_12W(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=300), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=1), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=70), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=140), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=4), + Row(name='ccw_compliance_margin', address=27, size=1, default=4), + Row(name='cw_compliance_slope', address=28, size=1, default=64), + Row(name='ccw_compliance_slope', address=29, size=1, default=64), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(AX_12W, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ax_18a.py b/dynamixel/model/ax_18a.py new file mode 100644 index 0000000..ccdf5e1 --- /dev/null +++ b/dynamixel/model/ax_18a.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class AX_18A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=18), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=1), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=75), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=140), + Row(name='max_torque', address=14, size=2, default=983), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(AX_18A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/dx_113.py b/dynamixel/model/dx_113.py new file mode 100644 index 0000000..ed75651 --- /dev/null +++ b/dynamixel/model/dx_113.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class DX_113(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=113), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=85), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=0), + Row(name='ccw_compliance_margin', address=27, size=1, default=0), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(DX_113, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/dx_116.py b/dynamixel/model/dx_116.py new file mode 100644 index 0000000..8aedc02 --- /dev/null +++ b/dynamixel/model/dx_116.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class DX_116(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=116), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=85), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=0), + Row(name='ccw_compliance_margin', address=27, size=1, default=0), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(DX_116, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/dx_117.py b/dynamixel/model/dx_117.py new file mode 100644 index 0000000..a8c09e2 --- /dev/null +++ b/dynamixel/model/dx_117.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class DX_117(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=117), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(DX_117, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ex_106+.py b/dynamixel/model/ex_106+.py new file mode 100644 index 0000000..5fa6e3d --- /dev/null +++ b/dynamixel/model/ex_106+.py @@ -0,0 +1,48 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class EX_106+(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=107), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=4095), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=240), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=0), + Row(name='sensed_current', address=56, size=2, default=None) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(EX_106+, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h42_20_s300_r.py b/dynamixel/model/h42_20_s300_r.py new file mode 100644 index 0000000..8fdb2d4 --- /dev/null +++ b/dynamixel/model/h42_20_s300_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H42_20_S300_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=51200), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=255), + Row(name='torque_limit', address=30, size=2, default=465), + Row(name='velocity_limit', address=32, size=4, default=10300), + Row(name='max_position_limit', address=36, size=4, default=151875), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=40), + Row(name='velocity_p_gain', address=588, size=2, default=440), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H42_20_S300_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h42_20_s300_r_a.py b/dynamixel/model/h42_20_s300_r_a.py new file mode 100644 index 0000000..471fabb --- /dev/null +++ b/dynamixel/model/h42_20_s300_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H42_20_S300_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=51201), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=4500), + Row(name='acceleration_limit', address=40, size=4, default=10765), + Row(name='velocity_limit', address=44, size=4, default=2920), + Row(name='max_position_limit', address=48, size=4, default=303454), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H42_20_S300_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h54_100_s500_r.py b/dynamixel/model/h54_100_s500_r.py new file mode 100644 index 0000000..4870760 --- /dev/null +++ b/dynamixel/model/h54_100_s500_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H54_100_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=53768), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=310), + Row(name='velocity_limit', address=32, size=4, default=17000), + Row(name='max_position_limit', address=36, size=4, default=250961), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=256), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H54_100_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h54_100_s500_r_a.py b/dynamixel/model/h54_100_s500_r_a.py new file mode 100644 index 0000000..fdf100e --- /dev/null +++ b/dynamixel/model/h54_100_s500_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H54_100_S500_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=53769), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=50), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=15900), + Row(name='acceleration_limit', address=40, size=4, default=10639), + Row(name='velocity_limit', address=44, size=4, default=2920), + Row(name='max_position_limit', address=48, size=4, default=501433), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H54_100_S500_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h54_200_s500_r.py b/dynamixel/model/h54_200_s500_r.py new file mode 100644 index 0000000..b8fd5e2 --- /dev/null +++ b/dynamixel/model/h54_200_s500_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H54_200_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=54024), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=620), + Row(name='velocity_limit', address=32, size=4, default=17000), + Row(name='max_position_limit', address=36, size=4, default=250961), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=14), + Row(name='velocity_p_gain', address=588, size=2, default=399), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H54_200_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/h54_200_s500_r_a.py b/dynamixel/model/h54_200_s500_r_a.py new file mode 100644 index 0000000..d42186b --- /dev/null +++ b/dynamixel/model/h54_200_s500_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class H54_200_S500_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=54025), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=22740), + Row(name='acceleration_limit', address=40, size=4, default=9982), + Row(name='velocity_limit', address=44, size=4, default=2900), + Row(name='max_position_limit', address=48, size=4, default=501433), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(H54_200_S500_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/l42_10_s300_r.py b/dynamixel/model/l42_10_s300_r.py new file mode 100644 index 0000000..e5b1888 --- /dev/null +++ b/dynamixel/model/l42_10_s300_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class L42_10_S300_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=35072), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=10), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=987), + Row(name='velocity_limit', address=32, size=4, default=None), + Row(name='max_position_limit', address=36, size=4, default=2048), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=30), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=40), + Row(name='velocity_p_gain', address=588, size=2, default=440), + Row(name='position_p_gain', address=594, size=2, default=64), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(L42_10_S300_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/l54_30_s400_r.py b/dynamixel/model/l54_30_s400_r.py new file mode 100644 index 0000000..c6a0355 --- /dev/null +++ b/dynamixel/model/l54_30_s400_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class L54_30_S400_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=37928), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=100), + Row(name='velocity_limit', address=32, size=4, default=9000), + Row(name='max_position_limit', address=36, size=4, default=144197), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=412), + Row(name='position_p_gain', address=594, size=2, default=200), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(L54_30_S400_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/l54_30_s500_r.py b/dynamixel/model/l54_30_s500_r.py new file mode 100644 index 0000000..5ad457b --- /dev/null +++ b/dynamixel/model/l54_30_s500_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class L54_30_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=37896), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=100), + Row(name='velocity_limit', address=32, size=4, default=9000), + Row(name='max_position_limit', address=36, size=4, default=180692), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=256), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(L54_30_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/l54_50_s290_r.py b/dynamixel/model/l54_50_s290_r.py new file mode 100644 index 0000000..0d301b4 --- /dev/null +++ b/dynamixel/model/l54_50_s290_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class L54_50_S290_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=38176), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=120), + Row(name='velocity_limit', address=32, size=4, default=8000), + Row(name='max_position_limit', address=36, size=4, default=103846), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=412), + Row(name='position_p_gain', address=594, size=2, default=250), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(L54_50_S290_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/l54_50_s500_r.py b/dynamixel/model/l54_50_s500_r.py new file mode 100644 index 0000000..c047b61 --- /dev/null +++ b/dynamixel/model/l54_50_s500_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class L54_50_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=38152), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=120), + Row(name='velocity_limit', address=32, size=4, default=8000), + Row(name='max_position_limit', address=36, size=4, default=180692), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=256), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(L54_50_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m42_10_s260_r.py b/dynamixel/model/m42_10_s260_r.py new file mode 100644 index 0000000..7b73819 --- /dev/null +++ b/dynamixel/model/m42_10_s260_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M42_10_S260_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=43288), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=300), + Row(name='velocity_limit', address=32, size=4, default=8000), + Row(name='max_position_limit', address=36, size=4, default=131593), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=72), + Row(name='velocity_p_gain', address=588, size=2, default=520), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M42_10_S260_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m42_10_s260_r_a.py b/dynamixel/model/m42_10_s260_r_a.py new file mode 100644 index 0000000..a867531 --- /dev/null +++ b/dynamixel/model/m42_10_s260_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M42_10_S260_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=43289), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=300), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=1461), + Row(name='acceleration_limit', address=40, size=4, default=10867), + Row(name='velocity_limit', address=44, size=4, default=2600), + Row(name='max_position_limit', address=48, size=4, default=262931), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M42_10_S260_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m54_40_s250_r.py b/dynamixel/model/m54_40_s250_r.py new file mode 100644 index 0000000..906479c --- /dev/null +++ b/dynamixel/model/m54_40_s250_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M54_40_S250_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=46096), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=120), + Row(name='velocity_limit', address=32, size=4, default=8000), + Row(name='max_position_limit', address=36, size=4, default=125708), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=256), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M54_40_S250_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m54_40_s250_r_a.py b/dynamixel/model/m54_40_s250_r_a.py new file mode 100644 index 0000000..a8d8702 --- /dev/null +++ b/dynamixel/model/m54_40_s250_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M54_40_S250_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=46097), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=4470), + Row(name='acceleration_limit', address=40, size=4, default=11037), + Row(name='velocity_limit', address=44, size=4, default=2840), + Row(name='max_position_limit', address=48, size=4, default=251173), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M54_40_S250_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m54_60_s250_r.py b/dynamixel/model/m54_60_s250_r.py new file mode 100644 index 0000000..6a3136f --- /dev/null +++ b/dynamixel/model/m54_60_s250_r.py @@ -0,0 +1,56 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M54_60_S250_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=46352), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='homing_offset', address=13, size=4, default=0), + Row(name='moving_threshold', address=17, size=4, default=50), + Row(name='temperature_limit', address=21, size=1, default=80), + Row(name='max_voltage_limit', address=22, size=2, default=400), + Row(name='min_voltage_limit', address=24, size=2, default=150), + Row(name='acceleration_limit', address=26, size=4, default=None), + Row(name='torque_limit', address=30, size=2, default=180), + Row(name='velocity_limit', address=32, size=4, default=8000), + Row(name='max_position_limit', address=36, size=4, default=125708), + Row(name='min_position_limit', address=40, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(44, 48)], size=1), + Row(name='shutdown', address=48, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(49, 561, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=562, size=1, default=0), + Row(name='led_red', address=563, size=1, default=0), + Row(name='led_green', address=564, size=1, default=0), + Row(name='led_blue', address=565, size=1, default=0), + Row(name='velocity_i_gain', address=586, size=2, default=16), + Row(name='velocity_p_gain', address=588, size=2, default=256), + Row(name='position_p_gain', address=594, size=2, default=32), + Row(name='goal_position', address=596, size=4, default=None), + Row(name='goal_velocity', address=600, size=4, default=0), + Row(name='goal_torque', address=604, size=2, default=0), + Row(name='goal_acceleration', address=606, size=4, default=0), + Row(name='moving', address=610, size=1, default=None), + Row(name='present_position', address=611, size=4, default=None), + Row(name='present_velocity', address=615, size=4, default=None), + Row(name='present_current', address=621, size=2, default=None), + Row(name='present_input_voltage', address=623, size=2, default=None), + Row(name='present_temperature', address=625, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(626, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 890)], size=1), + Row(name='registered_instruction', address=890, size=1, default=0), + Row(name='status_return_level', address=891, size=1, default=2), + Row(name='hardware_error_status', address=892, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M54_60_S250_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/m54_60_s250_r_a.py b/dynamixel/model/m54_60_s250_r_a.py new file mode 100644 index 0000000..4b837af --- /dev/null +++ b/dynamixel/model/m54_60_s250_r_a.py @@ -0,0 +1,71 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class M54_60_S250_R_A(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=46353), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=50), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=7980), + Row(name='acceleration_limit', address=40, size=4, default=11145), + Row(name='velocity_limit', address=44, size=4, default=2830), + Row(name='max_position_limit', address=48, size=4, default=251173), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(M54_60_S250_R_A, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_106t_r.py b/dynamixel/model/mx_106t_r.py new file mode 100644 index 0000000..93c1c1f --- /dev/null +++ b/dynamixel/model/mx_106t_r.py @@ -0,0 +1,53 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_106T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=320), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=4095), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=160), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36), + Row(name='multi_turn_offset', address=20, size=2, default=0), + Row(name='resolution_divider', address=22, size=1, default=1) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='d_gain', address=26, size=1, default=0), + Row(name='i_gain', address=27, size=1, default=0), + Row(name='p_gain', address=28, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=0), + Row(name='realtime_tick', address=50, size=2, default=0), + Row(name='current', address=68, size=2, default=0), + Row(name='torque_ctrl_mode_enable', address=70, size=1, default=0), + Row(name='goal_torque', address=71, size=2, default=0), + Row(name='goal_acceleration', address=73, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(MX_106T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_106t_r_2.0.py b/dynamixel/model/mx_106t_r_2.0.py new file mode 100644 index 0000000..fccc138 --- /dev/null +++ b/dynamixel/model/mx_106t_r_2.0.py @@ -0,0 +1,68 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_106T_R_2.0(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=321), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='acceleration_limit', address=40, size=4, default=32767), + Row(name='velocity_limit', address=44, size=4, default=210), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=850), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(MX_106T_R_2.0, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_12w.py b/dynamixel/model/mx_12w.py new file mode 100644 index 0000000..b455db0 --- /dev/null +++ b/dynamixel/model/mx_12w.py @@ -0,0 +1,49 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_12W(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=360), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=1), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=4095), + Row(name='temperature_limit', address=11, size=1, default=70), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=160), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36), + Row(name='multi_turn_offset', address=20, size=2, default=0), + Row(name='resolution_divider', address=22, size=1, default=1) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='d_gain', address=26, size=1, default=8), + Row(name='i_gain', address=27, size=1, default=0), + Row(name='p_gain', address=28, size=1, default=8), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32), + Row(name='realtime_tick', address=50, size=2, default=0), + Row(name='goal_acceleration', address=73, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(MX_12W, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_28t_r_at_ar.py b/dynamixel/model/mx_28t_r_at_ar.py new file mode 100644 index 0000000..cba2d3a --- /dev/null +++ b/dynamixel/model/mx_28t_r_at_ar.py @@ -0,0 +1,49 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_28T_R_AT_AR(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=29), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=4095), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=160), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36), + Row(name='multi_turn_offset', address=20, size=2, default=0), + Row(name='resolution_divider', address=22, size=1, default=1) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='d_gain', address=26, size=1, default=0), + Row(name='i_gain', address=27, size=1, default=0), + Row(name='p_gain', address=28, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=0), + Row(name='realtime_tick', address=50, size=2, default=0), + Row(name='goal_acceleration', address=73, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(MX_28T_R_AT_AR, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_28t_r_at_ar_2.0.py b/dynamixel/model/mx_28t_r_at_ar_2.0.py new file mode 100644 index 0000000..6ceaaa6 --- /dev/null +++ b/dynamixel/model/mx_28t_r_at_ar_2.0.py @@ -0,0 +1,66 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_28T_R_AT_AR_2.0(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=30), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='acceleration_limit', address=40, size=4, default=32767), + Row(name='velocity_limit', address=44, size=4, default=230), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=850), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(MX_28T_R_AT_AR_2.0, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_64t_r_at_ar.py b/dynamixel/model/mx_64t_r_at_ar.py new file mode 100644 index 0000000..68b8d2e --- /dev/null +++ b/dynamixel/model/mx_64t_r_at_ar.py @@ -0,0 +1,52 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_64T_R_AT_AR(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=310), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=4095), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=240), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36), + Row(name='multi_turn_offset', address=20, size=2, default=0), + Row(name='resolution_divider', address=22, size=1, default=1) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='d_gain', address=26, size=1, default=0), + Row(name='i_gain', address=27, size=1, default=0), + Row(name='p_gain', address=28, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=0), + Row(name='realtime_tick', address=50, size=2, default=0), + Row(name='current', address=68, size=2, default=0), + Row(name='torque_ctrl_mode_enable', address=70, size=1, default=0), + Row(name='goal_torque', address=71, size=2, default=0), + Row(name='goal_acceleration', address=73, size=1, default=0) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(MX_64T_R_AT_AR, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/mx_64t_r_at_ar_2.0.py b/dynamixel/model/mx_64t_r_at_ar_2.0.py new file mode 100644 index 0000000..6115df3 --- /dev/null +++ b/dynamixel/model/mx_64t_r_at_ar_2.0.py @@ -0,0 +1,68 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class MX_64T_R_AT_AR_2.0(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=311), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=1941), + Row(name='acceleration_limit', address=40, size=4, default=32767), + Row(name='velocity_limit', address=44, size=4, default=285), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=850), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(MX_64T_R_AT_AR_2.0, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ph42_020_s300_r.py b/dynamixel/model/ph42_020_s300_r.py new file mode 100644 index 0000000..32b2269 --- /dev/null +++ b/dynamixel/model/ph42_020_s300_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PH42_020_S300_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2000), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=4500), + Row(name='acceleration_limit', address=40, size=4, default=10765), + Row(name='velocity_limit', address=44, size=4, default=2920), + Row(name='max_position_limit', address=48, size=4, default=303454), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PH42_020_S300_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ph54_100_s500_r.py b/dynamixel/model/ph54_100_s500_r.py new file mode 100644 index 0000000..9e80eec --- /dev/null +++ b/dynamixel/model/ph54_100_s500_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PH54_100_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2010), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=15900), + Row(name='acceleration_limit', address=40, size=4, default=10639), + Row(name='velocity_limit', address=44, size=4, default=2920), + Row(name='max_position_limit', address=48, size=4, default=501433), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PH54_100_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/ph54_200_s500_r.py b/dynamixel/model/ph54_200_s500_r.py new file mode 100644 index 0000000..d1fe857 --- /dev/null +++ b/dynamixel/model/ph54_200_s500_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PH54_200_S500_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2020), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=22740), + Row(name='acceleration_limit', address=40, size=4, default=9982), + Row(name='velocity_limit', address=44, size=4, default=2900), + Row(name='max_position_limit', address=48, size=4, default=501433), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=52), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PH54_200_S500_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/pm42_010_s260_r.py b/dynamixel/model/pm42_010_s260_r.py new file mode 100644 index 0000000..e2bc049 --- /dev/null +++ b/dynamixel/model/pm42_010_s260_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PM42_010_S260_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2100), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=1461), + Row(name='acceleration_limit', address=40, size=4, default=10867), + Row(name='velocity_limit', address=44, size=4, default=2600), + Row(name='max_position_limit', address=48, size=4, default=262931), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PM42_010_S260_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/pm54_040_s250_r.py b/dynamixel/model/pm54_040_s250_r.py new file mode 100644 index 0000000..8289ef9 --- /dev/null +++ b/dynamixel/model/pm54_040_s250_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PM54_040_S250_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2110), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='sencondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=4470), + Row(name='acceleration_limit', address=40, size=4, default=11037), + Row(name='velocity_limit', address=44, size=4, default=2840), + Row(name='max_position_limit', address=48, size=4, default=251173), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PM54_040_S250_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/pm54_060_s250_r.py b/dynamixel/model/pm54_060_s250_r.py new file mode 100644 index 0000000..ef29728 --- /dev/null +++ b/dynamixel/model/pm54_060_s250_r.py @@ -0,0 +1,72 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class PM54_060_S250_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=2120), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=350), + Row(name='min_voltage_limit', address=34, size=2, default=150), + Row(name='pwm_limit', address=36, size=2, default=2009), + Row(name='current_limit', address=38, size=2, default=7980), + Row(name='acceleration_limit', address=40, size=4, default=11145), + Row(name='velocity_limit', address=44, size=4, default=2830), + Row(name='max_position_limit', address=48, size=4, default=251173), + Row(name='min_position_limit', address=52, size=4, default=None), + IndirectRow(name='external_port_mode', addresses=[range(56, 60)], size=1), + Row(name='shutdown', address=63, size=1, default=58), + IndirectRow(name='indirect_address', addresses=[range(168, 424, 2)], size=2) + ] + RAM = [ + Row(name='torque_enable', address=512, size=1, default=0), + Row(name='led_red', address=513, size=1, default=0), + Row(name='led_green', address=514, size=1, default=0), + Row(name='led_blue', address=515, size=1, default=0), + Row(name='status_return_level', address=516, size=1, default=2), + Row(name='registered_instruction', address=517, size=1, default=0), + Row(name='hardware_error_status', address=518, size=1, default=0), + Row(name='velocity_i_gain', address=524, size=2, default=None), + Row(name='velocity_p_gain', address=526, size=2, default=None), + Row(name='position_d_gain', address=528, size=2, default=None), + Row(name='position_i_gain', address=530, size=2, default=None), + Row(name='position_p_gain', address=532, size=2, default=None), + Row(name='feedforward_2nd_gain', address=536, size=2, default=None), + Row(name='feedforward_1st_gain', address=538, size=2, default=None), + Row(name='bus_watchdog', address=546, size=1, default=None), + Row(name='goal_pwm', address=548, size=2, default=None), + Row(name='goal_current', address=550, size=2, default=None), + Row(name='goal_velocity', address=552, size=4, default=None), + Row(name='profile_acceleration', address=556, size=4, default=None), + Row(name='profile_velocity', address=560, size=4, default=None), + Row(name='goal_position', address=564, size=4, default=None), + Row(name='realtime_tick', address=568, size=2, default=None), + Row(name='moving', address=570, size=1, default=None), + Row(name='moving_status', address=571, size=1, default=None), + Row(name='present_pwm', address=572, size=2, default=None), + Row(name='present_current', address=574, size=2, default=None), + Row(name='present_velocity', address=576, size=4, default=None), + Row(name='present_position', address=580, size=4, default=None), + Row(name='velocity_trajectory', address=584, size=4, default=None), + Row(name='position_trajectory', address=588, size=4, default=None), + Row(name='present_input_voltage', address=592, size=2, default=None), + Row(name='present_temperature', address=594, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(600, 608, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(634, 762)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(PM54_060_S250_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/rx_10.py b/dynamixel/model/rx_10.py new file mode 100644 index 0000000..2d3372b --- /dev/null +++ b/dynamixel/model/rx_10.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class RX_10(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=10), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(RX_10, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/rx_24f.py b/dynamixel/model/rx_24f.py new file mode 100644 index 0000000..40b2602 --- /dev/null +++ b/dynamixel/model/rx_24f.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class RX_24F(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=24), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(RX_24F, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/rx_28.py b/dynamixel/model/rx_28.py new file mode 100644 index 0000000..71fbb7d --- /dev/null +++ b/dynamixel/model/rx_28.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class RX_28(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=28), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(RX_28, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/rx_64.py b/dynamixel/model/rx_64.py new file mode 100644 index 0000000..88dbce4 --- /dev/null +++ b/dynamixel/model/rx_64.py @@ -0,0 +1,46 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class RX_64(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=64), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=34), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='temperature_limit', address=11, size=1, default=80), + Row(name='min_voltage_limit', address=12, size=1, default=60), + Row(name='max_voltage_limit', address=13, size=1, default=190), + Row(name='max_torque', address=14, size=2, default=1023), + Row(name='status_return_level', address=16, size=1, default=2), + Row(name='alarm_led', address=17, size=1, default=36), + Row(name='shutdown', address=18, size=1, default=36) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='cw_compliance_margin', address=26, size=1, default=1), + Row(name='ccw_compliance_margin', address=27, size=1, default=1), + Row(name='cw_compliance_slope', address=28, size=1, default=32), + Row(name='ccw_compliance_slope', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=34, size=2, default=None), + Row(name='present_position', address=36, size=2, default=None), + Row(name='present_speed', address=38, size=2, default=None), + Row(name='present_load', address=40, size=2, default=None), + Row(name='present_voltage', address=42, size=1, default=None), + Row(name='present_temperature', address=43, size=1, default=None), + Row(name='registered', address=44, size=1, default=0), + Row(name='moving', address=46, size=1, default=0), + Row(name='lock', address=47, size=1, default=0), + Row(name='punch', address=48, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol1 + + def __init__(self, id): + super(RX_64, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xc430_w150_t.py b/dynamixel/model/xc430_w150_t.py new file mode 100644 index 0000000..4c997a3 --- /dev/null +++ b/dynamixel/model/xc430_w150_t.py @@ -0,0 +1,65 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XC430_W150_T(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1070), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=20), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=60), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='velocity_limit', address=44, size=4, default=460), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=460), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XC430_W150_T, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xc430_w240_t.py b/dynamixel/model/xc430_w240_t.py new file mode 100644 index 0000000..ca90954 --- /dev/null +++ b/dynamixel/model/xc430_w240_t.py @@ -0,0 +1,65 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XC430_W240_T(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1080), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=60), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='velocity_limit', address=44, size=4, default=306), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=700), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XC430_W240_T, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh430_v210_r.py b/dynamixel/model/xh430_v210_r.py new file mode 100644 index 0000000..7a4c3ef --- /dev/null +++ b/dynamixel/model/xh430_v210_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH430_V210_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1050), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=300), + Row(name='min_voltage_limit', address=34, size=2, default=110), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=689), + Row(name='velocity_limit', address=44, size=4, default=230), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH430_V210_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh430_v350_r.py b/dynamixel/model/xh430_v350_r.py new file mode 100644 index 0000000..db5ae3b --- /dev/null +++ b/dynamixel/model/xh430_v350_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH430_V350_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1040), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=300), + Row(name='min_voltage_limit', address=34, size=2, default=110), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=689), + Row(name='velocity_limit', address=44, size=4, default=135), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH430_V350_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh430_w210_t_r.py b/dynamixel/model/xh430_w210_t_r.py new file mode 100644 index 0000000..3bd9ae2 --- /dev/null +++ b/dynamixel/model/xh430_w210_t_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH430_W210_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1010), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=648), + Row(name='velocity_limit', address=44, size=4, default=210), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=900), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH430_W210_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh430_w350_t_r.py b/dynamixel/model/xh430_w350_t_r.py new file mode 100644 index 0000000..3b28cb9 --- /dev/null +++ b/dynamixel/model/xh430_w350_t_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH430_W350_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1000), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=648), + Row(name='velocity_limit', address=44, size=4, default=130), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=900), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH430_W350_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh540_v150_r.py b/dynamixel/model/xh540_v150_r.py new file mode 100644 index 0000000..8aacad0 --- /dev/null +++ b/dynamixel/model/xh540_v150_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH540_V150_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1150), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=300), + Row(name='min_voltage_limit', address=34, size=2, default=110), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=230), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH540_V150_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh540_v270_r.py b/dynamixel/model/xh540_v270_r.py new file mode 100644 index 0000000..d54166c --- /dev/null +++ b/dynamixel/model/xh540_v270_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH540_V270_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1140), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=300), + Row(name='min_voltage_limit', address=34, size=2, default=110), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=128), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH540_V270_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh540_w150_t_r.py b/dynamixel/model/xh540_w150_t_r.py new file mode 100644 index 0000000..68447a1 --- /dev/null +++ b/dynamixel/model/xh540_w150_t_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH540_W150_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1110), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=300), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH540_W150_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xh540_w270_t_r.py b/dynamixel/model/xh540_w270_t_r.py new file mode 100644 index 0000000..5cb5457 --- /dev/null +++ b/dynamixel/model/xh540_w270_t_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XH540_W270_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1100), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=167), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XH540_W270_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xl430_w250_t.py b/dynamixel/model/xl430_w250_t.py new file mode 100644 index 0000000..66a0e40 --- /dev/null +++ b/dynamixel/model/xl430_w250_t.py @@ -0,0 +1,65 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XL430_W250_T(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1060), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=72), + Row(name='max_voltage_limit', address=32, size=2, default=140), + Row(name='min_voltage_limit', address=34, size=2, default=60), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='velocity_limit', address=44, size=4, default=265), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1000), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=4000), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=640), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_load', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XL430_W250_T, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xl_320.py b/dynamixel/model/xl_320.py new file mode 100644 index 0000000..fc3e80f --- /dev/null +++ b/dynamixel/model/xl_320.py @@ -0,0 +1,45 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XL_320(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=350), + Row(name='firmware_version', address=2, size=1, default=None), + Row(name='id', address=3, size=1, default=1), + Row(name='baud_rate', address=4, size=1, default=3), + Row(name='return_delay_time', address=5, size=1, default=250), + Row(name='cw_angle_limit', address=6, size=2, default=0), + Row(name='ccw_angle_limit', address=8, size=2, default=1023), + Row(name='control_mode', address=11, size=1, default=2), + Row(name='temperature_limit', address=12, size=1, default=65), + Row(name='min_voltage_limit', address=13, size=1, default=60), + Row(name='max_voltage_limit', address=14, size=1, default=90), + Row(name='max_torque', address=15, size=2, default=1023), + Row(name='status_return_level', address=17, size=1, default=2), + Row(name='shutdown', address=18, size=1, default=3) + ] + RAM = [ + Row(name='torque_enable', address=24, size=1, default=0), + Row(name='led', address=25, size=1, default=0), + Row(name='d_gain', address=27, size=1, default=0), + Row(name='i_gain', address=28, size=1, default=0), + Row(name='p_gain', address=29, size=1, default=32), + Row(name='goal_position', address=30, size=2, default=None), + Row(name='moving_speed', address=32, size=2, default=None), + Row(name='torque_limit', address=35, size=2, default=None), + Row(name='present_position', address=37, size=2, default=None), + Row(name='present_speed', address=39, size=2, default=None), + Row(name='present_load', address=41, size=2, default=None), + Row(name='present_voltage', address=45, size=1, default=None), + Row(name='present_temperature', address=46, size=1, default=None), + Row(name='registered', address=47, size=1, default=0), + Row(name='moving', address=49, size=1, default=0), + Row(name='hardware_error_status', address=50, size=1, default=0), + Row(name='punch', address=51, size=2, default=32) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XL_320, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xm430_w210_t_r.py b/dynamixel/model/xm430_w210_t_r.py new file mode 100644 index 0000000..8fd374f --- /dev/null +++ b/dynamixel/model/xm430_w210_t_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XM430_W210_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1030), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=1193), + Row(name='velocity_limit', address=44, size=4, default=330), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XM430_W210_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xm430_w350_t_r.py b/dynamixel/model/xm430_w350_t_r.py new file mode 100644 index 0000000..9c16b6c --- /dev/null +++ b/dynamixel/model/xm430_w350_t_r.py @@ -0,0 +1,67 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XM430_W350_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1020), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=1193), + Row(name='velocity_limit', address=44, size=4, default=200), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XM430_W350_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xm540_w150_t_r.py b/dynamixel/model/xm540_w150_t_r.py new file mode 100644 index 0000000..668d68f --- /dev/null +++ b/dynamixel/model/xm540_w150_t_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XM540_W150_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1130), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=230), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XM540_W150_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xm540_w270_t_r.py b/dynamixel/model/xm540_w270_t_r.py new file mode 100644 index 0000000..4247363 --- /dev/null +++ b/dynamixel/model/xm540_w270_t_r.py @@ -0,0 +1,69 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XM540_W270_T_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1120), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=128), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + IndirectRow(name='external_port_mode', addresses=[range(56, 59)], size=1), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='led', address=65, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='external_port_data', addresses=[range(152, 158, 2)], size=2), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XM540_W270_T_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xw540_t140_r.py b/dynamixel/model/xw540_t140_r.py new file mode 100644 index 0000000..b54630f --- /dev/null +++ b/dynamixel/model/xw540_t140_r.py @@ -0,0 +1,66 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XW540_T140_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1180), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=304), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XW540_T140_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/model/xw540_t260_r.py b/dynamixel/model/xw540_t260_r.py new file mode 100644 index 0000000..3dfb867 --- /dev/null +++ b/dynamixel/model/xw540_t260_r.py @@ -0,0 +1,66 @@ + +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class XW540_T260_R(Servo): + EEPROM = [ + Row(name='model_number', address=0, size=2, default=1170), + Row(name='model_information', address=2, size=4, default=None), + Row(name='firmware_version', address=6, size=1, default=None), + Row(name='id', address=7, size=1, default=1), + Row(name='baud_rate', address=8, size=1, default=1), + Row(name='return_delay_time', address=9, size=1, default=250), + Row(name='drive_mode', address=10, size=1, default=0), + Row(name='operating_mode', address=11, size=1, default=3), + Row(name='secondary_id', address=12, size=1, default=255), + Row(name='protocol_type', address=13, size=1, default=2), + Row(name='homing_offset', address=20, size=4, default=0), + Row(name='moving_threshold', address=24, size=4, default=10), + Row(name='temperature_limit', address=31, size=1, default=80), + Row(name='max_voltage_limit', address=32, size=2, default=160), + Row(name='min_voltage_limit', address=34, size=2, default=95), + Row(name='pwm_limit', address=36, size=2, default=885), + Row(name='current_limit', address=38, size=2, default=2047), + Row(name='velocity_limit', address=44, size=4, default=167), + Row(name='max_position_limit', address=48, size=4, default=4095), + Row(name='min_position_limit', address=52, size=4, default=0), + Row(name='shutdown', address=63, size=1, default=52) + ] + RAM = [ + Row(name='torque_enable', address=64, size=1, default=0), + Row(name='status_return_level', address=68, size=1, default=2), + Row(name='registered_instruction', address=69, size=1, default=0), + Row(name='hardware_error_status', address=70, size=1, default=0), + Row(name='velocity_i_gain', address=76, size=2, default=1920), + Row(name='velocity_p_gain', address=78, size=2, default=100), + Row(name='position_d_gain', address=80, size=2, default=0), + Row(name='position_i_gain', address=82, size=2, default=0), + Row(name='position_p_gain', address=84, size=2, default=800), + Row(name='feedforward_2nd_gain', address=88, size=2, default=0), + Row(name='feedforward_1st_gain', address=90, size=2, default=0), + Row(name='bus_watchdog', address=98, size=1, default=0), + Row(name='goal_pwm', address=100, size=2, default=None), + Row(name='goal_current', address=102, size=2, default=None), + Row(name='goal_velocity', address=104, size=4, default=None), + Row(name='profile_acceleration', address=108, size=4, default=0), + Row(name='profile_velocity', address=112, size=4, default=0), + Row(name='goal_position', address=116, size=4, default=None), + Row(name='realtime_tick', address=120, size=2, default=None), + Row(name='moving', address=122, size=1, default=0), + Row(name='moving_status', address=123, size=1, default=0), + Row(name='present_pwm', address=124, size=2, default=None), + Row(name='present_current', address=126, size=2, default=None), + Row(name='present_velocity', address=128, size=4, default=None), + Row(name='present_position', address=132, size=4, default=None), + Row(name='velocity_trajectory', address=136, size=4, default=None), + Row(name='position_trajectory', address=140, size=4, default=None), + Row(name='present_input_voltage', address=144, size=2, default=None), + Row(name='present_temperature', address=146, size=1, default=None), + IndirectRow(name='indirect_address', addresses=[range(168, 224, 2), range(578, 634, 2)], size=2), + IndirectRow(name='indirect_data', addresses=[range(224, 252), range(634, 662)], size=1) + ] + PROTOCOL = dynamixel.protocol.Protocol2 + + def __init__(self, id): + super(XW540_T260_R, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) diff --git a/dynamixel/protocol/Protocol2.py b/dynamixel/protocol/Protocol2.py new file mode 100644 index 0000000..e4fbcd3 --- /dev/null +++ b/dynamixel/protocol/Protocol2.py @@ -0,0 +1,2 @@ +class Protocol2: + pass diff --git a/dynamixel/protocol/__init__.py b/dynamixel/protocol/__init__.py new file mode 100644 index 0000000..27f95fa --- /dev/null +++ b/dynamixel/protocol/__init__.py @@ -0,0 +1 @@ +from . import Protocol2 diff --git a/dynamixel/servo/__init__.py b/dynamixel/servo/__init__.py new file mode 100644 index 0000000..ca0b806 --- /dev/null +++ b/dynamixel/servo/__init__.py @@ -0,0 +1,30 @@ +class Servo: + def __init__(self, id, eeprom, ram, protocol): + self._id = id + self._control_table = dict( + [ (r.name, r) for r in eeprom ] + + [ (r.name, r) for r in ram ] + ) + self.protocol = protocol + pass + + pass + +class Row: + + def __init__(self, name, address, size, default): + self.name = name + self.address = address + self.size = size + self.default = default + pass + + pass + +class IndirectRow: + def __init__(self, name, addresses, size): + self.name = name + self.addresses = addresses + self.size = size + + pass diff --git a/tools/html2desc.py b/tools/html2desc.py new file mode 100755 index 0000000..c9afa6b --- /dev/null +++ b/tools/html2desc.py @@ -0,0 +1,265 @@ +#!/usr/bin/python3 + +import sys +import lxml.etree +import re + +def extract_row(tr, name_to_index): + def text(e, report_error): + # Transform HTML to text + result = '' + if e.tag == 'br': + result += '\n' + pass + elif e.tag == 'sup': + result += '^' + result += e.text or '' + pass + else: + result += e.text or '' + pass + if len(e): + result += ''.join([ text(e1, report_error) for e1 in e ]) + pass + result += e.tail or '' + return result + + def get(key, report_error=True): + try: + index = name_to_index[key] + return text(tr[index], report_error).rstrip() + except KeyError as e: + if report_error: + print(e, name_to_index) + raise + return None + pass + + name = get('Data Name') + address = get('Address') + size = get('Size') + access = get('Access') + default = (get('Initial', False) or get('Default')).replace(',', '') + ranges = get('Range', False) + if ranges == None: + # Try with min ~ max + rmin = get('Min', False) + rmax = get('Max', False) + if not rmin in [ None, '-'] and not rmax in [ None, '-' ]: + ranges = "%s ~ %s" % (rmin, rmax) + pass + pass + unit = get('Unit', False) + return name, address, size, access, default, ranges, unit + + +class Row: + + def __init__(self, name, index, address, size, access, default, + ranges, unit): + self.name = name + self.index = int(index) if index else None + self.address = address + self.size = size + self.access = access + self.default = default + self.ranges = ranges + self.unit = unit + pass + + def __getitem__(self, key): + return getattr(self,key) + + def __repr__(self): + return "Row(%s)" % ([self.name, self.index, self.address, self.size, + self.access, self.default, self.ranges, self.unit]) + +class ParsedRow(Row): + + def __init__(self, tr, name_to_index): + (name, address, size, access, default, + ranges, unit) = extract_row(tr, name_to_index) + m = re.match('^([a-z_][a-z0-9_]*[a-z_])(?:_([0-9]+))?$', + name.lower() + .replace(' ', '_') + .replace('(shadow)', '')) + if not (m and address.isdigit()): + raise ValueError((name, address, size, access, default, + ranges, unit)) + super(ParsedRow, self).__init__( + name=m.group(1), + index=m.group(2), + address=int(address), + size=int(size), + access=set(access), + default=int(default) if default.isdigit() else None, + ranges=ranges, + unit=unit) + + def range(self, end): + N = end.index - self.index + adress_step = (end.address - self.address) / N + default_step = (end.default - self.default) / N + for i in range(1, N): + yield Row(self.name, self.index + i, + int(self.address + i*adress_step), + self.size, self.access, + int(self.default + i*default_step), + self.ranges, self.unit) + pass + + + +class Table: + + def __init__(self, table): + self.row = {} + name_to_index = dict([ (e.text, i) for i,e in enumerate(table[0][0]) ]) + for i,tr in enumerate(table[1]): + try: + row = ParsedRow(tr, name_to_index) + self.add(row) + pass + except ValueError: + r1 = ParsedRow(table[1][i-1], name_to_index) + r2 = ParsedRow(table[1][i+1], name_to_index) + for r in r1.range(r2): + self.add(r) + pass + pass + pass + pass + + def add(self, row): + if row.index == None: + # Ordinary row + self.row[row.name] = row + pass + else: + # Indirect row + if not row.name in self.row: + self.row[row.name] = {} + pass + self.row[row.name][row.index] = row + pass + pass + + def __iter__(self): + def key(r): + if isinstance(r[1], dict): + # Sort indirect registers on first + return min([ r.address for r in r[1].values() ]) + return r[1].address + for k,v in sorted(self.row.items(), key=key): + yield v + pass + pass + + pass + +def Parse(path): + et = lxml.etree.HTML(open(path).read()) + title = None + table = {} + protocol = set() + id = None + def traverse(t): + nonlocal title + nonlocal table + nonlocal protocol + nonlocal id + for st in t: + if st.tag == 'title': + # Save product name + title = (st.text + .replace('/', '_') + .replace('(', '_') + .replace(')', '')) + pass + elif st.tag == 'table': + # Only save control tables + if id.startswith('control-table'): + table[id] = Table(st) + pass + pass + elif (st.tag == 'a' and id == 'control-table-data-address' and + (m := re.match('^.*/(protocol[^/]+).*$', st.get('href')))): + protocol.add(m.group(1).replace('protocol', 'Protocol')) + else: + id = st.get('id') or id + traverse(st) + pass + pass + pass + traverse(et) + return(title, table, protocol) + +for path in sys.argv[1:]: + EEPROM = {} + RAM = {} + title, tables, protocol = Parse(path) + print(title, protocol) + if re.match('^[A-X0-9]*-.*$', title): + EEPROM[title] = tables['control-table-of-eeprom-area'] + RAM[title] = tables['control-table-of-ram-area'] + pass + for model in sorted(EEPROM): + with open("dynamixel/model/%s.py" % (model.lower().replace('-', '_')), + 'w') as f: + def expand_indirect_row(r): + def ranges(r): + size = r[1].size + current = None + start = None + for k,v in sorted(r.items()): + if current == None: + start = v.address + pass + elif current + size != v.address: + yield range(start, current + size, size) + start = v.address + pass + current = v.address + pass + yield range(start, current + size, size) + pass + return (f"IndirectRow(name='{r[1].name}', " + f"addresses={list(ranges(r))}, " + f"size={r[1].size})") + def expand_row(r): + if isinstance(r, dict): + return expand_indirect_row(r) + pass + else: + return (f"Row(name='{r.name}', " + f"address={r.address}, " + f"size={r.size}, default={r.default})") + pass + + def expand_table(t): + for r in t: + yield expand_row(r) + pass + pass + py_model = model.replace('-', '_') + indent = ',\n ' + f.write(f''' +from dynamixel.servo import Servo, Row, IndirectRow +import dynamixel.protocol + +class {py_model}(Servo): + EEPROM = [ + {indent.join(expand_table(EEPROM[model]))} + ] + RAM = [ + {indent.join(expand_table(RAM[model]))} + ] + PROTOCOL = dynamixel.protocol.{max(protocol)} + + def __init__(self, id): + super({py_model}, self).__init__( + id=id, eeprom=self.EEPROM, ram=self.RAM, protocol=self.PROTOCOL) +''') + pass + pass + pass -- GitLab