Wiki source code of Dynamixel Protocol Tutorial
Last modified by Eric Nantel on 2022/11/01 07:25
Hide last authors
![]() |
11.1 | 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 | |||
![]() |
13.1 | 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: |
![]() |
11.1 | 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 | ))) | ||
![]() |
13.1 | 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. |
![]() |
11.1 | 16 | |((( |
17 | (% style="text-align:center" %) | ||
18 | [[image:dynamixel-protocol-message.png||width="650"]] | ||
19 | ))) | ||
![]() |
13.1 | 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. |
![]() |
11.1 | 21 | |((( |
22 | (% style="text-align:center" %) | ||
23 | [[image:dynamixel-protocol-encapsulation.png||width="650"]] | ||
24 | |||
25 | |||
26 | ))) | ||
![]() |
13.1 | 27 | |Finally, inside the "__//Calc Checksum//__" module, you can see how we used a small clip of Ruby code to help generate the checksum. |
![]() |
11.1 | 28 | |((( |
29 | (% style="text-align:center" %) | ||
30 | [[image:dynamixel-protocol-checksum.png]] | ||
31 | |||
32 | |||
33 | ))) | ||
![]() |
14.1 | 34 | |Questions? As usual, ask us in [[our forum>>https://community.robotshop.com/forum/c/lynxmotion/13]]! |
![]() |
11.1 | 35 | |[[<< Back to Developer Zone>>doc:ses-software.flowbotics.developers.WebHome]] |
36 | |||
37 |