笔者最近看MIT的cheetah mini论文,看得头昏脑涨,头晕目眩,头重脚轻,灵魂出窍。相关开源代码因为体系过于复杂,且包含上下位机所有软件部分,实在难以下手研究。但天无绝人之路,这时看到了github上qiayuanl大佬做的legged_control项目。legged_control提供了一个清晰的步骤,帮助我们理解和操作基于OCS2和ros-controls的非线性MPC与WBC框架。且legged_control项目遵循标准的ROS工作空间结构,易于部署和理解。笔者从中受益匪浅,故整理自己在本地部署时的步骤细节和报错解决方案,方便大家在本地的部署。
关键子目录的概览
- docs - 包含项目文档和说明。
- legged_common - 共享的数据结构和函数库。
- legged_control - 主控制堆栈的源码,实现了NMPC和WBC的核心算法。
- legged_controllers - 控制器的具体实现,如腿部运动模式控制器。
- legged_estimation - 估计相关的组件,可能涉及状态估计或传感器数据处理。
- legged_examples - 示例代码,可能含有特定机器人的示例配置或仿真设置。
- legged_gazebo - Gazebo仿真相关文件,用于虚拟环境中测试机器人。
- legged_hw - 硬件交互层,用于实际机器人的控制。
- legged_interface - 提供与机器人交互的API。
- legged_wbc - Whole Body Control的相关代码。
- qpoases_catkin - 可能是作为依赖项的QPOASES求解器的ROS集成。
前备条件
软件:
- Linux系统:Ubuntu 20.04
- ROS版本:ROS noetic
- 编译工具:catkin
硬件:
- Intel NUC11
准备步骤
- 环境准备:
确保你已安装了以下依赖项:
sudo apt install liburdfdom-dev liboctomap-dev libassimp-dev
- 新建工作空间:
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make
然后cd 进src进行下一步安装
安装
代码源
源代码托管在github上:https://github.com/qiayuanl/legged_control.git
但国内源推荐csdn的gitcode加速<legged_control:Nonlinear MPC and WBC framework for legged robot based on OCS2 and ros-controls - GitCode>
# 克隆legged_control,使用HTTP协议
git clone https://gitcode.com/gh_mirrors/le/legged_control.git
OCS2
OCS2 是一个针对切换系统优化控制的 C++ 工具箱,适用于机器人任务,包括路径约束处理和 URDF 模型支持。它提供了高效算法如 SLQ、iLQR 和 SQP,并具有 ROS 接口。工具箱包含自动微分工具,确保在有限计算能力的机器人应用中实现数值稳定和高效控制。
OCS2是一个大型单库项目;请不要尝试编译整个仓库。您只需按照以下步骤编译ocs2_legged_robot_ros
及其依赖项。
- 按照OCS2文档中的说明克隆OCS2,pinocchio和hpp-fcl、
# 克隆OCS2
git clone git@github.com:leggedrobotics/ocs2.git
# 克隆pinocchio
git clone --recurse-submodules https://github.com/leggedrobotics/pinocchio.git
# 克隆hpp-fcl
git clone --recurse-submodules https://github.com/leggedrobotics/hpp-fcl.git
# 克隆ocs2_robotic_assets
git clone https://github.com/leggedrobotics/ocs2_robotic_assets.git
从src回到自定义空间目录下,编译构建各包:
# 编译`ocs2_legged_robot_ros`包
catkin config -DCMAKE_BUILD_TYPE=RelWithDebInfo
catkin build ocs2_legged_robot_ros ocs2_self_collision_visualization
# 构建`legged_control`的源代码:
catkin build legged_controllers legged_unitree_description
# 构建模拟
catkin build legged_gazebo
# 构建实际硬件接口机器人
catkin build legged_unitree_hw
上述工作完成后,工作空间文件分级大致如下:
快速开始:
- 使用gedit打开~/.bashrc文件,在最后添加两条环境变量配置语句:
source /自定义空间/devel/setup.bash
export ROBOT_TYPE=a1
- 运行模拟:
roslaunch legged_unitree_description empty_world.launch
- 加载控制器
# cheater = true 即初始化`legged_cheater_controller`
roslaunch legged_controllers load_controller.launch cheater:=false
- 在rqt 中启动legged_controller或legged_cheater_controller
# 安装相关工具
sudo apt install ros-noetic-rqt-controller-manager
打开rqt,在Tool Boxes中找到Controller manager,并启用一个控制器。
5. 打开rviz,将Global Options 中的Fixed Frame 更为 odom里程计;并加载RobotModel,将Robot Description更为legged_robot_description。并勾选Collision Enable选项使模型显现。
结果大致如下:
- 打开rqt_robot_steering,将速度缓缓升高后降低为0。可以看到马缓缓站立。
- 在加载控制器的终端中输入相应步态,注意是输入步态而不是输入序号。
至此,在本地的仿真部署已结束。
后续实物部署流程和代码研究,笔者还在入门阶段。随缘更新。。。