声明:此文档版权归属于北京小芽科技,可以转载,但要声明出处(北京小芽科技博客xiaoyatec.com)

 

对于Robotis舵机来说,由于舵机版本的不同,使用的协议族也不一样。

Robotis舵机协议到现在为止分为两个版本:Dynamixel Protocol 1.0 和Dynamixel Protocol 2.0

1.0版本相对好理解,反倒是2.0版本理解起来比较费劲。特别是协议后位的CRC校验方式。

这里不解释CRC为何物,只解说它的计算方法。

关于协议的具体内容,请参阅官方手册:

http://support.robotis.com/en/product/actuator/dynamixel_pro/communication/instruction_status_packet.htm

关于CRC的计算官方也给出了相关的函数:

http://support.robotis.com/en/product/actuator/dynamixel_pro/communication/crc.htm

CRC计算的函数原型为:

如果手工进行计算的话相当麻烦,所以还是依靠计算机进行计算比较方便。

这里我介绍的是用C++编写简短函数计算CRC值的方法。

由于很多用户没有C++的基础(当然,用其他语言进行编程也是可以的),或者电脑中没有装载有C++的相关运行环境。所以在这我介绍一种居于在线的C++程序编译运行的方式。

这个C++(或者其他编程语言)在线运行环境的网站地址为:http://codepad.org/

登录之后选择相关的编程语言,然后把我在文章附录里提供的程序粘贴进来,做些协议上的修改,就可以计算出CRC的值了。

这里以XL320舵机为载体,编写协议控制舵机运动。

XL320舵机ID=1;波特率=57600 【这些通过半双工TTL串口(比如USB2Dynamixel)进行设置】

然后通过编写协议控制舵机运动,现在编写两条协议,一条是控制舵机运行到0点位置,另外一条控制舵机运行到512的位置。

首先得查看XL320舵机的控制表,看看那一位是控制运动的:

http://support.robotis.com/en/product/actuator/dynamixel_x/xl_series/xl-320.htm

通过查询可知“30”即十六进制的“1E”位置是控制舵机目标位置的:

360反馈意见截图16331201383862

然后在官方的2.0版本的协议介绍文章里有相关控制舵机的例程:

360反馈意见截图16331204326632

但这个例程是相对XM430-W210舵机来编写的,而我们现在使用的是XL320舵机,这两者的控制表是不一样的,对于全局位置控制,XM430-W210对应的是0x0074位置,而xl320舵机是0x001e位置,所以根据协议的编写,可以把上图的协议修改为以下形式:

ff  ff  fd  00  01  09  00  03  1e  00  00  00  00  00  crc_l  crc_h

协议后面的 crc_l  crc_h 这两位代表了CRC值的低位和高位,正是需要我们计算的值。

首先建议大家好好理解一下官方文章里介绍的例程:

360反馈意见截图16421031105118100

主要理解update_crc函数里参数是代表什么就行,下面就可以通过我介绍的方式进行CRC的计算。

打开https://tool.lu/coderunner 网站,选择C++编程语言,然后把文章后面附录的代码粘贴进去

然后主要修改代码的两个地方:

360反馈意见截图1643092110014096

 

首先修改TxPacket[] 里的值,把咱要计算的协议写进去:

0xFF, 0xFF, 0xFD, 0x00, 0x01, 0x09, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, crc_l, crc_h

然后再修改update_crc函数里的最后一个参数值,一般为协议长度减2,比如上面协议长为16,则这里为16-2=14

修改好之后,点击“Submit”按钮编译运行程序,将会得出最终的结果

360反馈意见截图16610723100116146

如果程序没有错误的话,最终会输出结果:

360反馈意见截图162501048385106

这两个就是CRC的低位值和高位值,把这两位写入之前的协议里,最终完成整个控制协议:

ff  ff  fd  00  01  09  00  03  1e  00  00  00  00  00  8d 39 

上面协议是控制XL320舵机运行到0位的。

同理,编写另外一个运行到512位置的协议如下:

ff  ff  fd  00  01  09  00  03  1e  00  00  02  00  00  a6  b9

 

以上关于Dynamixel Protocol 2.0协议样例介绍完毕,其实最为主要的就是CRC的计算。

 

XM430-W210舵机为例的协议样本:

卸力矩:FF FF FD 00 01 06 00 03 40 00 00 DE E6
上力矩:FF FF FD 00 01 06 00 03 40 00 01 DB 66

移动到512位置:FF FF FD 00 01 09 00 03 74 00 00 02 00 00 CA 89
移动到0位置:    FF FF FD 00 01 09 00 03 74 00 00 00 00 00 E1 09

 

小芽科技附录:

 

 

 

 

OpenCM9.04控制XM430-W350舵机

视频地址: https://haokan.baidu.com/v?vid=8171648541988572636

阅读全文

利用OpenCM9.04控制板获取舵机反馈

声明:此文档版权归属于北京小芽科技,可以转载,但要声明出处(北京小芽科技博客xiaoyatec.com)   OpenCM9.04控制板分为 A、B、C三个版本,这三个版...

阅读全文

ROBOTIS Dynamixel舵机的固件更新

大家在使用robotis舵机的过程中,可能会遇到各种问题,如果怀疑舵机出问题了,首先考虑是否舵机固件出现问题了,用USB2Dynamixel串口模块做固件更新,很多舵...

阅读全文

欢迎留言

你必须启用JavaScript才能看到这里的验证码!