MIT Cheetah 完整开源代码与论文简介
前言
MIT Biomimetic Robotics Lab 以 MIT Cheetah 3, MIT Cheetah 2, MIT Cheetah Mini 闻名。
之前 lab 成员 Benjamin Katz 在他的硕士论文[1]中开源了 MIT Cheetah Mini 电机驱动器, 连接12个电机与机载电脑的中心板(SPIne)的代码和硬件:
约一个月前他们居然开源了在 Cheetah Mini 上运行的所有代码!!!使用了 MIT License。
至此, 世界上最先进的四足机器人之一: MIT Cheetah Mini 的所有软件, 固件, 除机器人本体外的硬件已经全部公开。
作者对quadruped robot关注许久, 之前阅读过MIT Cheetah 相关论文并在模拟器上复现了部分算法, 没想到 MIT Biomimetic Robotics Lab直接把它开源了[捂脸], 同时也对此感到兴奋而写下这篇文章, 希望也能为 "Accelerate Robotics Research" 做一点小贡献。
MIT Cheetah 3/Mini 系统简介
从现有文章看 MIT Cheetah 3与MIT Cheetah Mini的控制系统几乎是一样的。
MIT Cheetah 3 机器人系统框图[2]:
操作手通过游戏手柄或上位机发送期望速度或位姿
机载计算机主要由三部分构成:
- 高级规划(绿色)
- 机体控制(红色)
- 状态估计(蓝色)
每条腿有两种控制模式:
- 摆动腿的轨迹跟踪模式:使用阻抗进行轨迹跟踪
- 触地腿的力控模式:使用雅可比来将下文中MPC控制器计算出的力映射到关节扭矩
MIT Cheetah 3 控制系统框图[3]:
整个机器人的locomotion关键点在于计算出期望的ground reaction force(地面反作用于机器人的力), Cheetah使用了Convex Model-Predictive Control实现:
- 建立四足机器人的动力学模型
- 根据状态估计得到与地面接触的腿来确定要计算的力的位置方向和数量
- 在工作点( roll = pitch = 0 ) 对动力学模型进行线性化, 从而能构造凸MPC模型
- 将MPC问题转换为QP(二次规划)问题, 之后用求解器求解
- 将解出的 ground reaction force 作为触地腿控制器期望
上文提到GitHub仓库包括了在机载计算机运行的所有程序:
- 蓝色部分运行频率为30Hz
- 红色部分运行频率为1000Hz
而绿色部分运行在底层14个STM32中,频率为40000Hz
作者与 Benjamin Katz (MIT Cheetah Mini作者) 交流得到的和自己发现的小细节:
- 所有运动学和动力学算法都运行在机载电脑中: 12个STM32作为电机控制器 只运行FOC算法并用CAN总线与SPIne通信, SPIne上有两个STM32负责打包CAN消息并用SPI发给机载电脑
- SPIne之所以用两个STM32是因为带宽不够, 每个STM32有两路CAN总线, 每一路负责三个电机(一条腿)的通讯才能达到1000Hz, 若一路负责六个电机控制频率只能降到约600Hz
- 在盲爬楼梯时[4], MPC的动力学模型的线性化依旧取 roll = pitch = 0 , 控制效果还是挺不错的
Cheetah_Software文件目录
- cmake : cmake 文件
- common: 状态估计及触地检测, 贝塞尔曲线轨迹生成, 步态生成, 机器人的动力学模型
- config: cheetah配置文件
- documentation: 模拟器和机器人本体的getting started文档
- lcm_types: 自定义的LCM消息类型
- resources: 模拟器用到的 CAD文件
- robot: 机器人的底层SPI和SBUS通信, 部分进程是硬实时的
- scripts: 机器人初始化和LCM消息生成脚本
- sim: 模拟器
- third-party : 第三方库
- user: 控制器和状态机
common内容
触地检测用了一个非常有趣的算法来融合多个传感器[5], 状态机的切换也可以参考这篇文章[5]。
user内容
- Example_Leg_InvDyn: 腿的逆动力学示例, 即上文说的接触腿的力控制器
- JPos_Controller: 关节位置控制示例, 即上文所说的摆动腿轨迹跟踪控制器, 值得注意的是, 这里使用了三角函数成作为轨迹生成器, 而正式使用的是贝塞尔曲线。
MIT_Controller:
是最核心最复杂的控制器, 分为:
- FSM: 有限状态机, 负责机器人各个状态: 站起, 站定时平衡, 腿末端阻抗, 腿被动, 腿关节PD+前馈, 各种步态的切换及控制.
- BlanceController: QP平衡控制器[6]
- convexMPC: 上文提到的凸MPC控制器
third-party: LCM
推荐一个 MIT Biomimetic Robotics Lab 和 MIT Locomotion Group 都在用的第三方库:Lightweight Communications and Marshalling (LCM)
是一组用于通信的库,与ROS中的话题类似,有着高带宽低延迟实时性强的特点。
编译相关:
安装完 LCM、Qt5、Eigen(需要通过CMake安装) 后按照仓库里的流程进行编译,值得注意的是sim/CMakeLists.txt中第13~16行需要根据自己Qt对应版本的安装目录修改, 如:
set(Qt5Core_DIR ~/Qt/5.12.4/gcc_64/lib/cmake/Qt5Core)
set(Qt5Widgets_DIR ~/Qt/5.12.4/gcc_64/lib/cmake/Qt5Widgets)
set(Qt5Gamepad_DIR ~/Qt/5.12.4/gcc_64/lib/cmake/Qt5Gamepad)
否则将出现CMake找不到"Qt5Gamepad"的错误
运行和操作相关
编译测试完成后,可以根据文档打开模拟器的 Qt5 GUI 并运行模拟器, 这时机器人会只有身体没有腿,这不是模型载入错误等问题,需要运行控制器后才有腿
运行 MIT Controller 后,将开始模拟,机器人会从伸展状态运动到趴着的状态,此时control_mode 为0 (NORMAL in PASSIVE),若没有插入手柄且模拟的是MIT Cheetah 3, 会出现一个关节反向猛烈穿透身体而导致物理引擎出错。
- 将 control_mode 改为10 (JOINT_PD), 机器人电机会上电切处于准备站立的姿态
- 将 control_mode 改为1 (STAND_UP), Mini Cheetah会站立,而Cheetah 3 有Bug不会动
- 将 control_mode 改为4 (LOCOMOTION), 上述的MPC控制器和阻抗控制器会开启,默认进行以Tort步态运行,此时可以用手柄操作
- 可以通过修改 cmpc_gait 来改变步态
- 可以通过改变cheater_mode(0/1)来开关状态估计的结果的显示
成功跑通了模拟器之后就可以愉快地写自己的控制器或者研究整个开源程序了!!!
参考
- ^A low cost modular actuator for dynamic robots https://dspace.mit.edu/handle/1721.1/118671
- ^MIT Cheetah 3: Design and Control of a Robust, Dynamic Quadruped Robot https://ieeexplore.ieee.org/document/8593885
- ^Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control https://ieeexplore.ieee.org/document/8594448
- ^“Blind” Cheetah 3 robot can climb stairs littered with obstacles http://news.mit.edu/2018/blind-cheetah-robot-climb-stairs-obstacles-disaster-zones-0705
- ^abContact Model Fusion for Event-Based Locomotion in Unstructured Terrains https://ieeexplore.ieee.org/document/8460904
- ^High-slope terrain locomotion for torque-controlled quadruped robots https://hal.archives-ouvertes.fr/hal-01137225/document