ROS 2 Configuration
Network Configuration
X-Series SDK Configuration
Motor Configs
The motors can be configured on startup by providing the motor_configs parameter to the xs_sdk. The expected format and explanation of the configuration options is below:
Note
The xs_sdk load_configs parameter must be set to true
for the
configurations to take effect.
Note
The motor_configs only need to be set once per robot configuration - meaning that the
load_configs parameter can be set to false
after the first
boot.
# This file 'organizes' the motors in any Dynamixel-based robot into meaningful units. Every robot must
# have at least one instance of this file located in a 'config' directory in their root 'control' ROS package.
# Note that all parameters are mandatory unless stated otherwise. This file demos the setup for the VX300S robot.
#
# Refer to http://emanual.robotis.com/#control-table to look up the control registers for the various motors.
#
# SETUP OF REGISTERS FOR THE INTERBOTIX PLATFORMS
#
# All registers were left to their default values except for the ones listed here:
# 1) ID.........................The ID of the Dynamixel servo. Valids IDs go from 1 - 251.
# 2) Baud_Rate..................The speed at which serial communication occurs. All motors have this set to 1M
# baud (corresponds to a register value of '3')
# 3) Return_Delay_Time..........The amount of time the servo delays in sending a reply packet after receiving a
# command packet. A value of '0' tells the servo to send a reply without any delay.
# 4) Drive_Mode:................Used to define what direction is positive rotation. A value of '0' means CCW is
# positive while a value of '1' means CW is positive. It also defines if profiles are
# built based on velocity or time. 'Velocity' is the default (value of '0') and 'Time'
# is a value of '4'. Adding the 'direction' value to the 'profile' value gives the
# appropiate register value
# 5) Velocity_Limit.............Defines the max speed of the motor. A value of '131' correpsonds to a max speed
# of PI rad/s
# 6) Min_Position_Limit.........Defines the minimum limit of a joint. Values range from 0 to 4095 with 2048
# being equivalent to '0' rad and 0 being '-PI' rad.
# 7) Max_Position_Limit.........Defines the maximum limit of a joint. Values range from 0 to 4095 with 2048
# being equivalent to '0' rad and 4095 being 'PI' rad.
# 8) Secondary_ID...............If a joint is controlled by two motors (usually by the shoulder or elbow), one motor
# can be set to follow the commands of another motor by setting this register to the ID
# of the master. A value of '255' disables this.
#
# Each motor's configs are grouped under the name of the joint the motor is controlling. The names are defined at
# http://support.interbotix.com/ under the 'Specifications' section. (Click a robot and scroll down to the 'Default Joint Limits' section.)
port: /dev/ttyDXL # Optional; specifies the USB port that connects to the U2D2; defaults to '/dev/ttyDXL'
joint_order: [waist, shoulder, elbow, wrist_angle, wrist_rotate, gripper] # Defines the order in which the joints will appear in a JointState message; joint names must match those in the URDF (if present)
sleep_positions: [0, -1.85, -1.55, 0, -0.8, 0, 0] # Optional; specified joint positions that define a 'rest' pose where it is safe to torque off the robot; defaults to 0 for each joint
joint_state_publisher: # Joint State Publisher Settings...
update_rate: 100 # Optional; rate at which the motor states are sampled (and potentially published) in Hz; defaults to '100'
publish_states: true # Optional; boolean that either enables or disables the Publisher; defaults to 'true'
topic_name: joint_states # Optional; desired JointState topic name; defaults to 'joint_states'
groups: # Optional; defines an unlimited number of joint groups in the robot; custom 'group' names can be used.
arm: [waist, shoulder, elbow, wrist_angle, wrist_rotate] # Optional; groups can contain overlapping joints but those joints will retain the operating mode of the latter group.
# Note that 'all' is a special group name that contains all the joints in the 'joint_order' sequence.
grippers: # Optional; defines an unlimited number of Interbotix grippers; custom 'gripper' names can be used.
gripper: # Example gripper name
horn_radius: 0.022 # Optional; length in meters from the middle of the gripper servo horn to its edge; defaults to '0.014'
arm_length: 0.036 # Optional; length in meters from the end of the servo horn to a finger; defaults to '0.024'
left_finger: left_finger # Optional; name of the 'left_finger' joint; this must match the name in the URDF (if present); defaults to 'left_finger'
right_finger: right_finger # Optional; name of the 'right_finger' joint; this must match the name in the URDF (if present); defaults to 'right_finger'
shadows: # Optional; list of any 'master' motors and all of its shadows (usually 1, but could be unlimited)
shoulder:
shadow_list: [shoulder_shadow]
calibrate: true # Optional; set to true if the master and shadow servos make up a single joint and the shadows should be calibrated to read the exact same value as the master
elbow:
shadow_list: [elbow_shadow]
calibrate: true
sisters: # Optional; list of any '2in1' motors and their corresponding 'sister'; order is irrelevant
motors: # List of all motors and the default values that should be written to the EEPROM registers; Note that any EEPROM register can be added;
waist:
ID: 1
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 0
Max_Position_Limit: 4095
Secondary_ID: 255
shoulder:
ID: 2
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 1
Velocity_Limit: 131
Min_Position_Limit: 841
Max_Position_Limit: 3196
Secondary_ID: 255
shoulder_shadow:
ID: 3
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 841
Max_Position_Limit: 3196
Secondary_ID: 2
elbow:
ID: 4
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 1002
Max_Position_Limit: 3196
Secondary_ID: 255
elbow_shadow:
ID: 5
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 1
Velocity_Limit: 131
Min_Position_Limit: 1002
Max_Position_Limit: 3196
Secondary_ID: 4
wrist_angle:
ID: 6
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 570
Max_Position_Limit: 3264
Secondary_ID: 255
wrist_rotate:
ID: 7
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 0
Max_Position_Limit: 4095
Secondary_ID: 255
gripper:
ID: 8
Baud_Rate: 3
Return_Delay_Time: 0
Drive_Mode: 0
Velocity_Limit: 131
Min_Position_Limit: 0
Max_Position_Limit: 4095
Secondary_ID: 255
Mode Configs
The startup operating modes can be set on startup by providing the mode_configs parameter to the xs_sdk. The expected format and explanation of the configuration options is below:
# This file is used to customize the initial operating modes of all joint groups and individual joints in a robot.
# It should be placed in the 'config' directory of any ROS package that builds ontop of the interbotix_xs_sdk.
# Example values are shown as well. All parameters are mandatory unless stated otherwise
port: /dev/ttyDXL # Optional; specifies the USB port that connects to the U2D2;
# if specified, it overwrites the port in the 'motor_configs' yaml file.
# if the 'port' parameter and its value are left out, the port in the 'motor_configs' yaml file is used.
# if the 'port' parameter is specified but the value is not, it defaults to '/dev/ttyDXL'
groups: # Optional; specify initial Operating Modes for all joint groups (as detailed in the 'motor_configs' yaml file under 'groups')
arm: # Example joint group name
operating_mode: position # Optional; refer to the 'OperatingModes' Service description file in the 'srv' directory for the seven modes; defaults to 'position'
profile_type: time # Optional; refer to the 'OperatingModes' Service description file in the 'srv' directory for the two profile types; defaults to 'velocity'
profile_velocity: 2000 # Optional; refer to the 'OperatingModes' Service description file in the 'srv' directory for a description; defaults to '0'
profile_acceleration: 1000 # Optional; refer to the 'OperatingModes' Service description file in the 'srv' directory for a description; defaults to '0'
torque_enable: true # Optional; whether the motors in this group should be torqued on or off by default; defaults to 'true'
singles: # Optional; specify the Operating Mode for individual joints (any joint specified in the 'motor_configs' yaml file); parameters follow the same structure as above
gripper:
operating_mode: pwm
torque_enable: true