• 统一机器人描述格式——URDF


    URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,ROS同时也提供URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。

    在使用URDF文件构建机器人模型之前,有必要先梳理一下URDF文件中常用的XML标签,对URDF有一个大概的了解。

    <link>标签
    
    • 1

    标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。

    机器人的link结构一般如图6-1所示,其基本的URDF描述语法如下:

    <link name="">
    	<inertial> . . . . . . </inertial>
    	<visual> . . . . . . </visual>
    	<collision> . . . . . . </collision>
    </link>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    标签用于描述机器人link部分的外观参数,标签用于描述link的惯性参
    数,而标签用于描述link的碰撞属性。从下图可以看到,检测碰撞的link区域大于外
    观可视的区域,这就意味着只要有其他物体与collision区域相交,就认为link发生碰撞。

    6-1
    标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制。根据机器人的关节运动形式,可以将其分为六种类型

    URDF模型中的joint类型

    在这里插入图片描述
    与人的关节一样,机器人关节的主要作用是连接两个刚体link,这两个link分别称为parent link和child link,如图

    在这里插入图片描述
    标签的描述语法如下:

    <joint name="">
    	<parent link="parent_link"/>
    	<child link="child_link"/>
    	<calibration .... />
    	<dynamics damping ..../>
    	<limit effort .... />
    	....
    </joint>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其中必须指定joint的parent link和child link,还可以设置关节的其他属性。

    calibration>:关节的参考位置,用来校准关节的绝对位置。

    dynamics>:用于描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到。

    limit>:用于描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等。

    mimic>:用于描述该关节与已有关节的关系。

    safety_controller>:用于描述安全控制器参数。

    robot>标签

    是完整机器人模型的最顶层标签,和标签都必须包含在标签 内。

    如下图所示,一个完整的机器人模型由一系列和组成。

    在这里插入图片描述

    <robot name="">
    	<link> ....... </link>
    	<link> ....... </link>
    	<joint> ....... </joint>
    	<joint> ....... </joint>
    </robot>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    标签

    标签用于描述机器人模型在Gazebo中仿真所需要的参数,包括机器人材料的属性、Gazebo插件等。该标签不是机器人模型必需的部分,只有在Gazebo仿真时才需加入。

    该标签的基本语法如下:

    <gazebo reference="link_1">
    <material>Gazebo/Black</material>
    </gazebo>
    
    • 1
    • 2
    • 3

    创建机器人URDF模型

    在ROS中,机器人的模型一般放在RobotName_description功能包下。下面尝试仿照MRobot 机器人从零开始创建一个移动机器人的URDF模型

    创建机器人描述功能包

    可以使用如下命令创建一个新的功能包:

    catkin_create_pkg mrobot_description urdf xacro
    
    • 1

    mrobot_description功能包中包含urdf、meshes、launch和config四个文件夹

    • urdf:用于存放机器人模型的URDF或xacro文件。
    • meshes:用于放置URDF中引用的模型渲染文件。
    • launch:用于保存相关启动文件。
    • config:用于保存rviz的配置文件

    创建URDF模型

    在之前的学习中,我们已经大致了解了URDF模型中常用的标签和语法,接下来使用这些基本语法创建一个如图所示的机器人底盘模型。

    在这里插入图片描述
    这个机器人底盘模型有7个link和6个joint。

    7个link包括1个机器人底板、2个电机、2个驱动轮和2个万向轮;
    6个joint负责将驱动轮、万向轮、电机安装到底板上,并设置相应的连接方式。

    先来看一下该模型文件mrobot_description/urdf/mrobot_chassis.urdf的具体内容:

    <?xml version="1.0" ?>
    <robot name="mrobot_chassis">
    <link name="base_link">
    	<visual>
    	<origin xyz=" 0 0 0" rpy="0 0 0" />
    		<geometry>
    		<cylinder length="0.005" radius="0.13"/>
    		</geometry>
    	<material name="yellow">
    	<color rgba="1 0.4 0 1"/>
    	</material>
    	</visual>
    </link>
    <joint name="base_left_motor_joint" type="fixed">
    	<origin xyz="-0.055 0.075 0" rpy="0 0 0" />
    	<parent link="base_link"/>
    	<child link="left_motor" />
     </joint>
    <link name="left_motor">
    	<visual>
    	<origin xyz="0 0 0" rpy="1.5707 0 0" />
    	<geometry>
    	<cylinder radius="0.02" length = "0.08"/>
    	</geometry>
    	<material name="gray">
    	<color rgba="0.75 0.75 0.75 1"/>
    	</material>
    	</visual>
    </link>
    <joint name="left_wheel_joint" type="continuous">
    <origin xyz="0 0.0485 0" rpy="0 0 0"/>
    <parent link="left_motor"/>
    <child link="left_wheel_link"/>
    <axis xyz="0 1 0"/>
    </joint>
    <link name="left_wheel_link">
    <visual>
    <origin xyz="0 0 0" rpy="1.5707 0 0" />
    <geometry>
    <cylinder radius="0.033" length = "0.017"/>
    </geometry>
    <material name="white">
    <color rgba="1 1 1 0.9"/>
    </material>
    </visual>
    </link>
    <joint name="base_right_motor_joint" type="fixed">
    <origin xyz="-0.055 -0.075 0" rpy="0 0 0" />
    <parent link="base_link"/>
    <child link="right_motor" />
    </joint>
    <link name="right_motor">
    <visual>
    <origin xyz="0 0 0" rpy="1.5707 0 0" />
    <geometry>
    <cylinder radius="0.02" length = "0.08" />
    </geometry>
    <material name="gray">
    <color rgba="0.75 0.75 0.75 1"/>
    </material>
    </visual>
    </link>
    <joint name="right_wheel_joint" type="continuous">
    <origin xyz="0 -0.0485 0" rpy="0 0 0"/>
    <parent link="right_motor"/>
    <child link="right_wheel_link"/>
    <axis xyz="0 1 0"/>
    </joint>
    <link name="right_wheel_link">
    <visual>
    <origin xyz="0 0 0" rpy="1.5707 0 0" />
    <geometry>
    <cylinder radius="0.033" length = "0.017"/>
    </geometry>
    <material name="white">
    <color rgba="1 1 1 0.9"/>
    </material>
    </visual>
    </link>
    <joint name="front_castor_joint" type="fixed">
    <origin xyz="0.1135 0 -0.0165" rpy="0 0 0"/>
    <parent link="base_link"/>
    <child link="front_castor_link"/>
    <axis xyz="0 1 0"/>
    </joint>
    <link name="front_castor_link">
    <visual>
    <origin xyz="0 0 0" rpy="1.5707 0 0"/>
    <geometry>
     <sphere radius="0.0165" />
    </geometry>
    <material name="black">
    <color rgba="0 0 0 0.95"/>
    </material>
    </visual>
    </link>
    </robot>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97

    URDF提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端中独立安装:

    sudo apt-get install liburdfdom-tools
    
    • 1

    然后使用check_urdf命令对mrobot_chassis.urdf文件进行检查:

    check_urdf mrobot_chassis.urdf
    
    • 1

    check_urdf命令会解析URDF文件,并且显示解析过程中发现的错误。如果一切正常,在终端中会输出如图所示的信息。

    在这里插入图片描述
    还可以使用urdf_to_graphiz命令查看URDF模型的整体结构:

    urdf_to_graphiz mrobot_chassis.urdf
    
    • 1

    执行urdf_to_graphiz命令后,会在当前目录下生成一个pdf文件,打开该文件,可以看到模型的整体结构图

    在这里插入图片描述

  • 相关阅读:
    NLP工具集:【doccano】——标注平台doccano使用手册
    软件测试/测试开发丨Web自动化—capability参数配置 学习笔记
    云IDE产品评测感受
    PAT 1139 First Contact
    9.18 QT作业
    软件测试面试题及答案 这个在线题库的多种刷题模式能帮你快速通关
    利用NVIDIA GPU将Minecraft场景渲染成真实场景
    【自考必看】《信息资源管理》信息化规划与组织,第2章
    pnpm install报错 Value of “this“ must be of type URLSearchParams
    极简c++(8)抽象类与多态
  • 原文地址:https://blog.csdn.net/hai411741962/article/details/133790497