Moco-ML 开源四足机器人 项目教程9:底层CAN通讯接口介绍

在完成对ODrive标定和接口板的标定后既可以开始通过CAN通讯来驱动各个电机的期望电流、速度和角度,首先再次重新再次确定电机的坐标系ID号和关节坐标系,以机器人俯视图为例,各腿的ID号如下图所示:

如上图所示,机器人右前腿FR的腿号为0,右后HR为1,左前FL为2,左后HL为3,这个ID编号如果在提供的CAN通讯例子中对应结构体VMC[*]中各腿的顺序一致,另外机头方向为机体{B}系X轴正方向,右侧为Y轴正方向,Z轴竖直向上。各腿的{H}坐标系均一致,以FR腿为例其坐标系定义如下:

其中朝向机头方向为X正方向,竖直为Z轴,前方的机臂为0号,后方为1号,对应VMC结构体中的角度顺序为sita1和sita2,两角度均顺时针旋转增加基准0度均与X轴一致,另外图中短机臂长度为L1长机臂长度为L2,末端多余的部分在运动学中忽略计算,则可基于上述坐标系定义计算出相应的运动学和雅克比矩阵。

在进行CAN总线测试时首先需要将各ODrive上的接口板与Moco通用控制器的CAN线连接,具体接口连接没有要求(各OD的CAN ID需要在上位机中配置与腿号一致,并且各电机通道的顺序也与前后腿顺序一致,参考上一节教程),使用的CAN连线为异面的4P排线注意连接前确认两端引脚丝印顺序:

在连接后OD板默认与主控通讯波特率为500K,并以1Khz的频率上传数据,由于一个STM32仅有两路CAN因此,两个OD板子公用一路主控的CAN通道,并分几帧上传当前的输出轴角度、力矩以及系统状态,主控则发送期望的力矩和相关系统参数到底层,则CAN通讯链路的结构如下图所示:

在CAN发送接收中底层回传数据以CAN滤波器作为ID进行区分,主控CAN接收不设置滤波,OD接收主控命令以ID进行滤波.

20210406更新:

更新遥控帧同步采集,原始固件中底层以固定频率回传造成CAN总线堵塞和数据不同步,因此修改为主控主动发送遥控帧底层接收到后马上回传反馈数据!

则OD回传数据的帧结构如下,首先定义几个宏参数:

Remote为遥控帧在发送后会再总线上获取底层传感器数据

①角度反馈帧

②角速度帧

③系统状态帧

备注:上述数据帧中角度帧上传频率1Khz,角速度默认不上传,系统状态默认0.5Hz

则主控命令下发帧定义如下:

①力矩命令帧

②电流命令帧

③零位参数帧

④力矩参数帧

⑤反馈遥控帧(反馈ID ODrive下两个通道的角度+力矩)

综上,以上是V1版本基本的CAN通讯协议,值得注意的是OD接口板底层有看门狗保护因此主控发送命令需要保证不低于100Hz,另外由于OD采用的增量式编码器上电角度非绝对因此要使能电机的基本流程与上位机参数中一致,则主控基本的通讯流程如下:

(1)确认CAN通道接收到OD数据,则CAN通讯链路正常;

(2)给OD上电,之后等待OD连接标志位正常,则OD接口板与OD通讯正常;

(3)设置零位角度,发送帧③到接口板;

(4)设置力矩系数最大电流,发送帧④到接口板;

(5)将角度标零位设为2发送任意命令帧,之后再复位为0发送任意命令帧,则OD将初始化电机当前物理位置为设定的零位角度,如电机准备标志位为1则可使能发送电流命令;

(6)将使能将使能标志位置为1,给的期望电流,则OD将按上位机配置的电机转向和力矩方向下发电流命令到ODrive;

当电机飞车故障时故障标志位将上传,通过将清除故障标志置1后可清除故障,OD可以重新使能并发布电流命令;

相关机器人机架、主控PCB和原理图文件已经上传到Github中!!