Wiki source code of Dynamixel Protocol Tutorial
Last modified by Eric Nantel on 2022/11/01 07:25
Show last authors
| 1 | (% style="width:710px" %) |
| 2 | |((( |
| 3 | Many hardware devices communication with the computer using a serial protocol. Some are simple ASCII-based protocols, but others can be more complex binary ones that require checksums. No matter, both can easily be made in FlowBotics. |
| 4 | |
| 5 | We've already [[covered the Lynxmotion SSC-32 protocol>>doc:ses-software.flowbotics.developers.lynxmotion-ssc-32-protocol-tutorial.WebHome]] as an example ASCII protocol, now let's use the Dynamixel servos as an example of a binary protocol. |
| 6 | |
| 7 | We made a small project to show how this can be done. You can [[download a copy of it here>>attach:dynamixel-protocol-example.fsp]]. Here's the main screen: |
| 8 | ))) |
| 9 | |(% style="text-align:center" %)[[image:dynamixel-protocol-front-panel.png||height="457" width="300"]] |
| 10 | |Here's the main schematic of the project: |
| 11 | |((( |
| 12 | (% style="text-align:center" %) |
| 13 | [[image:dynamixel-protocol-main-schematic.png||height="294" width="650"]] |
| 14 | ))) |
| 15 | |Inside the "__//Dynamixel Protocol//__" module, you can see how the bytes are prepared. Since the Position and Speed are 16-bit integers, they need to be separated into their most significant byte (MSB) and least significant byte (LSB) to ensure they are sent in the right order (see [[endianness>>url:https://en.wikipedia.org/wiki/Endianness]]). We store them in an array to make them easy to process in the checksum calculation. |
| 16 | |((( |
| 17 | (% style="text-align:center" %) |
| 18 | [[image:dynamixel-protocol-message.png||width="650"]] |
| 19 | ))) |
| 20 | |Inside the "__//Encapsulate//__" module, you can see how the message is assembled into a single hexadecimal string. The "__//COM Port//__" component (inside the "__//COM Engine//__" in the main schematic) has a Hex data parameter, so we don't need to worry about converting to binary. |
| 21 | |((( |
| 22 | (% style="text-align:center" %) |
| 23 | [[image:dynamixel-protocol-encapsulation.png||width="650"]] |
| 24 | |
| 25 | |
| 26 | ))) |
| 27 | |Finally, inside the "__//Calc Checksum//__" module, you can see how we used a small clip of Ruby code to help generate the checksum. |
| 28 | |((( |
| 29 | (% style="text-align:center" %) |
| 30 | [[image:dynamixel-protocol-checksum.png]] |
| 31 | |
| 32 | |
| 33 | ))) |
| 34 | |Questions? As usual, ask us in [[our forum>>https://community.robotshop.com/forum/c/lynxmotion/13]]! |
| 35 | |[[<< Back to Developer Zone>>doc:ses-software.flowbotics.developers.WebHome]] |
| 36 | |
| 37 |

