Moco-ML 开源四足机器人 项目教程6:Moco通用机器人控制器设计

(1)常用机器人主控方案

本节介绍我为MOCO-ML机器人专门设计的主控制器,类似无人机四足机器人主控同样还是完成对运动传感器的采集,相比无人机来说除IMU和GPS、视觉等设备外,机器人各关节的角度和电流是非常重要的数据反馈,主控在完成传感器数据采集、处理、融合后估计机器人的状态并最终实现力控稳定机器人姿态和位置,可以看到类似无人机主控主要承担运动控制和数据融合的工作,但由于其自由度相比无人机很多因此其对算力的需求更高,同时目前很多先进运动控制算法都需要矩阵库、优化库的支持。

首先介绍一下对于机器人来说目前有啥大概的控制器方案,最常见的仍然是嵌入式机器人主控处理器如意法半导体STM32系列,其被大量应用在无人机飞控和小车底盘控制中,另外在一些低成本机器人中树莓派也是比较常用的选择,其为单板ARM处理器可以实现复杂算法的运行需求,可以运行ROS和各类优化算法库,除了树莓派外近年来还出现了许多应用于边缘计算的板卡如华为的Atlas, 华硕的Tinkerboard、ODroid和英伟达的TX和Jetson系列,除了具有多核心、高算力和低功耗的特点外,更多以集成高性能GPU为特点面向终端上的深度学习网络部署以及机器人运动控制。

针对机器人来说目前有很多通用的一体化基础控制系统,在单板ARM处理器的基础上集成机器人所需传感器,提高系统的集成度、降低功耗,以高通为例其已经在几年前就推出面向微小型无人机的高性能同用主控平台骁龙Flight平台,其被大量应用于商业无人机、消费级无人机和机器人,其以骁龙801SoC(由四颗主频为2.26GHz的核心组成)运行嵌入式Linux系统,板载MEMS惯性传感器,支持GPS、4K视频拍摄、双通道Wi-Fi和蓝牙模块,所有的功能均集成在一个名片大小的PCB上,同时集成了成熟的单目定位、目标识别和深度学习SDK,并且能够支持大多数的飞控代码如PX4,因此具有极高的同样性能快速从机器人原型向产品进行落地。另外DJI近年来致力于推广机器人竞赛和相关的教学开发平台,其推出的RobotMaster开发平台是面向自己无人机和地面机器人产品的驾驶脑开发套件,传承与DJI产品标志的高模块化和集成设计,该系统以及STM32 F4系列高性能嵌入式处理器为核心,拥有丰富的扩展接口和通信接口,板载IMU传感器,可配合RoboMaster出品的M3508、 M2006直流无刷减速电机、UWB模块以及妙算等产品使用,亦可配合DJI飞控SDK使用,配件丰富。

在实际机器人控制方案中MIT-Cheetah是目前最高性能的电驱动四足机器人之一,其具有可靠的步态控制通过运行PR-MPC算法能适应复杂的地形和不同的步态,同时能进一步搭载激光雷达和视觉传感器完成对地形建模和落足重规划以及SLAM导航避障感知,其主控采用了一个i7处理器的工控机 (Sandy Bridge Core i7, 8 Gb ram)运行Linux操作系统通过EtherCAT与底层ARM处理器进行交互控制。对于其后续推出的Mini Cheetah四足机器人其主控架构采用了更低成本的方案,使用x86架构的单板处理器UP Board 作为主控其采用x5-Z8350 处理器(4核1.4Ghz, 4 gb RAM,5W低功耗)通过运行PREEMPT-RT 实时补丁的Linux系统保证算法的1Khz运行,最终通过扩展SPI接口板实现与底层电机的CAN高速交互通讯。

对于真正的高性能机器人来说,如ETH研发的高性能多功能四足机器人Anymal,其能搭载多种工业任务载荷包括了激光雷达、双目视觉和气体红外传感器,为保证对SLAM和步态算法的可靠运行该系统主要机器人ROS框架对不同的模块进行集成,其采用华硕P8H61主板使用Core i7处理器(2.66Ghz X86架构 8核)支持所需算法的运行,通过USB完成与如X-sense MTi IMU 等外部设备的交互通讯以及传感器数据读取。Anymal作为面向工业级足式机器人的产品其采用了intel NUC PCs作为核心主控,同样通过USB完成与Hokuyo UTM-30lx激光雷达、 MTi-100 IMU等设备的通信交互,基于Wifi完成ROS组网和远程地面站通信,并使用扩展CAN通信板实现与底层电机关节的控制交互。

最终回到我们自制的目标Minitaur四足机器人,其采用STM32F3作为伺服控制器控制每条腿的两个电机,通过以太网与核心树莓派进行交互, 采用树莓派通过SPI接口与传感器扩展进行高速交互通讯,扩展板板载IMU、GPS接收机等模块,具有集成度高,通用性强的特点。通过在树莓派等Linux处理平台上安装实时内核补丁可以充分地发挥其高算力的优点,同时能在控制算法外集成图像、语音等丰富的功能。

(2)MOCO通用四足机器人控制器介绍

Moco 12是我制作的一个高性能舵机四足机器人,其采用Moco通用四足机器人控制能实现不同构型,不同尺寸舵狗的控制,其功能定位于DJI飞控一致用户通过上位机配置就可以完成快速机器人的组装和测试,在新版本中我借鉴了MIT的方案提供了两种主控功能模式,采用同一套硬件完成(A)独立主控模式:可以直接在控制器中编程完成运动控制开发;(B)ARM载板模式:可作为如树莓派的IO载板,采集传感器数据并接受控制命令以总线发送出去。控制器板载基本的IMU运动传感器,以CAN总线作为主要伺服控制接口完成与ODrive的通讯,另外预留USB可以连接上位机监控底层力控数据,并实现遥控、参数调节和状态切换,机器人控制器如下图所示:

上图为机器人MOCO-ML机器人采用的控制器,其采用STM32F4单片机作为内核,板载9轴传感器和2路CAN总线、多路串口和外扩IO,其除了可以直接基于KEIL编程外还能以SPI与树莓派通信作为机器人的IO载板,主控尺寸小于5*3cm能集成到桌面级的机器人系统中,控制器各硬件资源如下表所示:

目前单片机引脚已经完全分配,后续扩展模块通过串口内部高速通讯,目前预留的串口主要用于远程OCU连接、SDK输入与航模SBus遥控输入,扩展定位模块、树莓派SPI通讯。

主控端子均朝向上方采用典型飞控的引脚分配使用2.54排针作为主伺服控制信号的输出,SWD与USB均采用1.25端子引出,方便不调试时去除连线,USB调试口配套对应连接转换板方便控制器内置时的参数调节,具体端子分布如下图所示。

如上图所示,端子①为CAN2输出接口,对应的引脚说明如下:

如上图所示,端子②为IIC外扩端子,对应的引脚说明如下:

如上图所示,端子③为SWD引脚组对应的说明如下:

如上图所示,端子④USB引脚组对应的说明如下:

如上图所示,端子⑤为串口1,引脚组对应的说明如下:

如上图所示,端子⑥为串口6,引脚组对应的说明如下:

如上图所示,端子⑦为SPI2扩展引脚,引脚组对应的说明如下:

如上图所示,端子⑧为供电引脚,引脚组对应的说明如下:

如上图所示,端子⑨为总线串口舵机输出接口,对应的引脚说明如下:

如上图所示,端子⑩为SBUS航模接收机接口,对应的引脚说明如下:

如上图所示,端子⑩①为CAN1输出接口,对应的引脚说明如下:

(3)推荐电气连接

控制器电气连接主要完成PWM与舵机或无刷电机驱动器的连接,PWM供电线与电池的连接,主控供电线与电池的连接,遥控器的连接,USB与上位机的连接,外扩模块与串口的连接,则具体连线示意图如下所示。

(4)固件更新与代码开发方式推荐

如上图所示,可以使用SWD转接模块连接主控使用KEIL进行单片机开发,同时可用USB端口连接OCU实现参数在线监视和配置。

对于项目中一些不开源的软件,我们推荐使用USB口对固件进行更新,首先需要将Hex固件文件转换为生成DFU文件打开Dfu file manager软件,默认选择生成DFU文件,点击OK。选择文件,我们这里选择S19 or Hex并在工程目录找到工程生成的Hex文件打开。

然后点击生成文件,选择存放目录及文件名,再确定保存。提示生成成功,确定,到这里DFU文件就生成好了。打开DfuSe Demo软件,按住MOCO控制器上的按键,在无外接供电的条件下插上USB线连上电脑就能识别出DFU设备了,如下图:

选择文件,在弹出窗口中找到之前软件生成的DFU文件或者下载的DFU文件,选择并打开。双击Target Id中的STM32 Flash一栏,点击Choose选择刚才生成到的Dfu文件后,点击Upgrade进行下载,当读条完毕无错误报出则可以连接OCU上位机查看固件版本。

注:部分USB驱动无法安装成功,可通过通过SWD口下载固件

目前控制器固件需要通过STlink下载,首先使用转接线与STlink的SWD接口对接并从下载口提供5V供电,之后使用STM32 ST-LINK Utility 下载固件。首先连接单片机,正确连接后显示:

之后选择需要下载的固件,点击File选择Open File功能,找到Moco.hex固件确认:

选择Target点击Program and Vertify下载固件:

点击Start开始下载当读条完毕,并显示如下说明则固件下载完成:

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

如果你感兴趣请关注我的知乎和B站,并加入QQ群追踪每次资料和教程的更新,下周将更新机器人组装教程,记得来看哦,你的赞赏就是我持续更新的动力!