odrivetool

odrivetool is the command line tool accompanying the ODrive. Its main purpose is to provide an interactive shell to control the device using text-based input, as well as some supporting functions like firmware update.

If you prefer a graphical user interface instead, consider using the Web GUI.

System Requirements

⇒ See Python Package

Installation

  1. Install Python 3: Download the installer for Latest Python 3 Release from here. Execute the downloaded file and follow the instructions. In the installer, make sure to check “Add python.exe to PATH”.

  2. Launch the command prompt: In the start menu, type cmd Enter. The instructions in the next steps are commands to be typed into the command prompt.

  3. Optional: Install matplotlib (only needed if you’re going to use the Liveplotter).

    Command Line
    python3 -m pip install matplotlib
    
  4. Install odrivetool.

    Command Line
    python3 -m pip install --upgrade odrive
    

Troubleshooting

  • If you get 'python3' not recognized as an internal or external command, Python might not be in your PATH environment variable. Python comes with a small script that can fix this. Navigate to the Python install folder (usually C:\Program Files\Python<version>\ or C:\Users\<YourUsername>\AppData\Local\Programs\Python\Python<version>\) and double-click “win_add2path.py” to run it.

  • See this walkthrough for more tips if the Python installation doesn’t work as expected.

Start odrivetool

After installation is complete, you can launch the interactive console with

Command Line
odrivetool

Connect your ODrive and wait for the tool to find it. If it doesn’t connect after a few seconds, refer to the troubleshooting page. Now you can, for instance, type odrv0.vbus_voltage Enter to display the board’s main supply voltage. It should look something like this:

odrivetool
ODrive control utility v0.5.1
Please connect your ODrive.
Type help() for help.

Connected to ODrive 306A396A3235 as odrv0
In [1]: odrv0.vbus_voltage
Out[1]: 11.97055721282959

The tool you’re looking at is a fully capable Python command prompt, so you can type any valid python code.

Type odrivetool --help to see what other features are available.

Commands and Objects

See also: Python Package.

The odrivetool console is a Python console (more precisely: IPython) with a few extras. The following commands and functions are available:

  • All built-in Python commands and functions.

  • ODrives are accessible via odrv0, odrv1, etc. The attributes on these ODrive objects are defined by the API that the ODrive exposes and can change when you update the ODrive’s firmware. The full API is documented in the API Reference.

  • Additional helper functions, such as dump_errors(odrv0) are available. More precisely, all members of the module odrive.utils are available.

Below is a quick summary of helper functions. Click on a name to show more details, or visit odrive.utils for a complete list.

dump_errors(odrv[, clear])

Prints a summary of the error status of the device on stdout.

start_liveplotter(properties[, layout, ...])

Starts the liveplotter.

stop_liveplotter()

Stops the currently running liveplotter.

request_state(axis, state)

Requests an axis to enter the specified state.

backup_config(device)

Returns a dict of the form {path: value} containing all properties on the ODrive that have "config" in their path.

restore_config(device, config)

Restores the configuration of the ODrive from a dictionary.

Multiple ODrives

By default, odrivetool will connect to any ODrive it finds. If this is not what you want, you can select a specific ODrive.

To find the serial number of your ODrive, run odrivetool, connect exactly one ODrive and power it up. You should see this:

odrivetool
Connected to ODrive 306A396A3235 as odrv0
In [1]:

306A396A3235 is the serial number of this particular ODrive. If you want odrivetool to ignore all other devices you would close it and then run:

Command Line
odrivetool --serial-number 306A396A3235

Liveplotter

start_liveplotter() can be used for graphical plotting of ODrive parameters (e.g. position) in real time. Any variable can be plotted that you are otherwise able to read like normal in odrivetool. The plot will open in a new window and you can run other commands while it is open. matplotlib must be installed to use this feature.

Note

For a better plotting experience, consider using the Web GUI instead.

Note

Some Linux distros (especially Arch Linux) require starting ODrivetool with an additional environment variable for Liveplotter to work properly. If liveplotter crashes for you, try starting odrivetool via: MPLBACKEND=TkAgg odrivetool and then starting liveplotter.

Example

In this example we plot the position of two motors.

To read the position, you would usually type odrv0.axis0.pos_estimate. However this returns the value itself. When starting the liveplotter, we need to pass in a reference to the property, not its value. We do this by replacing it with _[...]_property.

odrivetool
 start_liveplotter(properties=[
     odrv0.axis0._pos_estimate_property,
     odrv1.axis0._pos_estimate_property,
 ])
../_images/liveplotter-pos-estimate.png

Liveplotter Position Plot

Here, both motors are running in AxisState.CLOSED_LOOP_CONTROL while they are being forced off position by hand.

Firmware Update

See Updating firmware from the command line.

Configuration Backup

You can use odrivetool to back up and restore device configurations or transfer the configuration of one ODrive to another one.

  • To save the configuration to a file on the PC, run

Command Line
odrivetool backup-config my_config.json
  • To restore the configuration form such a file, run

Command Line
odrivetool restore-config my_config.json

Note

The encoder offset calibration is not restored because this would be dangerous if you transfer the calibration values of one axis to another axis.

Note

It is not recommended to transfer the configuration between different firmware versions because variables can get renamed or removed (in which case odrivetool will show warnings) or defaults changed between firmware versions. After firmware updates it is instead recommended to check the CHANGELOG and manually transfer the settings.