公司动态

四足机器马控制技术解析:从步态生成到人机共载系统

📅 2026/8/26 7:11:03
四足机器马控制技术解析:从步态生成到人机共载系统
四足机器马最近被关注不是因为“多了一条腿”而是因为它的操控方式发生了根本变化。DaxAI 展示的骐骥系列四足机器马最出圈的细节是可以坐上去像骑马一样通过身体重心、缰绳拉力来控制前进、转弯和停止。从公开演示看它想解决的问题不是“再做一个能跑的机械狗”而是如何让人和四足机器人发生身体级的深度交互。如果你把这个产品简单理解为“给机械狗套一个马鞍”那很容易低估背后的技术难度。传统四足机器人只有几十公斤的自重控制系统设计时可以把机体当成固定质量刚体来处理一旦把一名成年骑手的体重加到躯干上系统质量、质心位置、转动惯量全部发生变化原来能稳定用的步态控制器可能直接失效。也就是说可骑乘的四足机器马本质上把四足机器人从“自主移动平台”推进到了“人机共载动态系统”这个新的控制问题上。这篇文章会从四足机器人的系统架构讲起分析机器马和普通机械狗在控制层面的本质区别拆解它感知骑手意图的交互链路并用几个最小可复现的 Python 和 ROS 2 示例展示步态生成、重心估计和控制节点设计的核心思路最后梳理实际工程中容易踩的坑。1. 这篇文章真正要解决的问题先给一个明确判断四足机器马的技术价值不在机械结构而在于它改变了“人机交互”的控制闭环。我们回头看过去几年流行的四足机器人产品绝大多数还是遥控器或 App 控制的机械狗。操作者站在几米外通过摇杆下发前进、后退、转弯指令机器人自主完成步态切换。这种交互模式下人和机器人是分离的机器人只需要感知环境不需要感知人。但机器马的使用场景完全不同。骑手坐在机器人背上机器人的运动必须跟随人的意图实时变化。骑手左倾机器人要感知到左侧负载增加并提前规划转弯骑手拉缰绳机器人要明白这是减速还是停止信号骑手后仰机器人可能要调整步幅或切换成慢步态。这里存在一个传统四足机器人很少处理的难题系统参数随操作者变化而且是实时变化的。所以这篇文章要解决的核心问题是可骑乘的四足机器人与普通四足机器人控制难点到底差在哪里机器马如何感知骑手身体发出的控制指令并转化为步态规划四足步态生成、重心估计、控制节点设计这些底层技术如何用代码快速验证实际工程中哪些问题最容易导致机器马歪倒、打滑、失控怎么排查适合阅读这篇文章的读者包括正在做四足机器人开发的工程师、想把四足平台用于巡检或配送的技术选型人员、学习 ROS 2 与机器人运动控制的算法工程师以及对机器人行业趋势感兴趣的产品经理和开发者。2. 四足机器人核心概念与系统架构在进入具体分析之前先把四足机器人的基本组成梳理清楚。无论它是机械狗还是机器马硬件层都遵循同一个逻辑框架。2.1 四足机器人的基本组成一个典型的四足机器人从硬件上可以分为下面几个子系统躯干与腿部结构躯干是系统的主体承载结构电池、计算单元、传感器、交互设备都布置在躯干上。腿部结构通常采用每条腿 3 个或 4 个自由度最少也要 2 个自由度。常见的关节配置有两种髋关节加膝关节适合快速奔跑和跳跃但灵活性受限。髋关节摆转加膝关节能实现更多姿态调整适合复杂地形。机器马这类骑乘型产品腿部通常会强化承重设计关节电机选型时不以最大速度为主要指标而是以额定扭矩和安全冗余优先。驱动与传动系统四足机器人的核心动力来自伺服电机和减速器。关节电机需要满足高扭矩密度、高响应速度、低自重这三个要求。近年来很多国产四足机器人项目采用无框力矩电机加谐波减速器的方案比较适合需要频繁正反转和大力矩输出的腿部关节。感知系统感知层包括本体感知和环境感知两部分本体感知IMU惯性测量单元测量机器人躯干的角速度和加速度关节编码器测量各关节角度足端力传感器或电流检测用于判断腿与地面的接触状态。环境感知深度相机、激光雷达用于地形感知、障碍物检测和落足点规划。机器马在户外场景下对地形感知的要求比室内机械狗更高因为骑乘状态下如果踩到坑或者凸起系统会直接受到地面反作用力冲击。计算与通信系统计算单元负责运行状态估计、步态规划、平衡控制和交互决策。常见方案是工控机加 MCU 的异构架构工控机运行高层的感知和规划算法MCU 负责关节电机的实时控制。通信总线常用 EtherCAT 或 CAN。2.2 四足机器人的软件架构软件层面的架构可以分成四层层级职责涉及算法或模块感知层获取环境和本体数据IMU 姿态解算、视觉 SLAM、地形识别状态估计层推算机器人当前状态扩展卡尔曼滤波、状态估计器决策规划层生成运动目标和步态序列步态规划、路径规划、避障运动控制层计算关节力矩并保持稳定MPC、WBC 或虚拟模型控制理解这个分层模型对后续调试很有帮助。很多初学者调试四足机器人时先怀疑步态算法有问题其实问题往往出在状态估计层——IMU 数据滤波没有调好导致姿态角度漂移上层算法拿到的状态就是错的自然不可能稳定行走。3. 机器马和普通机器狗的本质区别可骑乘带来的控制挑战四足机器人和四足机器马在机械结构上确实高度相似都是四条腿、一个躯干。但一旦允许人骑乘上去控制问题就不是“放大一版”那么简单而是出现了几个量级的变化。3.1 系统质量与质心动态变化普通机械狗在正常工作状态下负载是固定的。机器人运行前控制算法知道系统总质量、质心位置和转动惯量这些参数在运动过程中基本不变。控制器可以提前计算好每个时刻需要的关节力矩。但机器马骑行状态下骑手的体重会突然叠加到机器人躯干上而且骑手不是静止的。他会在马背上左右移动、前后倾斜导致机器人的总质量中心和转动惯量实时变化。更麻烦的是骑手本身不是刚性连接到机器人上的他是一个会主动摆动的“软负载”默认参数下控制器的状态空间模型完全不成立。从控制系统角度看这是一个典型的变参数、变干扰系统。如果控制器参数保守机器人的响应速度会变慢骑手会觉得机器马“反应迟钝”如果控制器参数过于激进又很容易因为微小干扰引发震荡。3.2 平衡控制的扰动边界变大四足机器人稳定行走的底层逻辑本质上是在支撑腿构成的支撑多边形内控制机器人的零力矩点。传统机械狗在平地上行走时躯干扰动幅度很小控制器有一定的裕量处理外部扰动。骑乘状态下扰动源有两个环境扰动地面不平、坡度变化、路面打滑。人为扰动骑手重心变化、缰绳拉扯、身体突然侧倾。这两个扰动叠加起来会让机器马的零力矩点频繁逼近支撑多边形边界。控制器必须比普通机械狗更早、更快地调整腿部支撑力和落足点才能保持稳定。3.3 交互层成为新的控制闭环入口普通机械狗的控制入口是遥控器机器人把速度指令和转向指令直接交给步态规划器。机器马则多了一层“人机交互”闭环机器人必须实时估计骑手的重心和发力动作再把这些信息转换成运动意图。这一点直接决定了机器马的架构设计。传统四足机器人不需要在躯干上集成压力传感器矩阵不需要给缰绳加力传感器也不需要专门设计“重心偏移—转向意图”的映射算法。这些新增硬件和算法才是机器马区别于普通四足机器人的核心增量。4. 机器马如何感知骑手意图交互与控制原理拆解从交互原理看可骑乘四足机器马想实现的目标是让骑手获得接近真实马匹的操控体验。真实骑马时骑手主要通过缰绳、腿部压力、身体重心和声音与马沟通。机器马要复刻这个过程需要解决“感知”和“映射”两个问题。4.1 骑手意图感知的硬件基础机器马感知骑手意图主要依赖以下几类传感器座位区压力传感器这是最核心的意图输入源。普通马鞍形状的座位下会布置多个压力传感单元覆盖前后和左右区域。当骑手重心前移时座位前方压力增大重心左移时左侧压力增大。通过压力分布的变化系统可以估算骑手的身体倾斜方向和程度。工程实现上压力传感器的采样频率不需要太高50 到 100 赫兹足够因为人体重心变化的频率通常在 1 赫兹以内。但数据滤波非常重要压力信号本身含有很多高频噪声如果不做低通滤波很容易把骑手正常的身体微调误判为转向指令。缰绳力传感器缰绳不是装饰品。机器马的缰绳内部嵌入拉力传感器或编码器用于检测骑手拉绳的力度和方向。比如双手同时向后拉绳系统判断为减速或停止左侧拉绳判断为左转意图。力传感器信号和座垫压力信号融合后可以通过逻辑判断确定骑手的控制意图。IMU 与视觉传感器IMU 主要感知机器人自身的姿态变化但也可以配合压力传感器判断骑手是否在座位上做大幅度移动。视觉传感器则用于感知外部环境比如前方有障碍物时机器人要提前减速或者改变落足点这属于环境感知层面而不是骑手交互层面。4.2 意图到运动指令的映射规则传感器采集到的原始数据需要经过一个映射层才能变成步态控制指令。这个映射层通常是一组带优先级的状态机输入检测方式映射结果座垫压力整体前移压力中心前移加速或进入中速步态座垫压力整体后移压力中心后移减速左右压力不均衡压力中心横向偏移转向双腿夹紧马背两侧压力同时增大切换为快速步态缰绳双拉拉力传感器信号停止或急停这里的关键是映射规则要设置合理的阈值和死区。因为人的身体控制精度有限骑行过程中身体会有轻微晃动不可能像摇杆一样精确输出。如果死区设置得太小机器人会对骑手无意识的微小动作过度反应如果死区太大又会让人觉得操控迟钝。4.3 传感器融合与安全兜底单一传感器的判断不可靠因此实际工程中一般会使用扩展卡尔曼滤波或互补滤波将 IMU、压力传感器和腿部关节角数据进行融合共同估计骑手的重心位置和机器人的运动状态。安全兜底逻辑也必不可少。例如当系统检测到骑手重心已经严重超出安全范围机器人不是继续执行步态命令而是主动进入“支撑保持”模式——四腿同时下压降低重心尽量防止倾倒。这个逻辑和工业机器人的安全急停一样属于最高优先级。5. 用最小 Python 示例理解四足步态生成与骑乘重心估算前面分析了概念和原理这部分进入代码层面。这里提供的不是 DaxAI 的实际源码而是帮助理解四足机器人步态组织和机器马重心感知原理的最小示例。5.1 四足小跑步态生成相位偏移与支撑相四足机器人的运动本质上是对四条腿的“支撑相”和“摆动相”进行编排。支撑相是指腿接触地面、提供推力的阶段摆动相是指腿离开地面、向前摆动的阶段。不同的步态就是在时间上让四条腿按不同相位偏移交替进入支撑相和摆动相。小跑步态的特点是两条对角腿同时支撑另外两条对角腿同时摆动这样可以保持较高的稳定性。下面用 Python 实现一个简化的四足小跑步态相位生成器以打印每条腿在不同时刻的支撑状态。# 文件路径gait_sim.py # 功能复现四足小跑步态的相位关系与接触状态 import numpy as np LEG_LIST [FL, FR, HL, HR] # 前左、前右、后左、后右 # 小跑步态的相位偏移对角腿同步 TROT_PHASE { FL: 0.0, HR: 0.0, FR: 0.5, HL: 0.5, } def swing_phase(t, cycle_time, phase_offset): 计算某条腿在一个步态周期内的相位进度范围 0~1 return (t / cycle_time phase_offset) % 1.0 def is_swing(t, cycle_time, phase_offset, duty0.5): 判断一条腿是否处于摆动相duty 表示摆动相占整个周期的比例 return swing_phase(t, cycle_time, phase_offset) duty def main(): cycle_time 0.8 # 步态周期单位秒 dt 0.01 total_time 2.0 n_step int(total_time / dt) print(时间, 四条腿接触状态(1支撑, 0摆动)) for i in range(n_step): t i * dt contact { leg: 0 if is_swing(t, cycle_time, TROT_PHASE[leg]) else 1 for leg in LEG_LIST } if i % 50 0: state_str , .join(f{leg}{contact[leg]} for leg in LEG_LIST) print(ft{t:.2f}s, {state_str}) if __name__ __main__: main()运行这段代码你会看到在对角腿同步的相位关系下FL 和 HR 两条腿总是同时处于相同状态FR 和 HL 也同步但两组之间相差半个周期。这就是四足小跑步态的核心编排逻辑。把这个状态输出交给底层关节控制器机器人就能以四条腿交替支撑和摆动的方式向前运动。需要说明的是真实四足机器人不会直接用这种逻辑算出占空比就去驱动关节它还需要结合地面反作用力、速度指令和姿态误差实时调整步高和步幅。但这个例子足以说明步态规划中最关键的相位关系。5.2 机器马骑乘重心估算足端压力加权机器马感知骑手意图的一个直观方法是通过四条腿的受力分布来估算躯干上负载的重心投影位置。这个逻辑类似测量身体重心偏移如果骑手左倾左边两条腿承受的压力会增加整体重心投影会向左偏移。下面的代码演示如何根据四条腿的足端位置和垂直受力估算躯干上综合压力中心的位置。# 文件路径load_center_estimation.py # 功能根据四腿受力估算躯干上负载的压力中心 import numpy as np # 四条腿的足端位置以机器人躯干中心为原点单位米 FOOT_POSITIONS { FL: np.array([0.25, 0.18, 0.0]), FR: np.array([0.25, -0.18, 0.0]), HL: np.array([-0.25, 0.18, 0.0]), HR: np.array([-0.25, -0.18, 0.0]), } def estimate_cop(fz: dict): 输入 fz 为每条腿的垂直受力例如 {FL: 120.0, FR: 120.0, HL: 100.0, HR: 100.0} 返回压力中心在躯干平面上的 x、y 坐标 total sum(fz.values()) if total 1e-6: return np.array([0.0, 0.0]) cop np.zeros(3) for leg, force in fz.items(): cop cop force * FOOT_POSITIONS[leg] return cop / total if __name__ __main__: # 模拟骑手重心前移且略微偏左时的受力情况 fz_left {FL: 140.0, FR: 90.0, HL: 120.0, HR: 70.0} cop estimate_cop(fz_left) print(f压力中心位置: x{cop[0]:.3f}m, y{cop[1]:.3f}m)运行后压力中心会向前和向左偏移。这个偏移量就是上一节提到的“映射规则”的原始输入。真实机器马会把压力中心的横向偏移量映射成转向角速度把纵向偏移量映射成加速或减速指令。从工程角度看这里要特别注意噪声处理。足端力传感器或电流估算的受力数据往往带有振动噪声直接计算压力中心容易产生高频抖动。通常会在计算前先对四路受力数据做滑动平均或低通滤波再用差分逻辑判断骑手的动作趋势而不是直接用单帧压力中心数据驱动控制。6. 从仿真到实物ROS 2 控制节点设计骨架四足机器人和机器马在实际项目中通常使用 ROS 2 作为软件框架。ROS 2 的价值在于它提供了标准化的节点通信机制可以比较方便地把感知节点、状态估计节点、步态规划节点和执行节点连接起来。下面是一个机器马控制节点的简化骨架它订阅机器人状态的传感器话题周期性发布关节目标状态。节点内包含步态相位计算、压力中心估算和基本的安全检查逻辑。# 文件路径src/machine_horse_control/machine_horse_control/control_node.py import rclpy from rclpy.node import Node from std_msgs.msg import Float32MultiArray from sensor_msgs.msg import JointState class MachineHorseControlNode(Node): def __init__(self): super().__init__(machine_horse_control) self.joint_pub self.create_publisher( JointState, /cmd_joint_states, 10 ) self.load_sub self.create_subscription( Float32MultiArray, /foot_pressure, self.pressure_callback, 10 ) self.create_timer(0.02, self.control_loop) self.pressure_data [0.0, 0.0, 0.0, 0.0] def pressure_callback(self, msg: Float32MultiArray): self.pressure_data list(msg.data) def compute_center_of_pressure(self): # 简化计算四路压力加权平均得到重心偏移 left_sum self.pressure_data[0] self.pressure_data[2] right_sum self.pressure_data[1] self.pressure_data[3] total left_sum right_sum if total 1e-6: return 0.0 return (left_sum - right_sum) / total def control_loop(self): offset self.compute_center_of_pressure() # 根据重心偏移计算目标速度并生成简单的关节目标 speed 0.2 abs(offset) * 0.5 msg JointState() msg.header.stamp self.get_clock().now().to_msg() msg.name [ FL_hip_joint, FL_knee_joint, FR_hip_joint, FR_knee_joint, HL_hip_joint, HL_knee_joint, HR_hip_joint, HR_knee_joint, ] # 这里只是一个示例实际工程需要根据运动学逆解计算关节角 msg.position [0.0, speed, 0.0, speed, 0.0, speed, 0.0, speed] msg.velocity [0.0] * 8 msg.effort [0.0] * 8 self.joint_pub.publish(msg) self.get_logger().debug( fpressure offset: {offset:.3f}, target speed: {speed:.2f}, throttle_duration_sec1.0 ) def main(argsNone): rclpy.init(argsargs) node MachineHorseControlNode() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ __main__: main()这段代码不是完整的控制算法它展示的是 ROS 2 控制节点应该具备的几个关键要素订阅压力传感器数据。在控制循环里计算重心偏移。把偏移量映射成运动目标。发布关节目标状态。真实工程中你这个节点发布的不应该是关节位置而应该是底层步态规划器接受的质心速度、转向角速度和高度指令。关节控制器一般会单独放在另一个高实时性的 MCU 节点中由它完成运动学逆解和电流环控制。运行和验证方式如下# 安装依赖后编译工作空间并运行节点 cd ~/ros2_ws colcon build --packages-select machine_horse_control source install/setup.bash ros2 run machine_horse_control control_node启动后如果能看到控制节点周期性发布JointState话题的消息并且在发布压力数据时日志中的pressure offset数值随之变化说明节点已经正常跑通。判断成功的标准不是机器人走起来而是“反馈链路”和“控制链路”形成了闭环。7. 常见问题与排查思路四足机器人和机器马这类产品排错难度比普通移动机器人高很多因为问题往往不是单一原因导致的而是多个模块一起出错。下面整理了一些常见问题和排查思路。问题现象可能原因排查方式解决方案站立时频繁前后摆动姿态估计噪声过大或重心估计滞后打印 IMU 角度和压力中心数据观察是否波动加大低通滤波平滑系数校准姿态传感器骑行转向时反应迟钝压力中心映射阈值过大查看压力偏移量与转向指令比值调整映射增益缩小死区范围小跑时出现异常颠簸步态切换不平滑关节速度突变检查关节目标位置是否出现跳变在步态切换时加入轨迹插值或五次多项式过渡下坡时容易向前倾倒重力前向分量补偿不足查看前腿力矩是否饱和增加前腿支撑力和躯干俯仰角前馈补偿关节电机发热严重长期工作在力矩饱和区查看关节电流曲线提高机械结构刚度修改步态周期或调整 MPC 权重压力传感器信号抖动剧烈传感器安装松动或信号未滤波查看原始压力波形检查机械连接重新固定传感器增加滤波或使用均值采样一个值得反复强调的排查原则是先确认感知层数据真实可靠再追究控制算法问题。大多数四足项目调试时最终发现根源都在“状态估计算错了”或者“传感器数据噪声太大”而不是步态规划算法本身有问题。8. 工程落地建议与后续学习方向从能演示的机器马到稳定落地的产品中间还有很多工程问题需要解决。这里给出几条实际项目中的建议。8.1 先做好仿真环境再加码硬件四足机器人开发不建议直接上真实机器调试。成本高、风险大而且摔倒一次就可能损坏关节电机或结构件。仿真是更安全的起点建议先用 Gazebo 搭配 ROS 2 搭建四足机器人仿真模型验证步态规划逻辑和控制算法。仿真环境里可以随意测试不同步态参数、不同地形条件不会造成硬件损失。选择仿真平台时优先考虑生态成熟、资料丰富的方案。Gazebo 配合四足机器人 URDF 模型是比较常见的组合重要的是模型质量要接近真实机器人的运动学、动力学参数。8.2 交互与控制分离设计机器马的控制架构最好把“交互意图识别”和“运动控制”拆成两个独立模块。交互模块负责判断骑手想做什么输出语义化的运动指令比如“前进”“左转”“停止”运动控制模块只负责执行这些指令不关心指令来自骑手还是遥控器。这样的好处是每个模块都可以单独测试和调试后续如果想增加 App 遥控、语音控制等交互方式只需要扩展交互模块不影响运动控制逻辑。8.3 安全机制要独立于控制算法可骑乘四足机器人的安全机制不能只依赖运动控制算法。需要建立独立的硬件急停通道和软件安全监控层。当检测到躯干倾斜角超过阈值、关节执行器饱和过久、或骑手重心严重偏移时安全层应该优先接管系统强制进入缓慢蹲下或四腿支撑保持状态。这个安全层要和正常控制链路分离。它不能接收步态规划器的指令否则一旦规划算法出问题安全层也会跟着失效。硬件急停按钮要保留骑手和地面操作员都可以触发。8.4 传感器标定与数据同步机器马的交互控制对传感器标定要求很高。压力传感器安装后的零漂、非线性、灵敏度不一致都会直接影响重心估计。工程上需要在每次开机后做自动标定骑手先上马并保持静止机器人记录当前压力分布作为基准平衡点然后再开始运动控制。这个“动态零点校准”能显著改善后续的交互体验。另外要注意传感器数据的时间同步问题。IMU 数据、足端压力数据和关节编码器数据来自不同设备如果时间戳不一致状态估计就会存在延迟直接影响平衡控制的稳定性。8.5 后续学习方向这篇文章覆盖了四足机器马的基础架构、交互原理和核心代码思路。如果希望深入学习推荐按下面几个方向展开运动控制方向学习模型预测控制和全身控制理解四足机器人如何在复杂地形上保持稳定。仿真方向搭建 Gazebo 四足机器人仿真环境把本文的步态逻辑复现到仿真模型中。机器人定位方向研究四足机器人在户外环境中的视觉定位和地形感知解决落足点规划问题。人机交互方向研究柔性力传感器布局、人体姿态估计和意图推理让交互体验更自然。9. 总结回到开头的问题DaxAI 展示的骐骥系列四足机器马为什么值得关注因为它把四足机器人的控制目标从“自主稳定运动”扩展到了“人机共载动态交互”。这不是简单的机械结构改造而是感知、控制、安全策略都要重新设计的系统性问题。本文梳理了四足机器马的核心架构、可骑乘控制的难点、骑手意图感知原理并给出了步态相位生成、压力中心估算和 ROS 2 控制节点骨架三个最小示例。对于想进入四足机器人方向的学习者建议从仿真起步先跑通步态逻辑再逐步接触真实硬件。真正的工程难度往往藏在那些看起来简单的细节里压力传感器噪声、骑行重心偏移、步态切换过渡、安全兜底逻辑。把这些细节处理好四足机器马才能真正从演示产品变成可靠的工具或体验产品。