ROS中URDF格式和使用

URDF定义

URDF格式是ROS用来描述机器人的符合XML语言规范的描述文件。 为了方便查看,将常用的urdf格式文件的元素定义做成了一张简表。

<joint>name="joint nane",type="continuous(无限旋转)/fixed(固定关节)/revolute(旋转)/prismatic(移动)"
<origin xyz="1,2,3", rpy="0,0,0">,指定相对于父link的坐标变换,其中xyz为相对的位置,rpy为相对的方向
<parent link="link nane">,指定父link的名称。
<child link="link nane" />,指定子link的名称。
<axis xyz="1 0 0 " />,指定那个轴为运动轴,如"0 1 0 "表示运动轴为y轴,默认为"1 0 0 "。
<limit lower='0' upper='3.14159' effort='300' velocity='1'>,对于旋转和移动关节是必需的,设置它的运动范围、作用力以及速度的限制。
<link> name="link name"
<visual> <origin>,同joint->origin
<geometry <box size:="1.0 2.0 3.0">,size为xyz方向上的尺寸
<cylinder length="1.0" radius="1.0" />
<sphere radius="1.0" />
<mesh filename="xxx" scale="1.0" />,模型文件可以是.dae、.stl。
<material> name="xxx"
<color rgba="1 2 3 4" />
<texture filename="xxx" />
<inertial> <origin>,同joint->origin,指定连杆的惯性坐标系的方位。且惯性坐标系原点与重心须一致。
<mass value="1.0" />,指定连杆的质量
<inertia ixx="0" ixx="0" ixx="0" ixx="0" ixx="0" ixx="0" />,指定连杆的惯性二阶矩。 inertial.png
<collision> 说明:碰撞模型通常与外观模型一样,且为减少计算量应尽可能精简。
name="nane"
<origin>,同joint->origin。
<geometry>,同link->visual中的geometry。
# Xacro扩展 #### 常量定义 ```xml ``` #### 常量使用 使用${}。其中还可包含常用数学运算,例如: ```xml ``` #### 宏定义 ```xml ... ``` #### 宏定义的使用 ```xml ``` #### 文件包含 ```xml ```

urdf文件的检查和显示

可以采用如下命令检查urdf文件的合法性:

check_urdf myrobot.urdf

对于扩展的myrobot.xacro文件,可以使用如下方法:

check_urdf < (xacro myrobot.xacro)

模型的显示有两种方法:

  1. 方法一,直接在shell中使用命令:
roslaunch urdf_tutorial display.launch model:='$(find myrobot_config)/config/myrobot.xacro'

其中myrobot_config是一个关于机器人配置的package。另外,model后面也可以接一个绝对的文件路径。

  1. 方法二,编写一个launch文件,内容如下:
<launch>
  <arg name="model" default="$(find myrobot_config)/config/myrobot.xacro"/>
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />
  <param name="use_gui" value="$(arg gui)"/>

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

机械臂的urdf示例

首先,需要对机器人的link和joint的定义以及编号有一个清晰的认识。我们选择采用《机器人学导论》中的link和joint描述方法。现在以一个2dof的简单机械臂作为示例来编写一个URDF文件并在rviz中展示。该机械臂的描述见下图:
URDF格式-robot.jpg

该图中将joint_0的坐标原点与joint_1的坐标原点重合,z轴重合,这样可以简化运动学的计算。同时,加入base_link也是为了rviz的显示需要,在rviz中需要一个固定的坐标系,默认是取用一个fixed类型的joint的坐标系。而URDF中定义joint必须定义与之关联的前后两个link。因此就加入一个base_link。

下面就根据每一个joint,以及前后的link来逐步的手工编写urdf文件。首先是joint_0,其父link为base_link,子link为link_0。其内容为:

<link name="base_link"/>
    <visual>
        <geometry>
            <box size='0.14 0.11 ${H_b}' />
        </geometry>
    </visual>
</link>
<joint name='joint_0' type='fixed'>
    <origin xyz='0 0 ${H_b/2+H_0+H_1/2}' rpy='0 0 0' />
    <parent link='base_link' />
    <child link='link_0' />
</joint>
<link name='link_0'>
    <visual>
        <oring xyz='0 0 ${-(H_1/2+H_0/2)}' rpy='0 0 0' />
        <geometry>
            <cylinder lenght='${H_0}' radius='${R_0}' />
        </geometry>
    </visual>
</link>

上面使用了xacro扩展的常量定义,H_b、H_0和H_1分别表示各个link的高度,R_0表示圆柱型link_0的半径。注意,我们将joint_0的坐标原点上移到与joint_1重合的位置。但由于link_0的放置坐标是基于joint_0的,而其自身的坐标中心为其重心,因此放置时需要将其向下偏移。

然后为joint_1以及对应的link_1:

<joint name='joint_1' type='revolute'>
    <limit effort='300' velocity='1' lower='0' upper='${PI}' />
    <origin xyz='0 0 0' rpy='0 0 0' />
    <parent link='link_0' />
    <child link='link_1' />
    <axis xyz='0 0 1' />
</joint>
<link name='link_1' >
    <visual>
        <origin xyz='0 0 0' rpy='0 0 0' />
        <geometry>
            <box size='0.08 0.08 ${H_1}' />
        <geometry>
    </visual>
</link>

对于joint_1,由于其是一个旋转关节,因此就必须为其添加limit信息。同时也必须通过指定其绕z轴旋转,因为默认是绕x轴旋转的。

joint_2的处理稍微复杂一点,其坐标系相对于joint_1进行了绕x轴90度的旋转。在urdf中使用RPY角度来描述旋转,因此绕x轴90度对应的值为"pi/2 0 0"。同时link_2的中心也相较于joint_2的坐标原点在x轴上进行了偏移。所以关于joint_2和linke_2的定义为:

<joint name='joint_2' type='revolute'>
    <limit effort='300' velocity='1' lower='0' upper='${PI}' />
    <origin xyz='0 0 0' rpy='${PI/2} 0 0' />
    <parent link='link_1' />
    <child link='link_2' />
    <axis xyz='0 0 1' />
</joint>
<link name='link_2' >
    <visual>
        <origin xyz='${L_2/2} 0 0' rpy='0 0 0' />
        <geometry>
            <box size='${L_2} 0.05 0.03' />
        <geometry>
    </visual>
</link>

通过rviz可以得到如下的显示效果,并能通过joint_state_publisher的小窗口中的滑块让机械臂运动起来
rviz_disp.png

  • 27
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS,URDF(Unified Robot Description Format)和Xacro(XML Macros)是用于描述机器人模型的两种文件格式。URDF是一种XML格式的文件,用于描述机器人的运动学和几何结构,而Xacro则是一种基于XML的宏语言,用于简化URDF文件的编写。 下面是一个简单的URDF文件示例: ```xml <?xml version="1.0"?> <robot name="my_robot"> <link name="base_link"> <inertial> <mass value="1.0"/> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </collision> </link> <joint name="base_joint" type="fixed"> <parent link="base_link"/> <child link="child_link"/> <origin xyz="0 0 0" rpy="0 0 0"/> </joint> <link name="child_link"> <inertial> <mass value="1.0"/> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </collision> </link> </robot> ``` 这个URDF文件描述了一个由两个链接(link)和一个关节(joint)组成的机器人模型。其,每个链接都包含了惯性信息、可视化信息和碰撞信息,而关节则定义了链接之间的连接方式和相对位置。 下面是一个简单的Xacro文件示例,用于生成上述URDF文件: ```xml <?xml version="1.0"?> <robot name="my_robot"> <xacro:include filename="$(find my_robot_description)/urdf/my_robot_macros.xacro"/> <link name="base_link"> <inertial> <mass value="1.0"/> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> <xacro:my_robot_visualization/> <xacro:my_robot_collision/> </link> <joint name="base_joint" type="fixed"> <parent link="base_link"/> <child link="child_link"/> <origin xyz="0 0 0" rpy="0 0 0"/> </joint> <link name="child_link"> <inertial> <mass value="1.0"/> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> <xacro:my_robot_visualization/> <xacro:my_robot_collision/> </link> </robot> ``` 这个Xacro文件使用了my_robot_macros.xacro文件定义的宏来简化URDF文件的编写。每个链接都包含了可视化信息和碰撞信息,而这些信息都可以在宏定义和修改。注意,在生成URDF文件时,需要使用xacro工具将Xacro文件转换为URDF文件。可以使用以下命令进行转换: ``` rosrun xacro xacro my_robot.urdf.xacro > my_robot.urdf ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值