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

发布时间:2026/7/15 7:25:30
宇树机器狗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验证安装是否成功时我喜欢用一个小技巧开三个终端分别执行roscore、rosrun turtlesim turtlesim_node和rosrun 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 ~/.bashrc2. 安装Unitree工具链宇树官方提供了三个核心工具包它们的关系就像俄罗斯套娃unitree_legged_sdk底层通信协议像机器狗的神经系统unitree_ros_to_realROS消息转换层像翻译官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-controller2.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找到urimodel:///uri开头的部分把路径改为绝对路径。例如include urifile:///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/laikagowname世界场景stairs/earth等如果看到机器狗四脚朝天别慌等几秒它会自动调整姿势。我第一次看到这场景还以为仿真失败了差点重装系统。4. Rviz可视化与基础控制4.1 启动Rviz新开终端运行roslaunch laikago_description laikago_rviz.launch在Rviz里添加RobotModel和TF显示项就能看到机器狗的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.04sudo apt install nvidia-driver-4705.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