ROS2学习(16)------ URDF 机器人建模方法

发布于:2025-06-01 ⋅ 阅读:(35) ⋅ 点赞:(0)
  • 操作系统: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)。
    然后就会看到模型正确加载了:
    在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到