Tinymal-B控制教程介绍3-方式一自己开发步态控制算法

TInymal-B随项目关注与爱好者参与程度会逐步开发相关源码,默认开源了基于MPC和运动学逆解位力混合的站立步态全部源码!

如果你仅仅想采用Tinymal-B平台运行自己的运动控制算法,如移植MIT或其他的开源项目,那仅采用hardware_task项目为基础进行开发。hardware_task中主要包括了Odroid与STM32的SPI通讯高速数据交互,从而完成对12个电机扭矩和位置采集,关节参数与扭矩、角度指令下发。为了保证底层伺服控制的稳定,我们建议基于我们开源的control_task项目中已经搭建好的共享内存框架。
在control_task共享内存程序中,从底层读取到原始的IMU传感器数据如下:
关节数据反馈为,其中角度单位为°,扭矩为Nm;
关节角度数组q[腿号][关节号]:[腿号]0号腿为FR,1号腿为HR,2号腿为FL,3号腿为HL;[关节号]0号关节为大腿,1号为膝关节,2号为侧展:
控制期望角度下发采用:
期望扭矩下发采用,其正负号与反馈值一致:
关节参数将进行独立设置,并区分支撑(ST)和摆动(SW):
如采用PS2遥控器,则遥控按键输入借口为:
下面介绍下机器人控制和运动学坐标系定义:
注:如上图所示,Tinymal项目中采用的坐标系定义与MIT等机器人相比不同,其Y轴定义朝向右侧,如有特殊需求可自行修改与MIT等机器人项目的坐标系一致!
上图给出了机头右侧的机器人单腿坐标系的定义,图中右前腿(ID0)大腿角度q0为45°,小腿q1为90°,由于我们所有腿的角度都采用了统一的转向定义,因此右后腿(ID1)此时的大腿角度q0也是45°,小腿q1为90°;
扭矩符号定义如下,驱动角度向正方法运动所需的扭矩为正值,并且底层采集电机实际扭矩测量值与其一致。如图中如前腿大腿关节如要转到水平90°需要给正扭矩,小腿转向大腿臂侧至45°需要给定负的扭矩;
上图给出了机体后侧的视角,对于侧展角度q2我们采用了左右侧一致的角度定义,如上图所示右侧腿(ID1)此时的侧展角度为-25°,左侧腿(ID3)此时为+25°,则右腿(ID1)如果需要转至水平角度需要给正扭矩,左侧腿(ID3)则需要给定负的扭矩,其余各腿关节转向定义与扭矩符号可参考上述例子进行确定。
综上, 基于上述描述针对用户自己的控制程序需要匹配下自己的坐标系定义并开展算法移植或强化学习模型的部署,其他需要注意的部分是以下几点:
1)控制程序中区分了关节参数,通过spi_tx.param_sel[i]进行选择0为摆动采用SW的PID参数,1为支撑采用ST的PID参数;
2)设定PID参数后给定期望角度即可以驱动关节转动,进一步增加扭矩指令可以实现位力混合控制;
3)spi_tx.en_motor=leg_motor[id].motor_en为电机开关使能指令;
4)spi_tx.reser_q=leg_motor[id].reset_q可以完成对电机角度的标定,标定角度会直接决定当前关节0位,因此在运行控制程序前需要给定相应的初值需要默认发送我们定义的标定角度。角度标定建议运行官方固件,参考《使用手册》角度标定章节,然后再回到自己的项目中进行开发,对于Tinymal其默认角度设置如下,在开源的Demo项目中我们将其设置在了Yaml参数文件中:
2023-02-11