截止目前,四足机器人的运动控制涌现出不少开源方案,罗列几个

  1. Cheetah-Software
  2. IHMC-Robotics
  3. Optimal Control for Switched Systems
  4. Representation-Free Model Predictive Control

一件值得开心的事,前几天YY硕也开源了一套采用 GNU Affero General Public License v3.0 协议的方案

简单来说,A1-QP-MPC-Controller 就是 Cheetah-Software 的浓缩精华版(代码量是其 1/5 约 3K 行),采用轻量级框架,代码易读,结构清晰,简直是入门四足运动控制的福音。

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C++                             15            451            582           2352
C/C++ Header                    11            261            201            921
Markdown                         1              3              0              2
-------------------------------------------------------------------------------
SUM:                            27            715            783           3275
-------------------------------------------------------------------------------

与 Cheetah-Software 自带仿真器不一样,A1-QP-MPC-Controller 采用第三方仿真平台,目前仅支持 Gazebo 和 Isaac Sim。Gazebo 仿真比较耗计算资源,建议用带独立显卡的计算机跑仿真!

代码结构

UML

算法理解

谈谈个人理解,A1-QP-MPC-Controller 状态估计用足底力来计算触地信息,而 Cheetah-Software 的方案没有估计触地信息,所以从真机或仿真来看 A1-QP-MPC-Controller 很稳,且支持上楼梯。当然代码也有很多优化空间,比如 ConvexMpc 对象不需要每次计算时都重新生成再释放,考虑采用轻量化的仿真平台(例如 ODE),考虑用键盘代替手柄🎮控制机器人。

安装方法

原始仓库采用 Docker 安装依赖环境,其实不用 Docker 也能跑,只需要按照 A1-QP-MPC-Controller/docker/Dockerfile 文件里的指令一步步执行。假设你已经安装好了 ROS,那么还需要完成以下步骤

安装常用软件

$ sudo apt-get update && apt-get install -y \
      vim \
      libatlas-base-dev \
      libeigen3-dev \
      libgoogle-glog-dev \
      libsuitesparse-dev \
      python-catkin-tools \
      python3-matplotlib \
      gfortran \
      autoconf \
      coinor-libipopt-dev \
      libgfortran3 \
      curl \
      libopenmpi-dev \
      apt-utils \
      software-properties-common \
      build-essential \
      libssl-dev \
      ros-${ROS_DISTRO}-ros-control \
      ros-${ROS_DISTRO}-gazebo-ros \
      ros-${ROS_DISTRO}-joy \
      ros-${ROS_DISTRO}-ros-controllers \
      ros-${ROS_DISTRO}-robot-state-publisher

安装 OSQP

cd ~
git clone --recursive https://github.com/oxfordcontrol/osqp
cd osqp
mkdir build
cd build
cmake ..
make -j
sudo make install

安装 osqp-eigen

cd ~
git clone https://github.com/robotology/osqp-eigen.git
cd osqp-eigen
mkdir build
cd build
cmake ..
make -j
sudo make install

安装 LCM

cd ~
git clone https://github.com/lcm-proj/lcm.git
cd lcm
mkdir build
cd build
cmake ..
make -j
sudo make install

编译(无需安装) unitree_legged_sdk & aliengo_sdk

cd ~
git clone https://github.com/unitreerobotics/unitree_legged_sdk.git
cd unitree_legged_sdk
git checkout v3.2
mkdir build
cd build
cmake ..
make -j
cd ~
git clone https://github.com/unitreerobotics/aliengo_sdk.git
cd aliengo_sdk
mkdir build
cd build
cmake ..
make -j

配置环境变量

修改 ~/.bashrc 文件,末尾添加

source /opt/ros/${ROS_DISTRO}/setup.bash
source ~/catkin_ws/devel/setup.bash
export UNITREE_LEGGED_SDK_PATH=~/unitree_legged_sdk
export ALIENGO_SDK_PATH=~/aliengo_sdk
#amd64, arm32, arm64
export UNITREE_PLATFORM="amd64"

最后安装 unitree_ros (假设 ROS 工作空间路径为 ~/catkin_ws) 和 A1-QP-MPC-Controller

cd catkin_ws/src
git clone https://github.com/ShuoYangRobotics/unitree_ros.git
git clone https://github.com/ShuoYangRobotics/A1-QP-MPC-Controller.git
cd ~/catkin_ws
catkin_make

顺利执行完以上指令后,就可以启动程序啦。以启动 Gazebo 仿真为例

# 启动 Gazebo 仿真环境
$ roslaunch unitree_gazebo normal.launch rname:=a1 wname:=stairs_single
# 初始化机器人位姿
$ rosrun unitree_controller unitree_servo # let the robot stretch legs
$ rosrun unitree_controller unitree_move_kinetic # place the robot back to origin
# 启动手柄🎮驱动
$ rosrun joy joy_node
# 启动控制器
$ roslaunch a1_cpp a1_ctrl.launch type:=gazebo solver_type:=mpc # solver_type can be qp or mpc

其中手柄的 A 键用来切换 stand/tort 步态

最后感谢硕哥带领小伙伴入门(keng)~