URDF 教程:构建六轴机械臂模型
URDF 教程:构建六轴机械臂模型
·
一、URDF 简介
URDF(Unified Robot Description Format)即统一机器人描述格式,是 ROS(Robot Operating System)中用于描述机器人模型的 XML 语言。它可以定义机器人的各个部分,包括连杆(links)、关节(joints)、惯性属性、视觉外观和碰撞属性等,让 ROS 系统能够理解机器人的结构和特性,进而实现运动规划、仿真和控制等功能。
二、六轴机械臂模型的构建步骤
(一)确定机械臂结构
在开始编写 URDF 文件前,需明确六轴机械臂的结构,包括各连杆的尺寸、形状,关节的类型(旋转关节或平移关节)、位置和运动范围等。假设我们的六轴机械臂由 6 个连杆和 6 个旋转关节组成,每个关节控制一个连杆的转动。
(二)创建 URDF 文件基础结构
新建一个.urdf
文件,例如six_axis_robot.urdf
,文件开头需声明 XML 版本和 URDF 命名空间:
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="six_axis_robot">
<!-- 机械臂模型内容将在此处填写 -->
</robot>
<robot>
标签是 URDF 文件的根元素,name
属性指定机器人的名称。
(三)定义连杆
- 第一个连杆(base_link):以第一个连杆
base_link
为例,在<robot>
标签内添加如下代码:
<link name="base_link">
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.2 0.2 0.1"/>
</geometry>
<material name="Blue">
<color rgba="0 0 1 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.2 0.2 0.1"/>
</geometry>
</collision>
</link>
name
属性为连杆命名。<inertial>
标签描述连杆的惯性属性。<origin>
标签定义连杆质心相对于连杆坐标系的位置和姿态,xyz
表示平移,rpy
表示欧拉角旋转;<mass>
标签的value
属性指定连杆质量;<inertia>
标签定义惯性矩和惯性积,对于简单形状,可参考 URDF 文档获取对应值,这里假设的数值仅为示例。<visual>
标签用于设置连杆的可视化属性。<geometry>
标签内的<box>
标签表示连杆形状为立方体,size
属性指定长、宽、高;<material>
标签定义连杆的材质,<color>
标签的rgba
属性设置颜色,四个值分别代表红、绿、蓝和透明度,取值范围为[0, 1]
。<collision>
标签描述连杆的碰撞属性,结构与<visual>
类似,<geometry>
中的形状用于碰撞检测,这里采用与可视化相同的立方体形状。
- 其余连杆(link1 - link5):按照相同方式定义其余连杆,根据实际尺寸和特性调整参数。例如
link1
:
<link name="link1">
<inertial>
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<mass value="0.5"/>
<inertia ixx="50" ixy="0" ixz="0" iyy="50" iyz="0" izz="50"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="0.05" length="0.2"/>
</geometry>
<material name="Red">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="0.05" length="0.2"/>
</geometry>
</collision>
</link>
此处link1
形状为圆柱体,通过<cylinder>
标签定义半径和长度,材质颜色设为红色。
(四)定义关节
- 第一个关节(joint1):在
<robot>
标签内,于base_link
和link1
定义之后添加关节定义:<joint name="joint1" type="revolute"> <origin xyz="0 0 0.1" rpy="0 0 0"/> <parent link="base_link"/> <child link="link1"/> <axis xyz="0 0 1"/> <limit lower="-1.57" upper="1.57" effort="100" velocity="1"/> </joint>
name
属性为关节命名,type
属性指定关节类型,revolute
表示旋转关节,还有prismatic
(平移关节)等类型。<origin>
标签定义关节在父连杆坐标系中的位置和姿态。<parent>
和<child>
标签分别指定关节的父连杆和子连杆。<axis>
标签定义关节的旋转轴,xyz
表示轴的方向向量。<limit>
标签设置关节的运动范围,lower
和upper
指定角度下限和上限(单位为弧度),effort
表示关节最大驱动力矩,velocity
表示关节最大运动速度。
- 其余关节(joint2 - joint5):类似地定义其余关节,根据机械臂实际结构调整参数。例如
joint2
:
<joint name="joint2" type="revolute">
<origin xyz="0 0 0.3" rpy="0 0 0"/>
<parent link="link1"/>
<child link="link2"/>
<axis xyz="0 1 0"/>
<limit lower="-1.57" upper="1.57" effort="100" velocity="1"/>
</joint>
这里joint2
连接link1
和link2
,旋转轴方向为y
轴,运动范围与joint1
相同(实际应用中应根据机械臂设计调整)。
(五)完成第六个连杆和关节
重复连杆和关节的定义步骤完成最后一个连杆link6
和关节joint6
的定义:
<link name="link6">
<inertial>
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<mass value="0.2"/>
<inertia ixx="20" ixy="0" ixz="0" iyy="20" iyz="0" izz="20"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.03"/>
</geometry>
<material name="Green">
<color rgba="0 1 0 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.03"/>
</geometry>
</collision>
</link>
<joint name="joint6" type="revolute">
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<parent link="link5"/>
<child link="link6"/>
<axis xyz="0 0 1"/>
<limit lower="-3.14" upper="3.14" effort="50" velocity="1"/>
</joint>
link6
形状为球体,joint6
连接link5
和link6
,运动范围更大。
三、使用 URDF 模型
(一)在 RViz 中显示
- 启动 ROS 核心:在终端输入
roscore
并回车。 - 安装
joint_state_publisher
和robot_state_publisher
:如果未安装,使用sudo apt-get install ros - <distro> - joint - state - publisher ros - <distro> - robot - state - publisher
命令安装,<distro>
为 ROS 版本,如melodic
。 - 发布关节状态:新建终端,输入
rosrun joint_state_publisher joint_state_publisher
,它会随机发布关节角度,用于显示机械臂的动态效果。 - 发布机器人状态:再新建终端,输入
rosrun robot_state_publisher robot_state_publisher <path_to_urdf>/six_axis_robot.urdf
,将 URDF 模型发布到 ROS 系统。 - 启动 RViz:打开新终端,输入
rosrun rviz rviz
,在 RViz 中添加RobotModel
显示项,即可看到六轴机械臂模型。
(二)在 Gazebo 中仿真
- 安装 Gazebo 和相关插件:根据 ROS 版本安装对应版本的 Gazebo,以及
ros - <distro> - gazebo - ros - packages
和ros - <distro> - gazebo - ros - control
等插件。 - 创建 Gazebo 世界文件:例如
world.world
,定义仿真环境,如地面、光源等。 - 在 Gazebo 中加载机械臂模型:修改
world.world
文件,添加<include>
标签加载 URDF 模型:
<include>
<uri>model://six_axis_robot</uri>
<pose>0 0 0 0 0 0</pose>
</include>
- 启动 Gazebo 仿真:在终端输入
roslaunch gazebo_ros empty_world.launch world_name:=$(rospack find <package_name>)/worlds/world.world
,<package_name>
为包含 URDF 文件和世界文件的 ROS 包名,即可在 Gazebo 中看到机械臂模型并进行仿真。
更多推荐
所有评论(0)