宇树机器狗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_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-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,找到<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里添加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.04:
sudo 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