欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ROS1学习笔记--urdf

程序员文章站 2022-06-04 16:13:38
...

urdf文件上是ROS上一个非常重要的机器人模型描述格式。

在建立一个机器人模型之前,先来了解一下我们待会会在urdf文件中用到的一系列标签。

1. <link>标签

ROS1学习笔记--urdf

  • 描述机器人某个刚体部分的外观和物理属性
  • 尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数等(collision properties)等
<link name="<link_name>">
   <visual>...</visual>
   <collision>...</collision>
   <inertial>...</inertial>
</link>
  • <visul>描述机器人link部分的外观参数,如size,color,shape等
  • <inertial>描述link的惯性参数
  • <collosion>描述link的碰撞属性

**如果要在gazebo中进行物理仿真,就要添加物理属性和碰撞属性了

2 .<joint>标签

ROS1学习笔记--urdf

  • 描述机器人关节的运动学和动力学属性
  • 包括关节运动的位置和速度限制
  • 根据关节运动形式,可以将其分为6种类型,如下所示:
  •  固定关节:fixed,不允许运动
  • 转动关节:revolute,类似与continus,有旋转角度极限
  • 滑动关节:prismatic,沿着某一轴线运动的关节,带有位置极限
  • 浮动关节:floating,运行进行平移,旋转运动
  • 平面运动关节:planner,允许在平面正交方向上平移或旋转
  • 旋转关节:continus,可以绕某轴线无限旋转
<joint name="<name of the joint>" type="<joint type>">
  <parent link="child link"/>
  <child link="child_link"/>
  <calibration..../>
  <dynamics damping.../>
  <limit effort.../>
</joint>
  • <calibration>关节的参考位置,用来校准关节的绝对位置
  • <dynamics>描述关节的物理属性,例如阻尼值,物理静摩擦力等
  • <limit>描述运动的一些极限值,包括关节运动的上下限极限位置、速度限制、力矩限制等
  • <mimic>描述该关节与已有关节的关系
  • <safety_controller>描述安全控制器参数
(其实笔者很多参数都没用到啦~~因为小白,还希望可以和大家多多交流~~)

3. <robot>标签

ROS1学习笔记--urdf



  • 完整机器人模型的最顶层标签
  • <link>和<joint>标签都必须包含在内

4. <gazebo>标签

5.代码实例

下面是一个四轮小车的简单模型代码

<?xml version="1.0" ?>
<robot name="mbot">

   <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <box size="0.8 0.550 0.3"/>
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>

     <joint name="left_front_wheel_joint" type="continuous">
        <origin xyz="0.25 0.306 -0.1" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_front_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_front_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.122" length = "0.062"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 1"/>
            </material>
        </visual>
    </link>

    <joint name="left_back_wheel_joint" type="continuous">
        <origin xyz="-0.25 0.306 -0.1" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_back_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_back_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.122" length = "0.062"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 1"/>
            </material>
        </visual>
    </link>

     <joint name="right_front_wheel_joint" type="continuous">
        <origin xyz="0.25 -0.306 -0.12" rqy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_front_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="right_front_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.122" length = "0.062"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 1"/>
            </material>
        </visual>
    </link>

    <joint name="right_back_wheel_joint" type="continuous">
        <origin xyz="-0.25 -0.306 -0.1" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_back_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="right_back_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.122" length = "0.062"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 1"/>
            </material>
        </visual>
    </link>

用.launch文件启动:

<launch>
	<param name="robot_description" textfile="$(find fourwheelrobot_description)/urdf/urdf/fourwheelrobot_base.urdf" />

	<!-- 设置GUI参数,显示关节控制插件 -->
	<param name="use_gui" value="true"/>
	
	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find fourwheelrobot_description)/config/fourwheelrobot_urdf.rviz" required="true" />
</launch>	
模型rviz可视化如下图:

ROS1学习笔记--urdf





参考网站:官方wiki--tf

官方指导网站:Tutorials

某个博主翻译的中文版:中文tutorials

古月大神:urdf解读

官方模型案例:Examples

xml语法规范:http://wiki.ros.org/urdf/XML