本文档为补充工程说明文档
涵盖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:头部电机速度期望的缩放因子