Moco-ML使用的伺服驱动方案借鉴与Doggo的修改版本,其使用ODrive构建高性能伺服驱动,但可惜的是其没有实现力控仅基于位置控制完成步态规划,但实际上Doggo项目团队已经对3.5版本固件进行了非常多的修改,大大提高了原始ODrive的使用便利性,几个主要的修改部分如下:

(1)增加一键配置文件:原始ODrive的配置十分复杂,首先需要用USB连接电机然后完成电机标定、编码器标定最终才能进入闭环控制,而相关配置流程不下于10几个步骤十分麻烦,Doggo团队提供了一个Python下的一键标定文件,从而实现USB连接后只需要运行脚本就能快速完成所有配置,如果参数没问题则重启后直接就进入角度控制;

(2)修改了ASIIC串口通信:原始ODrive支持串口和USB等方式进行外部控制,采用ASIIC协议中可以通过类似总线舵机的字符串命令来设置角度或电流,Doggo团队修改了串口协议增加了具有校验机制的控制模式,提高了串口通讯的可靠性;

(3)增加了运动学控制模式,能直接给的足端位置或者虚拟腿角度,ODrive自己内部计算出需要转到的角度;

综上,Doggo团队最大的功劳除了提供了一个新的并联机构设计方案外就是为大家提供了一个开源的伺服驱动方案,相比原始ODrive固件,其配置和使用更加便利,但仍然存在着很多问题,比如:

(1)其采用串口以5Mbps进行通讯控制,其信号走线距离短,波特率高信号受干扰,且不具有总线架构;

(2)内部控制编码器反馈为应答方式,无法自动上传角速度、角度和电流值,因此无法用于力控;

(3)内部控制没有保护机制,通讯丢失后控制命令不会清除,安全性较差;

(4)编码器连线可靠性差,Doggo使用了AS5047编码器使用其ABI接口作为增量式编码器输入,原始电路板编码器引脚直接用2.54排针引出使用杜邦线与其连接,可靠性很差非常容易出现排针松动导致编码器信号丢失,这在闭环控制中十分危险;

(5)最重要的一点,通讯丢失后ODrive会自动进入保护模式,激活控制需重新上电完成整个自动标定流程;

综上,Doggo团队修改的固件任然有许多问题,但最重要的一个问题(4)导致主控制器烧了程序时ODrive将自动保护,也意味着每次修改程序都需要重新上电,而ODrive上电标定要保证8条腿都成功还是比较困难,因此对Doggo固件修改并增加一个能和ODrive持续保证串口通信的节点单元十分重要,这也是之前我制作ODrive改装套件项目的主要目的,另外需要提高ODrive与编码器和电机连接的可靠性和便利性。

相关详细说明可以参考之前的知乎文章:

该改装套件完全兼容目前的3.5和3.6版本硬件,相比Doggo的固件我除了重新设计节点模块将其转换为CAN通信外,在固件层面对下面几个地方进行了修改:

(1)增加了通信丢失保护,在串口命令丢失后会自动清除控制命令;

(2)增加同自动回传,除了上传角度编码器值外还会上传真实负载电流用于力反馈控制;

(3)拆分原始Doggo的位置控制,能直接发生减速后的360°期望角度进行舵机式的高精度、高刚度位置控制当前这也是基于CAN协议通讯下发命令的;

这里给出改装ODrive的具体流程:

(1)拆除ODrive端子:

由于ODrive电路板背面有很多电解电容,因此为竟可能降低改装后体积,所有改装电路板均布置在电容侧,因此需要首先拆除ODrive已有的端子和排针:

(2)焊接橡胶头,原始ODrive使用的是常规的绿色供电端子,其体积太大不适合桌面级机器人,因此参考无人机的电气设计,这里建议采用香蕉头作为电机三相线,另外由于机器人较小电流不大,电池供电也可以采用香蕉头。

(3)焊接改装套件,在电容同一侧焊接改装套件,改装套件主要包括三块板子,分别是节点板、编码器转接板和SWD转接板:

(4)上述各模块具体焊接的示意图如下所示:

对于SWD和编码器接口板较为简单,首先在对应ODrive板子对应丝印引脚焊接排针,之后在电容测将各板子按如下位置焊接。

对于节点模块来说,在ODrive丝印1,2,GND,GND处焊接2.54排针,在电容侧按对于引脚位置焊接,效果如下图所示:

改装套件的效果如下图所示,相比原始ODrive其具有CAN通讯和上位机配置功能,整体体积也较小,同时也大大增加了编码器连线可靠性和SWD固件下载的便利性,则使用ODrive改装套件完成4块板子的改装后既可以将其安装在机架中间板上,使用香蕉头快速完成电气连接。

最终,使用SWD转接模块更新ODrive的固件,并用USB接口连接上位机,在执行器界面中进行基本参数配置和授权码的写入(注:接口板靠近白色端子的4p为SWD接口,另一个为USB接口)!!相关配置文件已经上传到Github中: