本文档为补充工程说明文档
涵盖wbc+mpc通信逻辑流程图;对节点逻辑关系进行了解耦;对配置文件进行重新梳理
详细逻辑图和说明可以查看html,本地双击浏览器打开
mpc_sqp_node 输入

nodelet反馈端

mpc输出端和nodelet输入端;跳过mpc的nodelt_controller输入端

nodelet内部 wbc,mrt和状态估计数据流

Info
gait.info:用于调整机器人步态的切换和对应的落足时序;
list中有可选取步态:{[0] stance, [1] trot, [2] jump, [3] sl ; single leg stance, [4] walk, [5] walk2, [6] trot2}
- modeSequence:接触模式,用于描述机器人双脚与地面的接触情况;
- switchingTimes:用于描述不同接触模式的持续时间,与接触模式一一对应; modeSequence 是两个英文字母组成的字符串,单个英文描述单腿的接触情况,先左腿后右腿。 对于单条腿,接触模式有以下几种:
- S:stance,表示脚掌完全接触地面;
- F:floating,表示脚掌完全离开地面;humanoid_mpc_stop_step_num
- T:Toe,表示仅脚尖接触地面;
- H:Heel,表示仅脚跟接触地面; example: ```cpp fold title:gait_walk.info walk { modeSequence { [0] SS [1] ST [2] SF [3] SH [4] SS [5] TS [6] FS [7] HS
} switchingTimes { [0] 0.05 [1] 0.07 [2] 0.35 [3] 0.04 [4] 0.05 [5] 0.07 [6] 0.35 [7] 0.04 } } ```
reference.info:用于调整遥控器的限幅,和各关节的控制模式和上层扭矩的kpkd;
规划层的限幅(遥控器指令限幅(只关联速度和角速度),VR操作时手臂摆动的速度限幅);
- VR目标移动速度,旋转角速度;命令移动速度旋转角速度限幅;VR使用时torso胯部即质心位置的速度和角速度限幅。
- 质心高度,是否开启手臂模式。
关节层的电机模式以及电机限幅和对应的kp,kd参数;
- jointStateLimit: 各关节电机电机位置限幅频率
- defaultCotrolMode: 各关节电机控制模式;
- joint_kp_: 站立模式下,各关节(除了头部) CST 模式下的扭矩指令,EC主站中位置环对应的kp系数 (==2kHz==);
- joint_kd_: 站立模式下,各关节(除了头部) CST 模式下的扭矩指令,EC主站中速度环对应的kd系数 (==2kHz==);
- joint_kp_walking_: 机器人运动时,对应关节 CST 模式下,EC主站中位置环对应的kp系数 (==2kHz==);
- joint_kd_walking_: 机器人运动时,对应关节 CST 模式下,EC主站中位置环对应的kp系数 (==2kHz==);
- head_kp_: 上层控制器下发头部扭矩时,执行的位置环对应的kp系数 (==500Hz==);
- head_kd_: 上层控制器下发头部扭矩时,执行的速度环对应的kd系数 (==500Hz==);
- IMU和各关节以及速度的滤波频率;
- mrt_joint_vel_filter_cutoff_freq:Motion reference trajectory的低通滤波截止频率。
- 初始化模式序列合各个指令参数(站立时固定高度,速度角速度为0,关节位置固定) ###### dynamic_qr.info:MPC 根据步态,切换到对应的QR矩阵;
若启用 dynamic_qr,则要保证矩阵维度对应于变量的维度,否则求解器报错;
目前仅 DDP 支持,若使用 SQP 求解器,则 dynamic_qr 不会生效。 支持三种Q矩阵的切换:
Q_base_stance:stance 步态时生效;
Q_base_walk:walk 和 trot 步态生效;
Q_base_jump:jump 步态生效;
task.info:MPC 和 WBC 各任务和约束,主要的修改文件;
- MPC 的模型设置;
- 运动时,MPC 全身摆动轨迹的配置;
- MPC 求解器设置;
- MPC 使用的权重矩阵 Q,P,R;
- MPC 各种软约束和硬约束的参数;
- WBC 的扭矩约束和摩擦锥约束;
- WBC 加速度任务的增益系数;
- WBC 各加速度任务的权重;
- 卡尔曼滤波器的参数设置;
- 接触力估计的参数设置;
- 代码运行时,重要频率的监测数据;
参数说明:
几乎不修改:
- centroidalModelType:0: FullCentroidalDynamics, 1: Single Rigid Body Dynamics;
- humanoid_interface:包含是否添加加载参数,解析梯度动力学模型计算和解析末端足底力运动学计算。
- SQP多重射击算法,求解器参数:
- nThreads:sqp 求解时,参与并行计算的最大CPU数量9
- dt:用户定义的动力学离散化时间0.015
- sqpIteration:sqp 求解的迭代次数,次数多则增加求解时间
- deltaTol:x(t)和u(t)的均方根误差小于该值,终止迭代
- g_max & g_min:g 表示违反约束的值函数的范数, 分别表示最大和最小值
- inequalityConstraintMu & inequalityConstraintDelta:表示不等式约束违反的宽松程度
- projectStateInputEqualityConstraints:是否使用投影方法求解硬约束
- printSolverStatistics & printSolverStatus & printLinesearch:求解过程的相关信息打印
- useFeedbackPolicy:是否启用 RiccatiFeedback
- integratorType:动力学离散化方法
- threadPriority:MPC 求解时,所使用线程的优先级
- DDP反向迭代差分算法,求解器参数:
- IPM多重射击算法,求解器参数:
- rollout:ODE求解器参数:
- AbsTolODE:ODE 求解器的绝对容忍误差
- RelTolODE:ODE 求解器的相对容忍误差
- timeStep:逐步推进动力学模拟的时间步长
- integratorType:推进动力学模拟使用的积分器类型ODE45
- maxNumStepsPerSecond:ODE 求解器每秒最大的积分点数量
- checkNumericalStability:布尔变量,是否需要检查 rollout 过程的数值稳定性
- mpc固定参数:
- timeHorizon:MPC 预测时域,越长则求解耗时越长
- solutionTimeWindow:希望保留的优化输出的时间序列长度,负数表示检索整个预测时域的优化输出
- recordSolverData:布尔量,表示是否要回放MPC求解结果
- coldStart:每次运算MPC是否重置,通常不重置,求解速度更快
- debugPrint:在终端中实时打印MPC调用的时间信息
- mpcDesiredFrequency & mrtDesiredFrequency:mpc和mrt模块的期望输出频率
- MonitorParams:监控参数报警:
- totalNum:监测器的数据队列长度
- recentNum:监测器对异常给予警报的新数据数量
- warningThreshold & errorThreshold:警告/报错倍数,若最新数据大于队列数据 的均值加"方差*倍数",则打印警告/错误信息
- mpcFrequencyBiasPercent & mpcFrequencyBiasPercent:频率阈值百分比,mpc/wbc 需保持在期望频率的上下百分比区间内,否则打印警报;若队列所有数据均在阈值区间外,则打印报错
- printWarning:布尔量,是否将警告信息在终端中打印
- contact_cst_st:时间长度,单位:s。膝关节 kpkd 在修改步态前的设置时间之后,会切换为 joint_kp_walking_ 中的设置
- contact_cst_et:时间长度,单位:s。膝关节 kpkd 在修改步态后的设置时间之内,会切换为 joint_kp_walking_ 中的设置
MPC相关参数设置:
- model_settings:
- positionErrorGain:
- positionErrorGain_xy:
- velocityErrorGain_xy:下肢摆动足跟踪约束的位置和速度误差增益
- phaseTransitionStanceTime:切换为站立的延迟时间
- verboseCppAd:打印 CppAD 的装载情况
- recompileLibrariesCppAd:若路径已存在文件,是否重新编译CppAD,默认为false
- modelFolderCppAd:CppAD 文件的缓存路径,需与版本号保持一致
- modelDof:全身关节总的自由度
- mpcArmsDof:参与MPC计算的手臂自由度
- mpcLegsDof:参与MPC计算的下肢自由度
- jointNames:共可参与MPC计算的关节名称,与 modelDof 关联
- jointNamesReal:实物机器人可控制的关节名称,与实物电机数量关联
- contactNames6DoF:参与MPC计算的六维接触点,通常是上肢,末端两个点
- contactNames3DoF:下肢八个支撑相点
- eeFrame:MPC中与末端六维跟踪约束相关的坐标系名称
- swing_trajectory_config:摆动相轨迹配置
- liftOffVelocity:机器人抬腿的末端z方向初速度
- touchDownVelocity:机器人落足的末端z方向速度
- swingHeight:机器人抬腿的最高高度
- swingTimeScale:如果摆动相总时间小于该值,则抬腿高度会降低
- toeSwingHeight:拟人步态中,脚跟着地时,脚尖的z方向高度
- heelSwingHeight:拟人步态中,脚尖着地时,脚跟的z方向高度
- deadBandVelocity:拟人步态中,躯干x方向速度小于该值,则退化为trot
- heelToeMaxHeightVelocity:拟人步态中,躯干x方向速度小于该值,则将拟人步态的脚跟脚尖抬升高度进行缩小
- swing_shoulder_center:摆臂时肩膀pitch电机的转动中心(单位:rad)
- swing_shoulder_scale:摆臂时肩膀pitch电机的摆动范围(单位:rad)
- swing_elbow_scale:摆臂时肘关节电机的摆动范围(单位:rad)
- Q&P:Q为过程状态权重,P为终端状态权重(默认不启用), 内部 scaling 为缩放因子,将矩阵数据统一缩放, 权重的顺序为:归一化质心动量,基坐标位姿,关节位置
- R:R为控制权重矩阵,scaling为缩放因子,权重的顺序为: 三维接触点的接触力,六维接触点的接触力, 三维接触点相对躯干的摆动速度,手臂各关节速度
- enableZeroSixDofForceConstraint:布尔量,表示是否启用手臂末端零力约束
- frictionConeSoftConstraint:
- frictionCoefficient:摩擦锥约束中设置的摩擦系数
- mu:缩放因子,越大则约束惩罚程度越大
- delta:松弛屏障阈值,越小则越接近对数屏障
- basePitchLimits:表示对躯干 pitch 的 state-only 约束,限制 mrt 中 pitch 的角度和角速度的输出范围
- zeroVelocityConstraint:支撑相0速度约束,布尔量,是否启用软约束,约束支撑相零速度, 默认需要启用,硬约束求解难度较大
- softSwingTrajConstraint:摆动足的x-y方向跟踪软约束的权重
- selfCollision:自碰撞约束,可写入碰撞对,用于约束URDF中对应名称的连杆不可碰撞 ###### WBC相关参数设置
- torqueLimitsTask:全身各电机的扭矩约束,左右需对称,仅设置一组
- Wbc_rdd_K_:质心位置跟踪加速度任务的 kp/kd, stance 在双支撑阶段生效, walk 在之外的阶段生效
- frictionConeTask:frictionCoefficient,WBC 中摩擦锥约束的摩擦系数
- swingLegTask:摆动足跟踪加速度任务,kp/kd 表示z方向跟踪增益, kp/kd_xy 表示x-y方向跟踪增益, real 在实物中生效,sim 在仿真中生效
- baseAngularTask:躯干角度跟踪加速度任务,kp/kd 的顺序为 roll/pitch/yaw
- armAccelTask:手臂关节跟踪加速度任务,对应的各关节kp/kd
- weight:stance 在双支撑阶段生效,walk 在之外的阶段生效,若干参数表示各自任务对应的权重
状态估计相关的参数设置
kalmanFilter:
- footRadius:脚掌 z 方向的偏置,单位: m
- imuProcessNoisePosition:imu 估计位置的过程噪声协方差
- imuProcessNoiseVelocity:imu 估计速度的过程噪声协方差
- imuProcessNoiseZPosition:z方向 imu 估计位置的过程噪声
- imuProcessNoiseZVelocity:z方向 imu 估计速度的过程噪声
- footProcessNoisePosition:引入足端位置的过程噪声协方差
- footSensorNoisePosition:引入足端位置的测量噪声协方差
- footSensorNoiseVelocity:引入足端速度的测量噪声协方差
- footHeightSensorNoise:足端高度的测量噪声协方差 contactForceEsimation:
- cutoffFrequency:测量广义动量的截止频率
- contactThreshold:判断足端接触状态的z方向阈值
- detectCutoffFrequency:基于关节冲量的接触检测,对应滤波器的截止频率
- maxEnergyThreshold:基于关节冲量的接触检测,对应的一些阈值设置
- minEnergyThreshold:
- maxEnergyThreshold2:
- minEnergyThreshold2:
- time_treshold_:两次接触状态判断,之间的时间间隔阈值
json:
kuavo.json:
- model_path:用于计算初始化的下肢各关节逆解的模型路径
- model_with_arm_path:参与踝关节并联杆解算的模型路径
- end_frames_name:参与初始化逆解的躯干和下肢末端 在 URDF 中的 Link 名称
- ankle_solver_type:机器人使用的踝关节换算方法类型 (0为4代,1为4代pro,2为5代)
- torsoP:初始化时,期望的躯干pitch角度,单位:度
- com_z:初始化时,期望的质心z方向高度,单位:m
- StepWith:初始化时,脚掌中心距离躯干中心的y方向距离,单位:m
- torsoY:初始化时,期望的躯干yaw角度,单位:度
- imu_invert:IMU 的装配是否上下颠倒
- isParallelArm:是否使用并联杆手臂
- only_half_up_body:是否只启用上半身(头部+手臂)的控制
- MOTORS_TYPE:各关节的电机类型,需与实际电机数量匹配
- EndEffectorType:双臂的末端执行器类型
- min_joint_position_limits & max_joint_position_limits:各关节的上下限位角度,单位:度
- joint_velocity_limits:各关节的转速限幅,单位:度/秒
- end_frames_name_ik:手臂 IK 关联的模型中躯干,手掌,肘关节的连杆名称
- shoulder_frame_names:手臂 IK 关联的第一个关节连杆名称
- eef_visual_stl_files:仿真中可视化末端的模型文件名称
- upper_arm_length & lower_arm_length:VR 操作时,机器人的大臂和小臂长度
- motor_velocities_factor:头部电机速度期望的缩放因子