偶然找到了thiagohersan这位网友写的一篇文章,他写的关于使用树莓派驱动AX-12A数字舵机的解决方案让我深受启发。因此在这里翻译,以供参考。
原为地址:http://www.instructables.com/id/How-to-drive-Dynamixel-AX-12A-servos-with-a-Raspbe/
下面即为翻译:
我决定使用Dynamixel AX-12A电机(以下简称AX12)来完成一个项目,并且最终搭建了一个库,下面我将会介绍我的所感所想。
除了舵机的昂贵(笔者表示,这是真的贵!!!!),这个舵机还是有很多可取之处的。
特别的,Dynamixel的舵机具有更强大的功能,比如可返回位置、温度等的机器人控制系统。
第一步:总章
网络上关于AX-12有两个不同版本的说明书,2006年这一版的已经有些过时:一些数据已经过时,比如关于速度的控制等),还有一些在控制面板上的初始化数据也不对,但是对如何发送和读取指令写的十分详细。
另一个版本的数据很正确,但是通信协议写的并不是很清楚。
所以两个结合在一起用会好很多。
传送门:AX-12舵机说明书
第二步:其他的库
这些对学习使用AX12很有帮助:
An Arduino library and tutorial
传送门:http://savageelectronics.blogspot.it/2011/01/arduino-y-dynamixel-ax-12.html
Controlling Dynamixels with a Raspberry Pi
传送门:http://www.oppedijk.com/robotics/control-dynamixel-with-raspberrypi
该文翻译:
如何使用树莓派控制AX12
第一步就是连接,使用5V、GND(根据表对照选择)供电,RXD接受,TX进行半双工通信。因此我们需要74LS241。看一下如何开始:
http://robottini.altervista.org/dynamixel-ax-12a-and-arduino-how-to-use-the-serial-port
http://savageelectronics.blogspot.com/2011/01/arduino-y-dynamixel-ax-12.html
(笔者表示,这些都很实用,不过我没有使用文中的方法,因为我不需要返回值)
我们需要74LS241如此连接:
- PIN2和PIN3连接(data out to AX-12)
- PIN1和PIN19连接(和RPi port12(GPIO 18)连接)
- PIN18(和RPi PIN10 RX连接)
- PIN17(和RPI pin8 TX连接)
- PIN10接地(可以和RPi PIN6共地)
- PIN20接VCC(5V)
同样,AX12需要9-12V的供电
然后我们可以写一个python来进行测试了。
(笔者表示,亲测可用)
1 |
|
Jesse Merritt’s Python library
传送门:https://github.com/jes1510/python_dynamixels
第三步:连接UART
图片1↓
图片2↓
图片3↓
与其他数字舵机不同的是,Dynamixel系列的舵机并不是通过PWM信号来控制,而是使用一种读写RAM的通信协议。这种通信基于半双工UART端口,只需要一根总线便可以同时接受和发送信号。
这意味着如果我们使用树莓派或者Arduino或者其他具有全双工串口的主控板,需要构建一个特殊结构来完成全双工到半双工的转换。
在AX12的2006版文档里对这个模块进行了详细介绍
见图片1
其原理很简单,当DIRECTION_PORT高电平使,TXD可使用,低电平时,RXD可使用。
但是我没有用74HC126和74HC04,而是使用了74LS241作为代替。
这是我的PCB图:https://circuits.io/circuits/267189-ax-12-driver-for-raspberry-pi/
第四步:配置树莓派
这一步我看了一下,写的并不详细,而且他使用的是2代树莓派,因此大家可以浏览我另一个文章,可以对目前最新的3B进行配置。
传送门:http://blog.csdn.net/wren1997/article/details/79273477
第五步:库
我先用Arduino测试了我画的那个电路图,并且完成了一个库
传送门:http://savageelectronics.blogspot.com.es/2011/08/actualizacion-biblioteca-dynamixel.html
但因为我的项目需要联网,并且与机器人保持通信,所以我用树莓派代替。
我通过控制机器人来测试了这个库:
The resulting AX-12A Python library for Raspberry Pi is on github
传送门:https://github.com/thiagohersan/memememe/tree/master/Python/ax12
在发送和接收信息的时候设置时间间隔(笔者:根据文中电路图就可以明白,如果看过AX12使用说明的应该知道发送和接受有时间差)
第六步:连接更多的舵机
这一步说出来没什么太大意义,我也就不翻译了,既然使用AX-12,都明白为什么用它了哈哈。
这篇翻译也是为了以后学妹学弟能够快速上手而写的。国内中文资料着实太少,无效的资料满天飞,确实让我在学习过程中花了不少时间走了不少弯路。这篇原文最早是2011年写的,2014年牛人对这个过程进行了总结验证。我也花了一天时间对这个方法进行了验证,并确认可行。