ROS:URDF文件编写语法

URDF文件编写语法

urdf文件是标准xml文件,预定义了一些列标签用于描述机器人模型,主要分为两类连杆(link)与关节(joint)

  • 连杆:机器人的可见部分,即刚体部分
  • 关节:连杆之间饿关系连接(关节),但是关节这部分在直观上是不可见的
  • robot:类似跟标签的存在
  • gazebo:gazebo仿真时使用的标签,用于配置机器人的所需参数,如机器人的材料属性,gazebo插件等,但这类标签并不必须,只有在需要仿真时设置。

(1)robot标签

  urdf为了保证xml文件语法完整性,使用robot标签作为跟标签,所有的 link 和 joint 以及其他标签都必须包含在 robot 标签内,在该标签内可以通过 name 属性设置机器人模型的名称。

(2)link标签

  描述机器人某部件的外观和刚体属性,比如: 机器人底座、轮子、激光雷达、摄像头…每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性

编写urdf文件时,关键在于要理清层级关系

1.属性
name —> 为连杆命名
2.子标签
visual —> 描述外观(对应的数据是可视的)

① geometry 设置连杆的几何形状

​ 标签1: box(盒状)

​ 属性:size=长(x) 宽(y) 高(z)
​ 标签2: cylinder(圆柱)

​ 属性:radius=半径 length=高度
​ 标签3: sphere(球体)

​ 属性:radius=半径
​ 标签4: mesh(为连杆添加皮肤)

​ 属性: filename=资源路径(格式:\package:/// /文件)

示例如下:

<!-- 设置不同形状的机器人部件 -->
<robot name="mycar">
    <link name="base_link">
        <!-- 可视化标签 -->
        <visual>
            <!-- 形状 -->
            <geometry>
                <!-- 立方体 -->
                <!-- <box size="0.3 0.2 0.1"/> -->
                <!-- 圆柱体-->
                <!-- <cylinder radius="0.2" length="1"/> -->
                <!--  球体-->
                <!-- <sphere radius="1"/> -->
                <!-- 添加皮肤 -->
                <mesh filename="package://urdf_rviz/meshes/autolabor_mini.stl"/>
            </geometry>
        </visual>
    </link>
</robot>

②origin 设置偏移量与倾斜弧度

​ 属性1: xyz=x偏移 y便宜 z偏移

​ 属性2: rpy=x翻滚 y俯仰 z偏航 (单位是弧度)

示例如下:

  <!-- 偏移量与倾斜弧度 -->
            <!-- xyz:设置分别在xyz上的偏移量
            rpy用于设置xyz三个方向的旋转角 -->
            <origin xyz='0 0 0' rpy='1.57 0 0'/>

③metrial 设置材料属性(颜色)

​ 属性: name

​ 标签: color

​ 属性: rgba=红绿蓝权重值与透明度 (每个权重值以及透明度取值[0,1])

示例如下:

 <!-- 颜色 -->
            <!-- rgba:
            rgb三原色,a透明度,四个值取值都在0到1之间 -->
            <material name="car_color">
                <color rgba = "0.7 0.34 0.8 0.5"/>
            </material>

collision —> 连杆的碰撞属性

Inertial —> 连杆的惯性矩阵

(3)joint标签

​ urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限,机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,不同的关节有不同的运动形式: 旋转、滑动、固定、旋转速度、旋转角度限制…,比如:安装在底座上的轮子可以360度旋转,而摄像头则可能是完全固定在底座上。joint标签对应的数据在模型中是不可见的。

  1. 属性
  • name —> 为关节命名
  • type —> 关节运动形式
    • continuous: 旋转关节,可以绕单轴无限旋转
    • revolute: 旋转关节,类似于 continues,但是有旋转角度限制
    • prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
    • planer: 平面关节,允许在平面正交方向上平移或旋转
    • floating: 浮动关节,允许进行平移、旋转运动
    • fixed: 固定关节,不允许运动的特殊关节
  1. 子级标签
  • parent(必需的)

    parent link的名字是一个强制的属性:

    • link:父级连杆的名字,是这个link在机器人结构树中的名字。
  • child(必需的)

    child link的名字是一个强制的属性:

    • link:子级连杆的名字,是这个link在机器人结构树中的名字。
  • origin

    • 属性: xyz=各轴线上的偏移量 rpy=各轴线上的偏移弧度。
  • axis

    • 属性: xyz用于设置围绕哪个关节轴运动。
<!-- 需求:设置机器人底盘,并添加摄像头 -->
<robot name="mycar">
    <!-- 1 底盘link -->
    <link name="base_link">
        <!-- 可视化标签 -->
        <visual>
            <!-- 形状 -->
            <geometry>
                <!-- 立方体 -->
                <box size="0.3 0.2 0.1"/>
            </geometry>
            <!-- 偏移量与倾斜弧度 -->
            <!-- xyz:设置分别在xyz上的偏移量
            rpy用于设置xyz三个方向的旋转角 -->
            <origin xyz='0 0 0' rpy='0 0 0'/>

            <!-- 颜色 -->
            <!-- rgba:
            rgb三原色,a透明度,四个值取值都在0到1之间 -->
            <material name="car_color">
                <color rgba = "0.3 0.4 0.8 0.8"/>
            </material>
        </visual>
    </link>

    <!-- 2 摄像头link -->
    <link name="camera">
        <!-- 可视化标签 -->
        <visual>
            <!-- 形状 -->
            <geometry>
                <!-- 立方体 -->
                <box size="0.03 0.05 0.05"/>
            </geometry>
            <!-- 偏移量与倾斜弧度 -->
            <!-- xyz:设置分别在xyz上的偏移量
            rpy用于设置xyz三个方向的旋转角 -->
            <origin xyz='0 0 0.025' rpy='0 0 0'/>
            <!-- 需要上移半个摄像头的高度,才不会导致摄像头内嵌在机器人车体里 -->
            <!-- 颜色 -->
            <!-- rgba:
            rgb三原色,a透明度,四个值取值都在0到1之间 -->
            <material name="car_color">
                <color rgba = "0 1 0 0.8"/>
            </material>
        </visual>
    </link>
    <!-- 3 关节 -->
    <joint name="camera_to_link" type="continuous">
        <!-- 父级link -->
        <parent link="base_link"/>
        <!-- 子级link -->
        <child link="camera"/>
        <!-- 设置偏移量 -->
        <origin xyz='0.13 0 0.05' rpy='0 0 0'/>
        <!-- 设置关节旋转参考的坐标轴 -->
        <axis xyz='0 0 1'/>
    </joint>
</robot>

launch文件编写:

<launch>
    <!-- 1、在参数服务器载入urdf文件 -->
    <param name="robot_description" textfile="$(find urdf_rviz)/urdf/urdf/joint.urdf"/>
    <!-- 2、启动rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf_rviz)/config/showmycar.rviz"/>
    <!-- 注意:只有上述两条语句时会抛出异常:显示位置与颜色异常,给出提示 no transform from camera to baselink(缺少坐标变换) -->
    <!-- 原因:rviz中显示urdf时.必须发布不同部件之间的坐标系关系 -->
    <!-- 解决:ROS中提供的关于机器人模型显示的坐标发布相关节点(joint_state_publisher 和 robot_state_publisher) -->
    <!-- 关节状态发布节点 -->
    <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher"/>
    <!-- 机器人状态发布节点 -->
    <node pkg="robot_state_publisher" type="robot_state_publisher" 
name="robot_state_publisher"/>
    <!--添加控制机器人关节运动的节点-->
    <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"
name="joint_state_publisher_gui"/>
</launch>

注意:关节控制节点不是必须的,它的作用在于提供一个控制关节节点运动的UI界面,便于调试urdf文件是否正常。

猜你喜欢

转载自blog.csdn.net/weixin_45205599/article/details/129538780