前几天小米的铁蛋,又让四足机器人火了一把。9999一台,这个价钱还挺香的。众所周知,国内的大部分四足机器狗的涌出,都是因为2019年,MIT的猎豹开源,从硬件到软件。国内四足机器人的研发也就上了一个台阶,也包括小米的铁蛋也是基于mit的Cheetah Mini。
最近看了一下mit的机器狗开源的关节,看了一下12个关节到控制器的是如何通信的。 简单的画了个图:
模块通信
- 12个关节驱动器,只运行了FOC的算法,对于命令和信息上报使用了CAN通信
- 一条腿(三个关节)为一路CAN,与SPIne进行通信,一个SPIne模块负责两条腿的CAN通信,并使用SPI和电脑信息交换。
- IMU用的是串口通信。
- 每个STM32还有独立串口通信,用于模块的设置与debug。
模块通信速率:
- 每路CAN的通信配置是1M。SPIne用两个STM32是因为带宽不够, 每个STM32有两路CAN, 每一路负责三个电机的通讯才达到1000Hz, 若一路负责两条腿六个电机,就达不到。
- SPIne 和电脑SPI通信的时钟为12M,通信频率为1000hz
通信数据:
can格式每帧数据8个byte。 SPIne->关节 指令内容(8字节):
- 位置指令: 16bit
- 速度指令: 12bit
- kp: 12bit
- kd: 12bit
- 前馈转矩: 12bit
关节->SPIne 上报内容(5字节):
- 位置信息: 16bit
- 速度信息: 12bit
- 电流(力矩): 12bit
PC->SPIne 指令内容(132字节): 一共是33个数据。6个关节的位置指令、速度指令、kp、kd、前馈转矩、两个flag和一个校验。
SPIne->PC 上报内容(60字节): 一共是15个数据,6个关节的位置和速度,两个flag,和一个校验.
mbedOS
mit狗的硬件的代码量都很小,像SPIne模块,基本只有数据的交互的处理。对于硬件驱动代码等等的,全靠mbedOS。
mbedOS是ARM打造、主打IoT的一整套软件解决方案,是一个针对ARM CortexM系列处理器的嵌入式开源生态。 官网:https://os.mbed.com/mbed-os/
感觉国内使用的很少,网上搜了一下,可能是因为没有中文网站,在线编译服务器在美国,云服务在在国外,推广力度小等原因。不过MbedOS编写的应用程序和arduino 一样简单,使用的是c++的面向对象,去抽象软硬件。
比如在SPIne模块中初始化spi:
void init_spi(void){
SPISlave *spi = new SPISlave(PA_7, PA_6, PA_5, PA_4);
spi->format(16, 0);
spi->frequency(12000000);
spi->reply(0x0);
cs.fall(&spi_isr);
printf("done\n\r");
}
网上看见的一个CAN 总线的应用程序:
#include "mbed.h"
DigitalOut myled(D8);
CAN can1(PD_0, PD_1,500000);
int main() {
CANMessage msg;
while(1) {
if(can1.read(msg)) {
printf("Message received:id=%d,type=%d,%d\n", msg.id,msg.type,msg.data[0]);
myled = !myled;
}
}
}
mit开源资料 电机控制器硬件:https://github.com/bgkatz/3phase_integrated 电机控制器软件:https://os.mbed.com/users/benkatz/code/Hobbyking_Cheetah_Compact_DRV8323/ SPIne硬件:https://github.com/bgkatz/SPIne SPIne软件:https://os.mbed.com/users/benkatz/code/SPIne/
linux控制代码 Cheetah Mini: https://github.com/mit-biomimetics/Cheetah-Software
参考 https://blog.csdn.net/yaojiawan/article/details/82789970 https://zhuanlan.zhihu.com/p/79391139
被抛弃的写随笔公众号改写技术文章了,感兴趣的可以关注公众号:王崇卫
回复“QT波形”,获取源码。
|