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.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就行了。