☰
ROS2 URDF机器人建模初步教程
2026/9/30 9:25:48 网站建设 项目流程

文章目录

    • 准备工作
    • 编写URDF模型文件
    • 编写Launch文件
    • 编译与运行

准备工作

URDF (Unified Robot Description Format) 是 ROS 中用于描述机器人物理结构的XML文件,其核心概念有二

  • Link(连杆):机器人的刚性部件,如底盘、轮子、机械臂连杆等。其属性包括几何形状、颜色、质量等。
  • Joint(关节):连接两个 Link 的“铰链”,用于定义了父子关系、连接位置(xyz)、旋转角度(rpy)以及运动类型(如固定、连续旋转、滑动)。

为了实现一个简单的机器人功能并进行可视化,需要安装下面两个包,分别用于读取模型文件和模拟传感器输入。

sudoaptupdatesudoaptinstallros-lyrical-robot-state-publisher\ros-lyrical-joint-state-publisher-gui

在开始具体的建模之前,创建工作空间

# 创建工作空间mkdir-psim_ws/srccdsim_ws/src# 创建功能包(专门用于存放机器人模型描述文件)ros2 pkg create --build-type ament_python robot_description# 创建存放 URDF 文件和 Launch 文件的目录cdrobot_descriptionmkdirurdf launch

编写URDF模型文件

接下来构建一个最简单的两轮差速移动机器人,仅包括一个长方体底盘(base_link)和两个圆柱体轮子(left_wheel 和 right_wheel)。

在我们刚刚创建的urdf文件下,新建一个simple_robot.urdf文件

nano urdf/simple_robot.urdf

一般来说,URDF模型都是从CAD工具直接导出的,本文为了理解ROS2的工作机理,直接将其源码贴出来,内容如下

<?xml version="1.0"?><robotname="simple_robot"><!-- ==================== 连杆 (Link) ==================== --><!-- 底盘:一个 0.4m x 0.3m x 0.1m 的蓝色长方体 --><linkname="base_link"><visual><geometry><boxsize="0.4 0.3 0.1"/></geometry><materialname="blue"><colorrgba="0.2 0.2 0.8 1.0"/></material></visual></link><!-- 左轮:一个半径 0.05m、厚度 0.04m 的黑色圆柱体 --><linkname="left_wheel"><visual><geometry><cylinderradius="0.05"length="0.04"/></geometry><materialname="black"><colorrgba="0.1 0.1 0.1 1.0"/></material></visual></link><!-- 右轮:与左轮相同 --><linkname="right_wheel"><visual><geometry><cylinderradius="0.05"length="0.04"/></geometry><materialname="black"><colorrgba="0.1 0.1 0.1 1.0"/></material></visual></link><!-- ==================== 关节 (Joint) ==================== --><!-- 左轮关节:continuous 表示可以无限旋转(像车轮一样) --><jointname="left_wheel_joint"type="continuous"><parentlink="base_link"/><childlink="left_wheel"/><!-- origin: 相对于父连杆(base_link)中心的位置和旋转 --><!-- xyz="0 0.17 -0.03": 向Y轴正方向偏移0.17m(左侧),向下偏移0.03m --><!-- rpy="-1.5708 0 0": 绕X轴旋转-90度,让圆柱体横过来(像车轮) --><originxyz="0 0.17 -0.03"rpy="-1.5708 0 0"/><!-- axis: 旋转轴,绕Z轴旋转 --><axisxyz="0 0 1"/></joint><!-- 右轮关节 --><jointname="right_wheel_joint"type="continuous"><parentlink="base_link"/><childlink="right_wheel"/><!-- Y轴负方向偏移(右侧) --><originxyz="0 -0.17 -0.03"rpy="-1.5708 0 0"/><axisxyz="0 0 1"/></joint></robot>

由于我是用ssh控制ubuntu,所以直接进VIM还不好粘贴,这里用的是cat命令,

cat<<'EOF'>urdf/simple_robot.urdf# 在这里直接使用终端的粘贴快捷键 # 粘贴完内容后,另起一行输入 EOF 并回车 EOF

编写Launch文件

我们需要启动三个核心节点来在 RViz2 中显示机器人:

  • robot_state_publisher:读取 URDF 文件,将其发布到 /robot_description 话题,并根据关节状态发布 TF 坐标变换。
  • joint_state_publisher_gui:弹出一个带滑块的 GUI 窗口,让你手动拖动关节(如转动轮子),并发布关节状态到 /joint_states 话题。
  • rviz2:三维可视化工具,接收上述数据并渲染机器人模型。

在/robot_description/launch/ 目录下,新建文件

display_robot_launch.py

内容如下

importosfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodefromament_index_python.packagesimportget_package_share_directorydefgenerate_launch_description():# 1. 获取功能包的 share 目录路径pkg_share=get_package_share_directory('robot_description')# 2. 拼接 URDF 文件的完整路径urdf_file=os.path.join(pkg_share,'urdf','simple_robot.urdf')# 3. 读取 URDF 文件内容为字符串withopen(urdf_file,'r')asf:robot_desc=f.read()returnLaunchDescription([# 节点 1:robot_state_publisher# 将 URDF 字符串作为参数传入,它会发布 TF 和 robot_descriptionNode(package='robot_state_publisher',executable='robot_state_publisher',parameters=[{'robot_description':robot_desc}],output='screen'),# 节点 2:joint_state_publisher_gui# 提供 GUI 滑块,手动控制关节角度Node(package='joint_state_publisher_gui',executable='joint_state_publisher_gui',output='screen'),# 节点 3:rviz2# 启动三维可视化窗口Node(package='rviz2',executable='rviz2',output='screen'),])

修改setup.py,确保顶部导入了os和glob,没有的话就补上

importosfromglobimportglob

修改data_files部分,添加urdf和launc目录的安装规则

data_files=[# 现有内容不用动# 安装 URDF 文件(os.path.join('share',package_name,'urdf'),glob(os.path.join('urdf','*.urdf'))),# 安装 Launch 文件(os.path.join('share',package_name,'launch'),glob(os.path.join('launch','*launch.[pxy][yma]*'))),],

编译与运行

回到sim_ws目录,

colcon buildsourceinstall/setup.bash ros2 launch robot_description display_robot_launch.py

弹出rviz窗口后,将左侧面板Global Options下的Fixed Frame修改为base_link。

然后在点击下方的 Add(添加)按钮,在弹出的窗口中,在By display type选项卡中,选中RobotModel,点击 OK。

此时左侧Displays列表中会多出这个RobotModel,点击展开,确保Visual Enabled选项被勾选,然后将Discription Topic的值设为/robot_description,这时窗口中就会出现我们创建的哪个小车了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询