摘要:
LegController类是四足机器人中控系统与末端控制系统和其他上层应用系统交互数据的管理类,如图1所示。
图1
本文主要内容包括:
1.LegControllerCommand
2.LegControllerData
3.LegController
一、结构体类LegControllerCommand
LegControllerCommand存储的是四足机器人中控系统生成的腿关节命令,内容包括:
1、tauFeedForward : Vec3<T>
包含三个元素的列表,代表一条腿三个关节的前馈力矩。
2、forceFeedForward : Vec3<T>
代表三个关节的前馈力。
3、qDes : Vec3<T>
代表三个关节的期望位置或目标位置,三个关节为转动关节,因此就是旋转角度(θ)。
4、qdDes : Vec3<T>
代表三个关节的期望角速度。
5、pDes : Vec3<T>
代表足端位置坐标。
6、vDes : Vec3<T>
代表足端位移矢量速度。
7、kpCartesian : Mat3<T>
四足机器人足端矢量位移变化与力的系数矩阵。
8、kdCartesian : Mat3<T>
四足机器人足端加速度与力的系数矩阵。
9、kpJoint : Mat3<T>
三个关节的kp值。
10、kdJoint : Mat3<T>
三个关节的kd值。
11、void zero()
腿控制命令清零。
12、LegControllerCommand()
构造函数,所有成员变量清零。
二、结构体类LegControllerData
LegControllerData是存储四足机器人各腿运行数据的数据结构,其内容如下:
1、q : Vec3<T>
表示各关节的位置,即旋转角度。
2、qd : Vec3<T>
表示各关节的旋转速度,即角速度。
3、p : Vec3<T>
表示足端位置的坐标。
4、v : Vec3<T>
表示足端速度。
5、J : Mat3<T>
当前的雅可比矩阵。
6、tauEstimate : Vec3<T>
当前各关节力矩预测值。
7、quadruped : Quadruped<T>*
当前四足机器人机械模型对象。
8、void setQuadruped(Quadruped<T>& quad)
设置四足机器人模型对象。
9、void zero()
数据清零。
10、LegControllerData()
构造函数,数据清零。
三、模板类LegController<T>
LegController<T>是管理四足机器人腿控制命令和数据的类,是MIT四足机器人开源项目Cheetah-Software的一个核心数据类,所有成员的属性为公共属性。
(一)成员变量
1、commands : LegControllerCommand<T>[4]
存储四条腿的控制命令。
2、datas : LegControllerData<T>[4]
存储四条腿的运行数据。
3、_quadruped : Quadruped<T>&
四足机器人数据模型的引用。
4、_legsEnabled : bool
四足机器人的四条腿的使能标志。
5、_maxTorque : T
四足机器人四条腿上各关节的最大力矩。
6、_zeroEncoders : bool
零编码标志。
7、_calibrateEncoders : u32
校准编码值。
(二)成员函数
1、LegController(Quadruped<T>& quad)
构造函数,第一步,将quad实参引用赋值给_quadruped,第二步,每个腿控制数据设置四足机器人模型对象_quadruped。
2、void zeroCommand()
将每条腿的控制命令清零和设置所有腿的使能为false。
3、void edampCommand(RobotType robot, T gain)
在紧急情况下设置kd。当robot为RobotType::CHEETAH_3时,设置腿控制命令的kdCartesian值,当robot为RobotType::MINI_CHEETAH时,设置腿控制命令的kdJoint值。
4、void updateData(const SpiData* spiData)
void updateData(const TiBoardData* tiBoardData)
将spiData和tiBoardData中的机器人各腿数据更新datas中的数据。
5、void updateCommand(SpiCommand* spiCommand)
void updateCommand(TiBoardCommand* tiBoardCommand)
将生成的控制命令写到spiCommand和tiBoardCommand对象。
6、void setEnabled(bool enabled)
设置_legEnabled的值,即腿控制使能。
7、void setLcm(leg_control_data_lcmt* data, leg_control_command_lcmt* command)
将各腿的数据更新到data对象和控制命令更新到command对象。
8、void setMaxTorqueCheetah3(T tau)
设置最大力矩。
四、小结
LegController类在项目中只有一个对象,在RobotRunner类中生成,与Quadruped<T>、RobotRunner、StateEstimatorContainer<T>、RobotController、ControlFSM、FSM_State和JPosInitializer<T>等类有千丝万缕的联系。