System Identification

This section provides a comprehensive guide to perform system identification (SysID) for Dynamixel motors.

Hardware Setup

You will need to purchase the sysID section in the Bill of Materials.

For 3D-printed parts, you can find all the sliced plates in the MakerWorld and the CAD files in the Onshape document.

We use 21700 cells as loads to adjust the motor load weight.

Using the accompanying image as a guide, set up the SysID hardware so that the load arm has sufficient clearance to rotate from -90° to 90°. Note that 0° corresponds to the horizontal position, parallel to the ground. You can use the Dynamixel Wizard to verify the setup and configure the motor’s ID to 0 with a baud rate of 2M.

SysID Setup

Set up Optuna Dashboard

To visualize the sysID optimization process, you need to install the following packages:

sudo apt install libpq-dev postgresql
sudo systemctl start postgresql

Run PostgreSQL:

sudo -u postgres psql

Enter the following commands in the PostgreSQL prompt:

CREATE DATABASE optuna_db;
CREATE USER optuna_user WITH ENCRYPTED PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE optuna_db TO optuna_user;

Exit the PostgreSQL prompt.

SysID Data Collection

Run the following command with the appropriate robot name to collect data. For motors in the 2XC430, 2XL430, XC330, XC430, and XM430 series, use the corresponding robot names: sysID_XC430, sysID_XL430, sysID_XC330, sysID_XC430, and sysID_XM430, respectively. If your motor is not listed, refer to our Onshape document to set it up in Onshape. Then, use the Onshape to Robot Descriptions tool to generate the XML file for the motor. For reference, check toddlerbot/descriptions/sysID_XC430 for the expecetd outcome.

python toddlerbot/policies/run_policy.py --policy sysID_fixed --sim real --robot <robot_name>

Run the Optimization

Finally, run the following command to start the optimization process. The --time-str argument should be set to the timestamp of the directory generated when running the SysID policy in the previous section. For example, 20250301_155535.

python toddlerbot/tools/run_sysID.py --robot <robot_name> --time-str <time_str>

Run the Optuna dashboard in another terminal to visualize the optimization process:

optuna-dashboard postgresql://optuna_user:password@localhost/optuna_db