wb_humanoid_mpc
实时全身人形运动规划与控制:质心 MPC + 全身 MPC 双方案,基于 ROS2 + Pinocc
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
实时全身人形运动规划与控制:质心 MPC + 全身 MPC 双方案,基于 ROS2 + Pinocc
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你让人形机器人「走向桌子拿起水杯」——这对人类而言是再平常不过的动作,但机器人完成它需要在毫秒级别内同时解决上百个非线性约束:脚掌与地面的摩擦力上限、关节力矩的安全边界、质心投影落在支撑多边形内、身体避免与环境碰撞……
传统的人形机器人控制通常是「分层」的:步态规划器先生成一组参考轨迹,逆运动学模块再转化为关节角度,最后低层控制器负责跟踪。这种架构的问题是:每一层的误差都会累积到下一层,而且无法处理跨越规划与控制边界的约束——比如「边走路边抬手」这类 loco-manipulation 任务,传统的分层架构很难优雅地解决。
Whole-Body Humanoid MPC(全身人形模型预测控制) 所做的,就是把这一切都纳入同一个优化框架,用数学规划一次性给出全身的最优动作方案。
该项目由机器人学研究者 Manuel Yves Galliker 创建,他在 1X Technologies 工作期间主持开发了这套人形 MPC 系统。1X Technologies 是一家专注于人形机器人商业化的挪威公司,其 Neo 机器人已在实际场景中部署——这意味着 Galliker 的工作不是学术玩票,而是从真实产品需求中抽象出来的工程实现。
2024年,Galliker 将该项目正式开源,同时发布了其对 ocs2 的扩展版本 ocs2_ros2。ocs2(Optimal Control for Switched Systems)是苏黎世理工 leggedrobotics 实验室的标志性框架,但原始版本主要面向四足机器人和工业机械臂。Galliker 的工作将 ocs2 扩展到人形机器人领域,并在 ROS2 Humble/Jazzy 环境下完成了完整的集成适配。
项目包含两套并行的 MPC 控制器:
质心动力学 MPC(Centroidal Dynamics MPC) 是计算友好的方案。它将全身质量简化为质点加惯性张量,优化的变量是质心位置/速度和躯干姿态。这种近似在大多数行走场景下足够精确,计算量可控,适合高频率(数百Hz)控制的人形步态生成。理论基础见 Sleiman et al., ICRA 2021 提出的统一 MPC 框架。
全身动力学 MPC(Whole-Body Dynamics MPC) 是更精细的方案。它在关节加速度层面进行优化,同时考虑接触力分配和逆动力学约束。可以生成更精细的动作(弯腰、侧身、跨越障碍时的全身协调),代价是计算量更大。理论基础见 Galliker et al., Bipedal Locomotion with Nonlinear MPC(Caltech)。
两者的共同底层依赖:
项目采用 ROS2 colcon 工作空间组织,分为三个顶层包:
humanoid_nmpc(控制器核心):包含 humanoid_centroidal_mpc(质心MPC)、humanoid_wb_mpc(全身MPC)、humanoid_common_mpc(共享库)、humanoid_common_mpc_pyutils(Python工具)和 humanoid_common_mpc_ros2(ROS2接口)。加上针对 Unitree G1 的 ROS2 封装包 humanoid_centroidal_mpc_ros2 和 humanoid_wb_mpc_ros2。remote_control 包提供 Xbox 手柄和 GUI 交互界面。
robot_models(机器人模型):存放 URDF 描述文件。目前支持 Unitree G1,1X Neo 即将加入。
robot_runtime(运行时与仿真):负责与仿真器通信,接收 MPC 输出的关节指令并下发。
Docker 方式(推荐):克隆仓库后,用 VS Code Dev Containers 或提供的 bash 脚本构建 Docker 镜像并启动容器:
git clone https://github.com/1x-technologies/wb-humanoid-mpc.git
cd wb-humanoid-mpc/docker
./image_build.bash && ./launch_wb_mpc.bash
make build-all
本地方式:需预先安装 ROS2 Jazzy(或 Humble),通过以下命令安装系统依赖:
envsubst < dependencies.txt | xargs sudo apt install -y
make build-all
⚠️ 首次编译会触发 CasADi 自动微分代码生成,耗时 5-15 分钟。RAM 需求:默认2并行需16GiB,4并行需32GiB,6并行需64GiB。
运行仿真:
# 质心 MPC(适合步行)
make launch-g1-dummy-sim
# 全身 MPC(适合 loco-manipulation)
make launch-wb-g1-dummy-sim
启动后自动弹出 RViz 可视化窗口和交互控制器 GUI,支持 Xbox 手柄或 GUI 滑块实时控制机器人基座速度(前后/左右/转向)和高度。
这是一个严肃的机器人工程工具,需要扎实的机器人学基础(刚体动力学、接触力学)、理解 MPC 原理(有限时域优化、约束处理)、熟练使用 Linux 和 ROS2。RAM 16GB 起步,推荐 32GB+。GPU 不需要,全部计算在 CPU 完成。
目前支持的实体机器人只有 Unitree G1。从能力边界看:该项目是纯运动控制层,不包含感知、任务级规划或强化学习组件。它解决的是「给定目标,机器人怎么动」的问题,而非「目标是什么」的问题。
开源全身 MPC 的项目在学术界和工业界都极度稀缺。苏黎世理工的 ocs2 是最接近的标杆,但它面向四足机器人设计,对人形机器人的适配缺乏端到端参考。
Galliker 的项目填补了这一空白:两套方案并存让研究者可以直接对比质心和全身两种思路的优劣;ROS2 原生集成解决了学术代码难以复现的问题;1X Technologies 的商业化背景保证了代码的工程成熟度;ocs2_ros2、Pinocchio、HPIPM 的版本都经过兼容性验证。
随着 Figure、1X、宇树等公司的人形机器人逐步商业化,wb_humanoid_mpc 有望成为人形机器人社区的事实标准控制器基座之一。