MITMiniCheetah开源代码移动全流程中⽂注释
/*MIT-Cheetah Software
**            Email:@qq  QQ:1370780559
**---------------------------------------------------------
**  Description: 此⽂件注释由本⼈完成,仅为个⼈理解,本⼈⽔平有限,还请见谅
**  interpreter    : NaCl
*/
主要对MPC控制的移动状态流程进⾏了注释
对下列程序进⾏了部分注释:
user\MIT_Controller\main.cpp//启动⽂件
robot\main_helper//启动⽂件
HardwareBridge//硬件接⼝启动控制器通信等
RobotRunner//运⾏器⽤来运⾏状态估计控制器等是⼀个周期任务:
PeriodicTask//周期任务
StateEstimator//状态估计⽗类
ContactEstimator//接触状态估计⽬前版本代码未使⽤论⽂中算法只是直接传递数据
PositionVelocityEstimator//位置估计卡尔曼滤波
orientationEstimator //⾓度估计
contactEstimator //接触状态估计⽬前为使⽤到当前功能为将步态时间表传递
RobotController//控制器⽗类仅⽤来继承创造接⼝
VisionMPC//⽼版本MPC算法主要部分和convexMPC相同
convexMPC//实际使⽤的mpc算法
FootSwingTrajectory//⾜端轨迹
BalanceController//为QP优化实现虚拟⼒分配,实际好像未使⽤?在FSM_State<T>* invalid;中使⽤,这个被设为空指针了LegController//腿部控制包括单腿雅可⽐运动学向控制板收发命令和参数所有的量都在“腿坐标系”中,与⾝体坐标系有相同的⽅向
FSM//有限状态机根据状态不同使⽤不同的控制器
//ControlFSM.cpp->runFSM()//状态机切换状态代码所在NORMAL, TRANSITIONING, ESTOP, EDAMP为状态机的状态切换⽤状态
/*struct FSM_StatesList {
FSM_State<T>* invalid; // 空
FSM_State_Passive<T>* passive;//⽆操作
FSM_State_JointPD<T>* jointPD;//独⽴关节控制
FSM_State_ImpedanceControl<T>* impedanceControl;//独⽴控制应该时直⾓坐标下
FSM_State_StandUp<T>* standUp;//站起
FSM_State_BalanceStand<T>* balanceStand;//平衡站⽴
FSM_State_Locomotion<T>* locomotion;//移动
FSM_State_RecoveryStand<T>* recoveryStand;//恢复站⽴
FSM_State_Vision<T>* vision;
FSM_State_BackFlip<T>* backflip;//后空翻
FSM_State_FrontJump<T>* frontJump;//前跳
};
*/
这些为控制状态,状态机切换的⽬标状态即实现的功能
状态机通过遥控在这些状态间切换,猜测应包含⼤量调试⽤状态
WBC部分:(仅个⼈⽚⾯理解,这块我也不太清楚)请参照论⽂:
“Highly Dynamic Quadruped Locomotion via Whole-Body Impulse Control and Model Predictive Control”
WBC控制器使⽤零空间投影⽅法(null_space_base)实现任务优先级控制
(此⽅法本⼈未了解透彻,⼤概参考⼀篇⾜球机器⼈的论⽂,有理解的⼤佬请联系我)
个⼈理解最⾼优先级任务为接触脚控制,其他摆动脚为次⼀级任务
⽀撑腿为最优先任务,
第⼀条摆动腿在⽀撑腿任务的零空间执⾏,第⼆条摆动腿在第⼀条摆动腿的零空间执⾏,
其他摆动腿依次类推??(这块不确定)
可能其他腿也在⽀撑腿的零空间执⾏,即⼏个摆动腿是同级??
WBC部分主要看这⼏个⽂件,未注即未使⽤代码(仅在locomotion状态)
user\MIT_Controller\Controllers\WBC\WBIC中全部//算法关键
user\MIT_Controller\Controllers\WBC\ContactSpec.hpp//⽗类
user\MIT_Controller\Controllers\WBC\Task.hpp//⽗类
user\MIT_Controller\Controllers\WBC\WBC.hpp//⽗类
user\MIT_Controller\Controllers\WBC_Ctrl\ContactSet\SingleContact.cpp&hpp//⼦类算法关键
user\MIT_Controller\Controllers\WBC_Ctrl\LocomotionCtrl\LocomotionCtrl.cpp&hpp//⼦类算法关键
user\MIT_Controller\Controllers\WBC_Ctrl\TaskSet\LinkPosTask.cpp&hpp//⼦类算法关键
user\MIT_Controller\Controllers\WBC_Ctrl\WBC_Ctrl.cpp&hpp//⽗类
⽗类⼦类
Task->LinkPosTask
ContactSpec->SingleContact
WBC-> WBIC
WBC_Ctrl->LocomotionCtrl
LocomotionCtrl主要⽤来启动和传出传⼊数据
前者是进⾏任务更新启动SingleContact,LinkPosTask,WBIC,kinWBC
移动部分启动流程:
fsm_locomotion(将MPC产⽣的⾜端坐标,⼒等参数传⼊)->LocomotionCtrl->LinkPosTask&SingleContact&kinWBC&WBIC&FloatingBaseModel
WBC控制器主要分:
kinWBC:运动学WBC 将摆动腿按优先级处理并计算出控制量主要实现论⽂式16 ,17,不处理⽀撑腿控制量
WBIC :动⼒学WBC部分,控制⽀撑腿 //主要实现式25及前⾯加速度公式控制各腿加速度⽀撑腿最⾼优先级
/*
user\main.cpp是启动⽂件传⼊控制器对象MIT_Controller->启动main_helper->
启动hardwarebridge启动周期任务控制器PeriodicTask->
添加robotrunner到任务管理器->robotrunner启动MIT_Controller,实例化需要的类传⼊MIT_Controller->
MIT_Controller启动gait schedule,DesiredStateCommand,ControlFSM->ControlFSM进⾏状态切换
controller翻译中文*/
注释思路主要来源于⽂件内附的论⽂外加个⼈猜测,如有错误,请联系我