OCS2实战:Unitree A1/Go1 MPC控制从环境配置到动态行走
1. 环境准备与依赖安装四足机器人控制开发的第一步就是搭建合适的环境。我花了整整两周时间才把OCS2框架在Ubuntu 20.04上完美运行起来期间踩了不少坑。这里分享一个已验证可用的环境配置方案。首先确保你的系统已经安装ROS Noetic完整版。我建议使用纯净的Ubuntu 20.04系统开始避免与其他ROS版本冲突。安装完基础系统后按这个顺序安装依赖sudo apt-get install -y build-essential cmake git libeigen3-dev libboost-all-devOCS2需要特定版本的raisimLib这个依赖项经常被忽略。我实测发现直接从源码编译最可靠git clone --recursive https://github.com/leggedrobotics/raisimLib.git cd raisimLib mkdir build cd build cmake .. -DRAISIM_EXAMPLEON -DRAISIM_PYON make -j8 sudo make install安装完成后记得配置环境变量。很多同学在这一步出错导致后续找不到库文件。这是我的.bashrc配置片段export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/local/lib export PYTHONPATH$PYTHONPATH:/usr/local/lib对于Unitree机器人还需要单独安装官方的unitree_legged_sdk。这个SDK的版本要和你的机器人固件匹配我用的A1对应v3.2版本。安装时注意要给执行权限chmod x install.sh ./install.sh2. OCS2框架部署与配置OCS2的安装比想象中复杂官方文档有些步骤没说清楚。我推荐使用catkin工具来管理整个工作空间这样能避免很多路径问题。先创建工作空间并克隆必要仓库mkdir -p ~/ocs2_ws/src cd ~/ocs2_ws/src git clone https://github.com/leggedrobotics/ocs2.git git clone https://github.com/qiayuanl/legged_control.git编译时有个关键技巧使用-DCMAKE_BUILD_TYPERelWithDebInfo选项。这样既能获得较好的性能又保留调试信息cd ~/ocs2_ws catkin_make -DCMAKE_BUILD_TYPERelWithDebInfo配置机器人类型的环境变量很重要这个决定了后续加载的模型文件。对于A1和Go1需要分别设置# 对于A1机器人 export ROBOT_TYPEa1 # 对于Go1机器人 export ROBOT_TYPEgo1我建议把这行加到.bashrc里这样每次打开终端都会自动设置。注意不要同时设置两个变量会导致模型加载错误。3. ROS控制器加载与调试一切准备就绪后就可以启动ROS节点了。这里有个标准启动流程我总结出了一个可靠的三步法首先启动roscoreroscore在新的终端加载机器人模型roslaunch legged_unitree_description empty_world.launch最后加载控制器roslaunch legged_controllers load_controller.launch cheater:false启动rqt工具时我发现一个常见问题插件找不到。这是因为环境变量没设置好。确保在启动rqt前source了工作空间source ~/ocs2_ws/devel/setup.bash rqt在rqt界面中需要按特定顺序加载插件先添加Controller Manager然后加入Joint State Controller最后加入Velocity Command插件这个顺序不能错否则控制器无法正常工作。我第一次尝试时就因为顺序不对导致机器人关节乱抖。4. MPC动态行走实现最激动人心的部分来了——让机器人真正走起来OCS2的MPC控制器提供了两种控制方式我都详细测试过。速度指令控制法在rqt中激活legged_controller打开Velocity Command插件的滑块从0.1m/s的小速度开始测试逐渐增加速度值观察机器人步态导航点控制法先将速度指令归零在RViz中添加2D Nav Goal工具在地面上点击目标位置机器人会自动规划路径并行走实测发现A1机器人的最大稳定行走速度约1.5m/sGo1能达到2.0m/s。超过这个速度MPC控制器就会开始出现不稳定现象。步态参数调整是个精细活我摸索出几个关键经验步幅(stance duration)设置在0.25-0.35秒最稳定摆动高度(swing height)不要超过8cm躯干高度(torso height)影响稳定性A1建议0.35m5. 常见问题排查在调试过程中我遇到过各种奇怪的问题这里分享几个典型案例问题1控制器加载失败现象终端报Failed to load controller 解决方法检查环境变量ROBOT_TYPE是否设置正确确认legged_control包编译无误重新source工作空间问题2机器人模型显示异常现象RViz中机器人模型扭曲或缺失 解决方法检查empty_world.launch是否正常运行确认URDF文件路径正确查看终端是否有加载错误问题3MPC控制不稳定现象机器人行走时摇晃或跌倒 解决方法降低行走速度调整MPC权重参数检查地面摩擦系数设置记得每次修改参数后都要重启控制器才能生效。我开发时写了个快捷脚本来自动化这个过程#!/bin/bash pkill -f roslaunch sleep 1 roslaunch legged_controllers load_controller.launch cheater:false6. 进阶技巧与优化经过两个月的实际项目打磨我总结出一些文档里没有的实战技巧实时参数调整 通过dynamic_reconfigure可以在运行时调整MPC参数rosrun rqt_reconfigure rqt_reconfigure这个工具特别有用可以实时观察参数变化对机器人运动的影响。数据记录与分析 使用rosbag记录运动数据rosbag record -O walk_data /legged_controller/feedback回放时可以用rqt_plot绘制关节角度曲线分析步态质量。性能优化 在/etc/security/limits.conf中添加* - rtprio 99 * - memlock unlimited这能提升实时性能减少控制延迟。我的测试显示延迟能从12ms降到8ms。对于需要长时间运行的场景建议监控CPU温度。MPC计算很耗资源我遇到过因为CPU降频导致控制失效的情况。安装psensor来监控温度是个好主意。