- 操作系统:ubuntu22.04
- IDE:Visual Studio Code
- 编程语言:C++11
- ROS版本:2
在 ROS 2 中使用 URDF(Unified Robot Description Format)进行机器人建模是一个常见的做法。URDF 是一种 XML 格式的文件,用于描述机器人的连杆、关节、视觉外观以及碰撞属性等信息。以下是创建和使用 URDF 文件的基本步骤:
1. 创建 URDF 文件
首先,在你的 ROS 2 工作空间中为你的机器人模型创建一个包,并添加 URDF 文件。
示例步骤:
- 在 src 目录下创建一个新的包,比如叫做 my_robot_description。
cd ~/ros2_ws/src/
ros2 pkg create my_robot_description --build-type ament_cmake
- 在该包内创建一个目录来存放 URDF 文件,例如 urdf/。
mkdir my_robot_description/urdf
- 创建一个 .urdf 文件,如 my_robot.urdf.xacro 或直接 .urdf 文件。
示例 URDF 文件内容:
<?xml version="1.0"?>
<robot name="my_robot">
<link name="base_link">
<visual>
<geometry>
<box size="1 1 1"/>
</geometry>
</visual>
</link>
</robot>
这里定义了一个简单的立方体作为机器人的基座。
2. 使用 Xacro 增强 URDF
Xacro (XML Macros) 是 URDF 的扩展,允许你编写更简洁的 URDF 文件,通过宏定义重用代码片段。推荐使用 .xacro 后缀名。
示例 Xacro 文件内容:
<?xml version="1.0"?>
<robot name="blue_cylinder" xmlns:xacro="http://www.ros.org/wiki/xacro">
<!-- 定义 base_link,作为整个模型的根 link -->
<link name="base_link">
<visual>
<geometry>
<cylinder radius="0.2" length="0.6"/>
</geometry>
<material name="blue">
<color rgba="0 1 1 1"/>
</material>
</visual>
</link>
<!-- 添加一个球形 link -->
<link name="top_link">
<visual>
<geometry>
<sphere radius="0.1"/>
</geometry>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
</visual>
</link>
<!-- dummy link -->
<link name="dummy_link"/>
<!-- 球形 link 的固定关节 -->
<joint name="top_joint" type="fixed">
<parent link="base_link"/>
<child link="top_link"/>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
</joint>
<!-- dummy link 的固定关节 -->
<joint name="dummy_joint" type="fixed">
<parent link="base_link"/>
<child link="dummy_link"/>
<origin xyz="0 0 0" rpy="0 0 0"/>
</joint>
</robot>
3. 加载 URDF/Xacro 文件到参数服务器
为了能够在 RViz 中显示你的机器人模型,你需要将 URDF 文件加载到参数服务器上。
创建一个启动文件:
在 launch 目录下创建一个 Python 脚本,例如 display.launch.py。
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
urdf_file = os.path.join(get_package_share_directory('my_robot_description'), 'urdf', 'my_robot.urdf.xacro')
return LaunchDescription([
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
output='screen',
arguments=[urdf_file]
),
Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
output='screen'
),
Node(
package='rviz2',
executable='rviz2',
output='screen'
)
])
4. 运行并查看模型
确保所有更改都已保存后,构建你的工作空间,并运行刚刚创建的启动文件。
colcon build --packages-select my_robot_description
source install/setup.bash
ros2 launch my_robot_description display.launch.py
这将会打开 RViz 并显示你的机器人模型:
默认打不开模型,需要设置一下参数,才能看到模型
(1).确保 RViz 正确加载 RobotModel
- 打开 RViz 后,点击 Add → RobotModel。
- 在 RobotModel 的 Description Topic 确保是 /robot_description(默认值)。
(2) 检查坐标系 (TF)
- 在 RViz 中添加 TF 显示,检查是否有base_link 或 dummy_link 的坐标系。
- 如果没有 TF 数据,可能是 robot_state_publisher 没有正确发布。
(3) 检查显示设置
- 确保 Global Options → Fixed Frame 设置为 base_link(取决于你的 URDF)。
然后就会看到模型正确加载了: