HumaRobotics Dynamixel Library is a Python 2.7 library for programming Robotis Dynamixel motors directly from python or through the ROS bindings provided separately in https://github.com/HumaRobotics/dynamixel_hr_ros . It also comes with a GUI that allows to quickly identify/configure/manipulate your motors.
.. toctree:: :maxdepth: 1
- At the moment it can handle the following models:
- AX12*
- AX18*
- MX12*
- MX28*
- MX64*
- CM730
Adding other models is very easy, have a look in :mod:`dxl.dxlmotors` and simply add the corresponding model class that will contain the definitions of registers and conversion functions.
Dynamixel Lab is a tk-based GUI for manipulating and programming Dynamixel motors that makes use of the Dynamixel Library.
- It provides the following features:
- Fast scanning of serial port on multiple baud rates using Ping broadcast (can be deactivated)
- Automatic identification of all elements on the chain
- Easy validation and reconfiguration of dynamixel chain using JSON formatted files
- Access to all motors registers
- Visualization and manipulation of motor IDs, baudrates, documentation
- Pose recording and replay, saved as JSON files for easy modification
- Motor window for quick manipulation of motor positions and speed
- In-GUI Python coding for easy programming of chains of motors
- Direct activation of ROS bindings, with optional conversion to SI units
![Main window of the Dynamixel Lab GUI](/romainreignier/dynamixel_hr/raw/master/images/MainWindow.png)
Main window of the Dynamixel Lab GUI
![Motor window of the Dynamixel Lab GUI](/romainreignier/dynamixel_hr/raw/master/images/MotorsWindow.png)
Motor window of the Dynamixel Lab GUI
![Python window of the Dynamixel Lab GUI](/romainreignier/dynamixel_hr/raw/master/images/PythonWindow.png)
Python window of the Dynamixel Lab GUI
You can obtain the latest sources using our Git repository: git clone git@github.com/HumaRobotics:dynamixel_hr
You can also download the latest release as a compressed archive from: http://www.humarobotics.com/downloads/dynamixel_hr.zip
- Setup drivers for USB2Dynamixel:
- Install FTDI driver for USB2Dynamixel from http://www.ftdichip.com/Drivers/CDM/CDM20830_Setup.exe :
- You may want to check documentation at http://www.ftdichip.com/Drivers/VCP.htm
- Follow instructions from http://support.robotis.com/en/software/dynamixel_sdk/usb2dynamixel/usb2dxl_windows.htm
- Set USB: Port 21, max baudrate, delay 1
- Setup python and pyserial:
- Install Python 2.7 from http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi
- Install pyserial from https://pypi.python.org/packages/any/p/pyserial/pyserial-2.7.win32.exe
If required you can install the library by running the following command from the dynamixel_hr folder:
python setup.py install
Install python and pyserial:
sudo apt-get install python2.7 python-serial
Access to the serial device (/tty/USB0 by default) needs special rights, so you'll need either to sudo or add your user to the dialout group:
sudo usermod -a -G dialout username
If required you can install the library by running the following command from the dynamixel_hr folder:
sudo python setup.py install
You can start the Dynamixel Lab by running:
python ToolDynamixelLab.py
The provided Dynamixel Library is composed of several modules. However, from a user perspective only the dxl.dxlchain which provides Python access to the Dynamixel motors is directly used. Here is a typical code example:
from dxl.dxlchain import DxlChain
# Open the serial device
chain=DxlChain("/dev/ttyUSB0",rate=3000000)
# Load all the motors and obtain the list of IDs
motors=chain.get_motor_list() # Discover all motors on the chain and return their IDs
print motors
# Move a bit
chain.goto(1,500,speed=200) # Motor ID 1 is sent to position 500 with high speed
chain.goto(1,100) # Motor ID 1 is sent to position 100 with last speed value
# Move and print current position of all motors while moving
chain.goto(1,1000,speed=20,blocking=False) # Motor ID 1 is sent to position 1000
while chain.is_moving():
print chain.get_position()
# Disable the motors
chain.disable()