User Tools

Site Tools


product:usb2ax:advanced_instructions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
product:usb2ax:advanced_instructions [2013/04/02 04:39]
xevel
product:usb2ax:advanced_instructions [2018/04/02 22:16] (current)
xevel [SYNC_READ]
Line 1: Line 1:
 ===== USB2AX: Advanced instructions ===== ===== USB2AX: Advanced instructions =====
  
-//Based on documentation by Richard "​iBot"​ Ibbotson//​ +The USB2AX can react to some specific commands as if it were a Dynamixel device, and much more.
- +
-The USB2AX can react to some specific commands as if it were a Dynamixel device.+
  
 ---- ----
Line 13: Line 11:
 | 0x06  | RESET       | Reboot USB2AX ​                             |  0                 | | 0x06  | RESET       | Reboot USB2AX ​                             |  0                 |
 | 0x08  | BOOTLOADER ​ | Reboot USB2AX in bootloader mode           ​| ​ 0                 | | 0x08  | BOOTLOADER ​ | Reboot USB2AX in bootloader mode           ​| ​ 0                 |
-| 0x84  | SYNC_READ ​  | Read from several Dynamixel simultaneously |  4 or more           ​|+| 0x84  | SYNC_READ ​  | Read from several Dynamixel simultaneously |  4 or more         ​|
  
 Please note that it will silently ignore the other Dynamixel commands (PING, WRITE_DATA, REG_WRITE, ACTION), and in fact will transmit them on the Dynamixel bus. Please note that it will silently ignore the other Dynamixel commands (PING, WRITE_DATA, REG_WRITE, ACTION), and in fact will transmit them on the Dynamixel bus.
Line 30: Line 28:
 | 0(0x00) | Model Number (L) | Lowest byte of Model Number ​    ​| ​ R      |    0x01  | | 0(0x00) | Model Number (L) | Lowest byte of Model Number ​    ​| ​ R      |    0x01  |
 | 1(0x01) | Model Number (H) | Higher byte of Model number ​    ​| ​ R      |    0x42  |  | 1(0x01) | Model Number (H) | Higher byte of Model number ​    ​| ​ R      |    0x42  | 
-| 2(0x02) | Firmware Version | Version of the firmware in use  |  R      |     -  |+| 2(0x02) | Firmware Version | Version of the firmware in use  |  R      |     ​- ​   |
 | 3(0x03) | ID               | ID of USB2AX ​                   |  R      |    0xFD  | | 3(0x03) | ID               | ID of USB2AX ​                   |  R      |    0xFD  |
  
-Instruction Packet+**Instruction Packet**\\
 Identical to the command you would use to read data from a Dynamixel device with an ID of 0xFD. Identical to the command you would use to read data from a Dynamixel device with an ID of 0xFD.
  
  
 ==== RESET ==== ==== RESET ====
- 
  
 Reboot the controller. Reboot the controller.
  
-Instruction Packet+**Instruction Packet**\\
 Identical to the command you would use to reset a Dynamixel with an ID of 0xFD to factory settings. Identical to the command you would use to reset a Dynamixel with an ID of 0xFD to factory settings.
  
Line 50: Line 47:
 Reboot the controller in bootloader mode, for firmware update. Reboot the controller in bootloader mode, for firmware update.
  
-Instruction Packet +**Instruction Packet**\\ 
-Similar to the commandd ​you would use to reset a Dynamixel with an ID of 0xFD to factory settings, except with an instruction of 0x08.+Similar to the command ​you would use to reset a Dynamixel with an ID of 0xFD to factory settings, except with an instruction of 0x08.
  
 ==== SYNC_READ ==== ==== SYNC_READ ====
  
-SYNC_READ is a command ​used for reading data from multiple Dynamixel actuators with one command.+SYNC_READ is used for reading data from multiple Dynamixel actuators with one command
 +This allows for a significant performance boost when reading the same values in a lot of devices.
  
-**Warning** Various implementations of custom Dynamixel multiple-read commands named SYNC_READ can be found over the internet, this one is based on the one found in the arbotix_python ROS package by Michael Ferguson. +An (obsolete) implementation in the DynamxelSDK v1 library ​is availalbe ​in the [[https://​github.com/​Xevel/​usb2ax/​tree/​master/​pc_software/​usb2ax_DynamixelSDK|GitHub repository]]. The newer revisions of the Dynamixel SDK are not compatible with this definition ​of the SYNC_READwhich pre-dates ​the official one.
-It is not part of the original Dynamixel protocoland is only supported by some advanced third party Dynamixel controllers,​ like the USB2AXPlease only refer to your controller manufacturer for support, do not contact Robotis!+
  
 +**Warning: Various implementations of custom Dynamixel multiple-read commands named SYNC_READ can be found over the Internet, this one is based on the one found in the arbotix_python ROS package by Michael Ferguson.
 +It is not part of the original Dynamixel protocol, and is only supported by some advanced third party Dynamixel controllers,​ like the USB2AX. Please only refer to your controller manufacturer for support, do not contact the servo manufacturer ROBOTIS!**
  
-FIXME+**How does it actually work?**\\ 
 +SYNC_READ is a command only the controller can understand: using this command without such a controller will either not have any effect or, if a servo with ID 0xFD is present on the bus, might return an error 0x20.\\ 
 +The controller converts SYNC_READ into multiple separate READ commands to get data from each servo, then sends back to the computer a single big packet containing all the data.\\ 
 +This significantly decreases the effect of USB latency.
  
-SYNC_READ ​is a command ​only the controller can understand+**Limitations**\\ 
-Using this command without such a controller ​to interpret it will either not have any effect orif you have a servo with an ID of 0xFD connected on the Dynamixel bus, it might be responded ​to with a 0x20 error.+SYNC_READ command ​reads the same registers in each servo.\\ 
 +The USB2AX limits the maximum number of servos to read from (N) to 32and the maximum data length (L) to 6 bytes.
  
  
-In the controller, SYNC_READ is converted into multiple separate READ commands. +**Instruction Packet**\\
- +
-This allows for a significant performance boost when reading the same values in multiple actuators. +
- +
-The communication time is decreased by the SYNC_READ instruction since many Dynamixel bus read instructions can be performed in a single controller command and response. This makes a significant performance increase where the controller connection may experience high latency compared to the dynamixel bus speed. +
- +
-You can use this instruction only when the lengths and addresses of the control table to be read from are the same. +
- +
- +
-Note : the USB2AX limits the maximum number of actuators to read from (N) to 32, and the maximum data length (L) to 6 bytes. +
- +
- +
- +
-== Instruction Packet ​== +
   <​0xFF><​0xFF><​ID><​Length><​Instruction><​Param 1><​Param 2><​Param 3> ... <Param N+2><​Checksum>​   <​0xFF><​0xFF><​ID><​Length><​Instruction><​Param 1><​Param 2><​Param 3> ... <Param N+2><​Checksum>​
  
-  ID         : ​0XFD or 0xFE +  ID         : ​0xFD or 0xFE 
   Length ​    : N + 4 (N: number of Dynamixel actuators to read from, value between 1 and 32 inclusive) ​   Length ​    : N + 4 (N: number of Dynamixel actuators to read from, value between 1 and 32 inclusive) ​
-  Instruction: ​0X84+  Instruction: ​0x84
   Param 1    : Starting address of the location where the data is to be read from    Param 1    : Starting address of the location where the data is to be read from 
   Param 2    : L (L: length of the data to be read, value between 1 and 6 inclusive)   Param 2    : L (L: length of the data to be read, value between 1 and 6 inclusive)
Line 95: Line 84:
  
  
-== Status Packet (Return Packet) ==+**WARNING** Some choices of implementation of the Dynamixel SDK make it impossible to simply send this packet and expect a valid response.
  
 +
 +
 +**Status Packet (Return Packet)**\\
   <​0xFF><​0xFF><​ID><​Length><​Error><​Param 1> ... <Param L><​Param L+1> ... <Param L*N><​Checksum>​   <​0xFF><​0xFF><​ID><​Length><​Error><​Param 1> ... <Param L><​Param L+1> ... <Param L*N><​Checksum>​
  
Line 111: Line 103:
    
  
-== Example ​== +** Example ​**\\ 
-Reading the Present Position and Present Speed for 4 Dynamixel actuators with IDs of 0, 1, 2, 7.+Reading the Present Position and Present Speed for 4 Dynamixel actuators with IDs of **0**//1//__2__''​7''​.
  
-Instruction Packet ​0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 0X00 0X01 0X02 0X07 0X44\\ +Instruction Packet\\ 
-Response ​Packet ​0XFF 0XFF 0XFD 0X12 0X00 0X50 0X01 0XFF 0X01 0X20 0X00 0X00 0X02 0X10 0X00 0X10 0X02 0X00 0X00 0XFE 0X01 0X5C +0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 **0X00** //0X01// __0X02__ ''​0X07'' ​0X44\\ 
 + 
 +Status ​Packet\\ 
 +0XFF 0XFF 0XFD 0X12 0X00 **0X50 0X01 0XFF 0X01** //0X20 0X00 0X00 0X02// __0X10 ​0X00 0X10 0X02__ ''​0X00 0X00 0XFE 0X01'' ​0X5C  
 + 
 +** Performances ** 
 + 
 +On tests performed with the reference implementation (see above), reading the present positions (2 bytes) of 8 servos took around 2.7ms, on a Win7 64 bits desktop plateform. Each additional servos will add betwee 0.21 and 0.34ms. 
 + 
 +---- 
 + 
 +//Based on documentation by Richard "​iBot"​ Ibbotson//
product/usb2ax/advanced_instructions.1364870360.txt.gz · Last modified: 2013/04/02 04:39 by xevel