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 05:41]
xevel
product:usb2ax:advanced_instructions [2018/04/02 22:16]
xevel [SYNC_READ]
Line 1: Line 1:
 ===== USB2AX: Advanced instructions ===== ===== USB2AX: Advanced instructions =====
  
-The USB2AX can react to some specific commands as if it were a Dynamixel device.+The USB2AX can react to some specific commands as if it were a Dynamixel device, and much more.
  
 ---- ----
Line 54: Line 54:
 SYNC_READ is 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. This allows for a significant performance boost when reading the same values in a lot of devices.
 +
 +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_READ, which pre-dates the official one.
  
 **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. **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.
Line 59: Line 61:
  
 **How does it actually work?**\\ **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).\\+SYNC_READ is a command only the controller can understandusing 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.\\ 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. This significantly decreases the effect of USB latency.
  
-Limitations +**Limitations**\\ 
- +A SYNC_READ command reads the same registers ​in each servo.\\
-You can use this instruction only when you want to read the same bytes in each servo.\\+
 The USB2AX limits the maximum number of servos to read from (N) to 32, and the maximum data length (L) to 6 bytes. The USB2AX limits the maximum number of servos to read from (N) to 32, and the maximum data length (L) to 6 bytes.
  
  
-**Instruction Packet** +**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 84: 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 100: 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**\\+Instruction Packet\\
 0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 **0X00** //0X01// __0X02__ ''​0X07''​ 0X44\\ 0XFF 0XFF 0XFD 0X08 0X84 0X24 0X04 **0X00** //0X01// __0X02__ ''​0X07''​ 0X44\\
  
-**Response ​Packet**\\+Status ​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 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// //Based on documentation by Richard "​iBot"​ Ibbotson//
product/usb2ax/advanced_instructions.txt · Last modified: 2018/04/02 22:16 by xevel