宇树机器狗Unitree Go1开发指南1:从零搭建ROS仿真环境与工具链

📅 2026/7/15 7:33:14 👁️ 阅读次数 📝 编程学习
宇树机器狗Unitree Go1开发指南1:从零搭建ROS仿真环境与工具链

1. 环境准备与ROS安装

刚拿到宇树Go1机器狗时,最让人头疼的就是仿真环境的搭建。作为过来人,我建议先准备好以下环境配置。Ubuntu 20.04是最稳定的选择,虽然22.04也能用,但会遇到不少依赖问题。实测ROS Noetic在20.04上兼容性最好,安装时记得换国内源:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full

安装完成后,千万别忘了初始化rosdep。这个步骤经常卡住,我推荐先用清华源:

sudo rosdep init rosdep update --rosdistro noetic --include-eol-distros

验证安装是否成功时,我喜欢用一个小技巧:开三个终端分别执行roscorerosrun turtlesim turtlesim_noderosrun turtlesim turtle_teleop_key。如果能看到小乌龟移动,说明ROS环境已经妥了。

1.1 创建工作空间

创建catkin工作空间是ROS开发的标配操作,但新手容易犯两个错误:一是路径带空格,二是忘记初始化。正确的操作顺序应该是:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd .. catkin_make

编译完成后,建议把source ~/catkin_ws/devel/setup.bash加到.bashrc里。我有次忘了加,每次开终端都要手动source,调试时浪费了好多时间。可以用这个命令一键添加:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

2. 安装Unitree工具链

宇树官方提供了三个核心工具包,它们的关系就像俄罗斯套娃:

  • unitree_legged_sdk:底层通信协议(像机器狗的神经系统)
  • unitree_ros_to_real:ROS消息转换层(像翻译官)
  • unitree_ros:仿真与控制算法(像大脑皮层)

2.1 安装依赖项

Gazebo9是必须的,但直接apt install可能会装错版本。我推荐用下面的命令确保版本正确:

sudo apt-get install gazebo9 libgazebo9-dev ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control

控制器接口也得装上,否则后面会报奇怪的动态链接错误:

sudo apt-get install ros-noetic-controller-interface \ ros-noetic-joint-state-controller \ ros-noetic-effort-controllers \ ros-noetic-joint-trajectory-controller

2.2 克隆代码仓库

进入工作空间的src目录,按顺序克隆这三个仓库:

cd ~/catkin_ws/src git clone https://github.com/unitreerobotics/unitree_legged_sdk git clone https://github.com/unitreerobotics/unitree_ros_to_real git clone https://github.com/unitreerobotics/unitree_ros

注意unitree_ros_to_real里只需要保留unitree_legged_msgs文件夹,其他可以删除。我有次没清理,编译时出现消息类型冲突,debug了整整一天。

3. 配置Gazebo仿真环境

3.1 修改模型路径

打开unitree_ros/unitree_gazebo/worlds/stairs.world,找到<uri>model://</uri>开头的部分,把路径改为绝对路径。例如:

<include> <uri>file:///home/你的用户名/catkin_ws/src/unitree_ros/unitree_gazebo/worlds/building_editor_models/stairs</uri> </include>

这一步非常关键!我第一次运行时机器狗悬在空中,就是因为路径配置错误导致Gazebo找不到模型。

3.2 编译与测试

回到工作空间根目录编译:

cd ~/catkin_ws catkin_make

编译成功后,可以启动Gazebo仿真:

roslaunch unitree_gazebo normal.launch rname:=go1 wname:=stairs

参数说明:

  • rname:机器人型号(go1/a1/laikago)
  • wname:世界场景(stairs/earth等)

如果看到机器狗四脚朝天,别慌!等几秒它会自动调整姿势。我第一次看到这场景还以为仿真失败了,差点重装系统。

4. Rviz可视化与基础控制

4.1 启动Rviz

新开终端运行:

roslaunch laikago_description laikago_rviz.launch

在Rviz里添加RobotModelTF显示项,就能看到机器狗的URDF模型。建议把Fixed Frame设为trunk,这样视角更符合直觉。

4.2 基础运动控制

运行伺服控制节点:

rosrun unitree_controller unitree_servo

这时机器狗会从趴着变成站立状态。如果想让它走两步,可以运行:

rosrun unitree_controller unitree_move_kinetic

这个demo会让机器狗绕圈走。代码在unitree_ros/unitree_controller/src/move_publisher.cpp,想改运动轨迹可以在这里调整参数。

5. 常见问题排查

5.1 Gazebo黑屏问题

如果Gazebo窗口黑屏,大概率是显卡驱动问题。先确认是否安装了NVIDIA驱动:

nvidia-smi

如果没有输出,需要先安装驱动。对于Ubuntu 20.04:

sudo apt install nvidia-driver-470

5.2 关节抖动异常

仿真时如果出现关节高频抖动,可以尝试调整unitree_controller的参数:

# 在unitree_controller/config/go1_controller.yaml joint_impedance: kp: 200.0 # 调小这个值 kd: 5.0 # 适当增大

5.3 消息类型冲突

如果编译时报错duplicate message definition,检查是否有重复的unitree_legged_msgs。保留unitree_ros_to_real里的版本,其他的可以删除。

6. 进阶开发技巧

6.1 自定义运动轨迹

修改move_publisher.cpp中的publishLoop()函数,例如改成8字形运动:

void publishLoop(){ // ... if(def_frame == coord::WORLD){ pose.position.x = 0.5 * sin(2*count/500.0); pose.position.y = 0.5 * sin(count/500.0); } // ... }

6.2 添加外部扰动

想测试机器狗的抗干扰能力?可以用这个命令施加外力:

rosrun unitree_controller unitree_external_force

终端会提示输入力和力矩值,单位是牛顿(N)和牛米(Nm)。实测超过30N的侧向力就会让机器狗失稳。

6.3 录制与回放数据

ROS bag是调试神器,录制运动数据只需:

rosbag record -O go1_walk.bag /unitree_controller/joint_states

回放时先用roscore启动核心,然后:

rosbag play go1_walk.bag --loop