2. 环境搭建:ROS安装与配置、URDF相关工具包介绍、第一个URDF文件

说实话,很多初学者一上来就急着写URDF,结果卡在环境上半天出不来。我见过太多人花了两天装ROS,最后发现版本不对,又重来一遍。嗯,咱们先把地基打牢。

这一章,我带你把ROS环境搭好,把URDF相关的工具认全,再亲手写出第一个URDF文件。整个过程大概需要30分钟,前提是你用的是Ubuntu 20.04。

2.1 ROS Noetic 安装与配置

我个人习惯用ROS Noetic,它对应Ubuntu 20.04,稳定且社区支持好。你想想看,如果选一个冷门版本,遇到问题连搜都搜不到,多难受。

2.1.1 安装步骤

打开终端,按顺序执行以下命令。我建议你一条一条复制,别一次性全粘进去——万一中间某条报错,你都不知道是哪一步出的问题。

# 1. 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

# 2. 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 更新
sudo apt update

# 4. 安装完整桌面版(包含URDF相关工具)
sudo apt install ros-noetic-desktop-full

# 5. 初始化rosdep
sudo rosdep init
rosdep update

# 6. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 7. 安装构建依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
⚠️ 避坑指南:我曾经在安装时跳过sudo rosdep init这一步,结果后面编译功能包时各种找不到依赖。别偷懒,这一步必须做。

2.1.2 验证安装

装完之后,怎么知道它好了?跑两个命令试试:

# 查看ROS环境变量
echo $ROS_DISTRO
# 应该输出:noetic

# 查看ROS版本
rosversion -d
# 应该输出:noetic

如果两个都对了,恭喜你,ROS环境已经就绪。

2.2 URDF 相关工具包介绍

ROS安装好之后,URDF相关的工具其实已经自带了一部分。但有几个关键包,我建议你单独了解一下。说白了,它们就是你的「建模工具箱」。

工具包名称 作用 是否默认安装
urdf URDF文件的解析与加载核心库 ✅ 是
urdfdom URDF的XML解析器底层实现 ✅ 是
urdf_parser_plugin 解析器插件接口 ✅ 是
joint_state_publisher 发布关节状态,用于可视化调试 ❌ 需手动安装
robot_state_publisher 根据URDF和关节状态发布TF变换 ✅ 是
rviz 3D可视化工具,显示URDF模型 ✅ 是
💡 我的习惯:每次新建机器人项目,我都会先装joint_state_publisher_gui。它带一个滑块界面,可以手动拖动关节,调试时特别方便。安装命令:sudo apt install ros-noetic-joint-state-publisher-gui

2.3 第一个URDF文件

理论说再多,不如动手写一个。咱们来创建一个最简单的URDF文件——一个「连杆」加一个「关节」,组成一个单摆模型。

2.3.1 创建工作空间

mkdir -p ~/urdf_ws/src
cd ~/urdf_ws/src
catkin_init_workspace
cd ~/urdf_ws
catkin_make
source devel/setup.bash

2.3.2 编写URDF文件

在~/urdf_ws/src下创建一个my_first_robot文件夹,然后新建robot.urdf文件:

<?xml version="1.0"?>
<robot name="my_first_robot">

  <!-- 基座连杆 -->
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.2 0.2 0.1"/>
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <material name="blue">
        <color rgba="0 0 1 1"/>
      </material>
    </visual>
  </link>

  <!-- 摆动连杆 -->
  <link name="pendulum_link">
    <visual>
      <geometry>
        <cylinder length="0.4" radius="0.02"/>
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <material name="red">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
  </link>

  <!-- 连接基座和摆杆的旋转关节 -->
  <joint name="pendulum_joint" type="continuous">
    <parent link="base_link"/>
    <child link="pendulum_link"/>
    <origin xyz="0 0 0.05" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
  </joint>

</robot>

🔑 关键点解析:

  • <robot>是根标签,name属性随便起,但要有意义
  • 每个<link>代表一个刚体部件,必须有name
  • 每个<joint>连接两个link,parent和child不能写反
  • origin定义关节相对于父link的位置,axis定义旋转轴

2.3.3 可视化验证

文件写好了,怎么知道它对不对?用check_urdf命令检查语法:

# 安装检查工具
sudo apt install liburdfdom-tools

# 检查URDF文件
check_urdf ~/urdf_ws/src/my_first_robot/robot.urdf

如果输出类似下面这样,说明语法没问题:

robot name is: my_first_robot
---------- Successfully Parsed XML ----------
root link: base_link has 1 child(ren)
    child(1):  pendulum_link

然后,用urdf_to_graphiz生成结构图:

urdf_to_graphiz ~/urdf_ws/src/my_first_robot/robot.urdf

它会生成.gv和.pdf文件,打开看看——嗯,这就是你的第一个机器人模型结构。

2.4 本章知识结构

下面这张图,把本章的核心逻辑串起来了。你对照着看,思路会更清晰:

第2章 知识结构:环境搭建与第一个URDF 环境搭建 ROS Noetic 安装 URDF 工具包 第一个URDF文件 安装命令 & 环境配置 验证:$ROS_DISTRO urdf / urdfdom / rviz joint_state_publisher link + joint 结构 check_urdf 验证 urdf_to_graphiz 可视化 💡 核心流程 安装ROS → 确认工具包 → 编写URDF → 语法检查 → 可视化验证

2.5 常见问题与避坑

  • ROS安装后找不到命令:八成是source ~/.bashrc没执行,或者终端没重启。关掉终端重新打开,再试一次。
  • check_urdf报错说找不到文件:检查路径,我建议用路径,省得迷路。
  • URDF中关节方向不对:axis的值是相对于父link坐标系的。我曾经把axis xyz="1 0 0"写成"0 0 1",结果摆杆在天上转圈,找了半天才发现。
🔧 调试小技巧:如果你不想每次都打完整路径,可以在~/.bashrc里加一行别名:
alias check='check_urdf ~/urdf_ws/src/my_first_robot/robot.urdf'
之后在终端直接输入check就行了。