ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从步态相位到足地支撑:四足机器人对角线小跑的 Modelica 建模与仿真分析

从步态相位到足地支撑:四足机器人对角线小跑的 Modelica 建模与仿真分析 第一次接触四足机器人步态时我最困惑的并不是“让四条腿动起来”而是怎样判断一套关节命令真的形成了对角支撑左前腿抬起时究竟是哪两条腿在承受机身足端反力是否与相位切换一致机身又会不会在接触切换时持续下沉。为了把这些问题放在同一个模型里观察我检索了“Modelica 四足机器人 trot 足地接触”等关键词在 MoHub 的案例页发现了 QuadrupedRobot完整地址在这里https://mohub.net/model/26065/summary。这个案例没有一开始就堆叠复杂控制算法而是把自由机身、四条两自由度机械腿、足地接触和对角小跑发生器放进一个可追踪的数据链路中。下面按实际模型文件和保留的仿真结果记录梳理一次从加载到看结果的过程。先把问题缩小这个模型验证什么顶层入口是 QuadrupedRobot.Examples.QuadrupedTrotDemo。模型的目标是在重力沿 -z 方向的水平地面上按对角线小跑方式驱动四条腿左前 LF 与右后 RH 同相右前 RF 与左后 LH 同相两组相差 180°。输入是步态周期、名义步长、抬腿高度、机身和腿部几何/质量参数以及接触刚度、阻尼和摩擦参数输出可以从机身位置、关节命令和四个足端法向力中读取。图1QuadrupedTrotDemo 顶层模型结构从适用范围看它适合做步态相位、足地接触和机身响应之间的联合验证。例如学习 MultiBody 建模时可以据此理解自由刚体、转动副和世界坐标系的连接方式做步态原型时可以先扫查 gaitPeriod、stepLength、liftHeight 对支撑切换的影响做接触参数敏感性分析时可以观察接触刚度、阻尼与摩擦系数如何改变法向力波形。它不适合直接证明实机的能耗、复杂地形通过性、结构强度或闭环抗扰稳定性因为模型采用开环关节位置命令、水平地面和简化接触力。如何运行并查看同一组量运行时先加载案例根目录的 package.mo再打开顶层模型 QuadrupedRobot.Examples.QuadrupedTrotDemo。模型依赖 Modelica 多体动力学组件顶层 experiment 标注给出了 0—60 s 的仿真区间、0.01 s 输出间隔和 1e-5 容差实验设置记录中的求解算法为 Dassl。按这个设置运行后60 s 对应 6001 个输出时刻。我建议不要一开始就把所有变量都摊开。第一组先看 robotBody.body.r_0[1] 与 robotBody.body.r_0[3]分别对应机身 x 向位置和 z 向位置第二组看 controller.hipLF、controller.hipRF、controller.kneeLF、controller.kneeRF第三组看 contactLF.normalForce、contactRF.normalForce、contactLH.normalForce、contactRH.normalForce。这样能沿着“命令—接触—机身响应”的顺序判断而不是只凭动画印象判断步态。对角小跑命令是怎样生成的控制器 TrotGaitController 的核心不是优化器而是两组相差 π 的周期相位thetaA 2πt / gaitPeriodthetaB thetaA π。对 A 组LF 与 RH 共用髋、膝命令对 B 组RF 与 LH 共用另一组命令。髋关节命令围绕 hipNeutral 做正弦摆动摆幅由 stepLength/(2*thighLength) 决定。膝关节则把正弦信号拆成两个半波正半波作为摆动相抬腿量负半波作为支撑相的小幅伸展量。因此抬腿高度通过 liftHeight/shankLength 进入膝关节摆动幅值而不是直接指定足端轨迹。按默认参数gaitPeriod1.0 s、stepLength0.10 m、liftHeight0.045 m、thighLengthshankLength0.28 m。因此髋关节摆幅为约 0.1786 rad膝关节摆动相附加幅值约 0.1607 rad。下面这张图由控制器文件中的同一公式计算横轴为 0—2 s 时间、纵轴为关节命令角度rad蓝色和红色分别是两组髋关节命令绿色和品红色分别是两组膝关节命令。图2TrotGaitController 输出命令的两周期曲线足地作用由 FootGroundContact 完成。模型先用足端世界坐标的 z 分量计算穿透深度只有足底低于地面时才接触。法向力是“接触刚度×穿透深度 接触阻尼×压入速度”的非负截断值x、y 向摩擦力再按 -μ×normalForce×tanh(v/slipVelocity) 计算。tanh 让零速度附近的摩擦过渡平滑避免理想库仑摩擦的突变给数值积分带来额外困难。从结果中看到的三件事第一机身确实在前进但不应把这理解为实机速度指标。保留的 60 s 仿真记录中robotBody.body.r_0[1] 从 0 m 增加到约 3.7768 mrobotBody.body.r_0[3] 在约 0.5597—0.5735 m 之间变化结束时约为 0.5702 m。也就是说在这组开环命令和接触参数下模型没有出现持续下沉或明显的竖直发散但仍存在由落足、支撑转换引起的高度起伏。第二关节命令的相位关系真正传递到了支撑关系。controller.hipLF 与 controller.hipRF 的范围都约为 -0.8686—-0.5114 rad两组膝关节命令约为 1.3000—1.5407 rad。由于两组相差半个周期10.25 s 时 LF/RH 处于摆动抬腿侧而 RF/LH 处于支撑侧到 10.75 s关系反转。这里最值得检查的不是“曲线是否漂亮”而是命令切换后足端力是否同步切换。第三法向力给出了更直接的证据。10.25 s 时contactRF.normalForce 约为 73.61 N、contactLH.normalForce 约为 31.52 NLF 与 RH 接近离地10.75 s 时contactLF.normalForce 约为 73.63 N、contactRH.normalForce 约为 31.53 NRF 与 LH 转入摆动。两次支撑腿法向力之和都约为 105 N。模型总质量由 8 kg 机身、四条腿的两段 0.36 kg 杆件和 0.08 kg 足端组成约为 11.2 kg支撑力总和与重力水平接近而并不恒等这与机身竖直加速度和接触阻尼共同作用相符。单足法向力全程峰值约为 133—151 N。这个数值可以帮助定位接触冲击较大的时段却不能直接当作实机结构载荷模型没有执行器动力学、柔性结构、传感器噪声和不平地形接触刚度与阻尼也属于简化参数。若要继续扩展我会先加入关节力矩限制和机身姿态反馈再逐步替换为更接近目标场地的地形与接触模型。用这个模型继续排查什么如果只是修改一个参数我会优先比较三个变量组而不是只看位移终值。减小 gaitPeriod 后先检查四个 normalForce 的峰值和切换时刻是否更密集增大 stepLength 后检查髋关节摆幅与 x 向位移是否同步增大以及是否引起 z 向波动放大增大 liftHeight 后检查摆动相膝角是否增加、足端是否减少拖地。接触刚度和阻尼则应成对调整刚度升高会减少穿透但也可能放大数值上的落足冲击阻尼过小容易出现回弹过大又会改变接触转换的瞬态。这些比较都应以同一仿真时长、同一组输出变量为前提才不会把参数变化和观察窗口变化混在一起。结语这次复现让我更明确地看到对角小跑不是“对角腿同时摆动”这么简单需要先在命令层建立半周期错相再通过足地接触把相位关系转换成轮换的法向支撑最后用机身位置检查这种支撑是否带来连续前进和可控的高度变化。对于想从多体动力学视角读懂四足步态的人这个案例提供了一个边界清晰的起点。
返回列表