
文章目录准备工作编写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 version1.0?robotnamesimple_robot!-- 连杆 (Link) --!-- 底盘一个 0.4m x 0.3m x 0.1m 的蓝色长方体 --linknamebase_linkvisualgeometryboxsize0.4 0.3 0.1//geometrymaterialnamebluecolorrgba0.2 0.2 0.8 1.0//material/visual/link!-- 左轮一个半径 0.05m、厚度 0.04m 的黑色圆柱体 --linknameleft_wheelvisualgeometrycylinderradius0.05length0.04//geometrymaterialnameblackcolorrgba0.1 0.1 0.1 1.0//material/visual/link!-- 右轮与左轮相同 --linknameright_wheelvisualgeometrycylinderradius0.05length0.04//geometrymaterialnameblackcolorrgba0.1 0.1 0.1 1.0//material/visual/link!-- 关节 (Joint) --!-- 左轮关节continuous 表示可以无限旋转像车轮一样 --jointnameleft_wheel_jointtypecontinuousparentlinkbase_link/childlinkleft_wheel/!-- origin: 相对于父连杆(base_link)中心的位置和旋转 --!-- xyz0 0.17 -0.03: 向Y轴正方向偏移0.17m左侧向下偏移0.03m --!-- rpy-1.5708 0 0: 绕X轴旋转-90度让圆柱体横过来像车轮 --originxyz0 0.17 -0.03rpy-1.5708 0 0/!-- axis: 旋转轴绕Z轴旋转 --axisxyz0 0 1//joint!-- 右轮关节 --jointnameright_wheel_jointtypecontinuousparentlinkbase_link/childlinkright_wheel/!-- Y轴负方向偏移右侧 --originxyz0 -0.17 -0.03rpy-1.5708 0 0/axisxyz0 0 1//joint/robot由于我是用ssh控制ubuntu所以直接进VIM还不好粘贴这里用的是cat命令catEOFurdf/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_shareget_package_share_directory(robot_description)# 2. 拼接 URDF 文件的完整路径urdf_fileos.path.join(pkg_share,urdf,simple_robot.urdf)# 3. 读取 URDF 文件内容为字符串withopen(urdf_file,r)asf:robot_descf.read()returnLaunchDescription([# 节点 1robot_state_publisher# 将 URDF 字符串作为参数传入它会发布 TF 和 robot_descriptionNode(packagerobot_state_publisher,executablerobot_state_publisher,parameters[{robot_description:robot_desc}],outputscreen),# 节点 2joint_state_publisher_gui# 提供 GUI 滑块手动控制关节角度Node(packagejoint_state_publisher_gui,executablejoint_state_publisher_gui,outputscreen),# 节点 3rviz2# 启动三维可视化窗口Node(packagerviz2,executablerviz2,outputscreen),])修改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这时窗口中就会出现我们创建的哪个小车了。