ros建模与仿真(urdf介绍)

机器人描述格式:.urdf(使用XML格式描述模型)

 

 1 <?xml version="1.0" ?>
 2 <!-- 最外层标签为robot -->
 3 <robot name="mrobot_chassis">
 4     <!-- link标签描述机器人某个刚体的外观和物理属性 -->
 5     <link name="base_link">
 6         <!-- visual描述这个link的外观参数 -->
 7         <visual>
 8             <!-- origin表示位置标签:xyz为空间位置,包含x,y,z值;rpy是方位角,包含roll、pitch、yaw值 -->
 9             <origin xyz=" 0 0 0" rpy="0 0 0" />
10             <geometry>
11                 <cylinder length="0.005" radius="0.13"/>
12             </geometry>
13             <!-- material标签可以描述这个刚体的颜色 -->
14             <material name="yellow">
15                 <color rgba="1 0.4 0 1"/>
16             </material>
17         </visual>
18         <!-- inertial为惯性参数 -->
19         <inertial>
20             <mass value="2" />
21             <origin xyz="0 0 0.0" />
22             <inertia ixx="0.01" ixy="0.0" ixz="0.0"
23                      iyy="0.01" iyz="0.0" izz="0.5" />
24         </inertial>
25         
26         <!-- collision描述碰撞属性,就是用一个几何体用来代替link,这个几何体比visual中描述的要简约以利于简化碰撞计算 -->
27         <collision>
28             <origin xyz="0 0 0" rpy="0 0 0" />
29             <geometry>
30                 <cylinder length="0.005" radius="0.13" />
31             </geometry>
32         </collision>
33     </link>
34 
35     <!-- joint为连接两个link的关节 -->
36     <joint name="base_left_motor_joint" type="fixed">
37         <origin xyz="-0.055 0.075 0" rpy="0 0 0" />        
38         <parent link="base_link"/>
39         <child link="left_motor" />
40     </joint>
41 
42     <link name="left_motor">
43         <visual>
44             <origin xyz="0 0 0" rpy="1.5707 0 0" />
45             <geometry>
46                 <cylinder radius="0.02" length = "0.08"/>
47             </geometry>
48             <material name="gray">
49                 <color rgba="0.75 0.75 0.75 1"/>
50             </material>
51         </visual>
52     </link>
53 
54 </robot>

 

各标签下的子标签及释义(以下内容转自:https://blog.csdn.net/weixin_30640769/article/details/96914796)

 

urdf提供一些工具来帮助我们检查、梳理模型文件,需要在终端中安装该工具:sudo apt install libburdfdom-tools

然后可以使用check_urdf命令对模型文件xxx.urdf进行检查:

check_urdf xxx.urdf

可以使用以下命令查看模型整体结构(生成一个pdf)

urdf_to_graphiz xxx.urdf

 

在rviz中显示模型:

在launch文件中定义在rviz中显示模型

各功能包放在工作空间的src目录下,

然后在src目录下执行创建新功能包命令:

catkin_create_pkg <pkg_name> [depend1] [depend2] [depend3]

<pkg_name>即功能包名称(一般也是src中功能包文件夹的名称),后面的depend是这个功能包的依赖

然后回到工作空间目录执行:

catkin_make

然后使环境变量生效:

source devel/setup.bash

我们将功能包文件夹放到工作空间src目录并执行创建功能包命令、使环境变量生效后,可在任何路径下执行以下命令来启动功能包中的launch文件:

roslaunch <pkg_name> xxx.launch

 

urdf因为不支持代码复用,所以写起来可能会有很多重复的内容。xacro是另一种精简化、可复用、 模块化的描述格式,他的语法支持一些可编程接口,如常量、变量、数学公式、宏定义、条件语句等。

例如宏定义:

1 <xacro:property name="M_PI" value="3.14159"/>

例如调用数学公式:

<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0"/>

同样的模型,我们可以定义xacro:

<xacro:macro name="mrobot_standoff_2in" params="parent number x_loc y_loc z_loc">  <!-- params表示入参有5各个:parent, number, x_loc, y_lov, z_loc -->
        <joint name="standoff_2in_${number}_joint" type="fixed">
            <origin xyz="${x_loc} ${y_loc} ${z_loc}" rpy="0 0 0" />
            <parent link="${parent}"/>
            <child link="standoff_2in_${number}_link" />
        </joint>

        <link name="standoff_2in_${number}_link">
            <inertial>
                <mass value="0.001" />
                <origin xyz="0 0 0" />
                <inertia ixx="0.0001" ixy="0.0" ixz="0.0"
                         iyy="0.0001" iyz="0.0"
                         izz="0.0001" />
            </inertial>

            <visual>
                <origin xyz=" 0 0 0 " rpy="0 0 0" />
                <geometry>
                    <box size="0.01 0.01 0.07" />
                </geometry>
                <material name="black">
                    <color rgba="0.16 0.17 0.15 0.9"/>
                </material>
            </visual>

            <collision>
                <origin xyz="0.0 0.0 0.0" rpy="0 0 0" />
                <geometry>
                    <box size="0.01 0.01 0.07" />
                </geometry>
            </collision>
        </link>
    </xacro:macro>

可以这样调用来创造出4个对象:

<mrobot_standoff_2in parent="base_link" number="1" x_loc="-${standoff_x/2 + 0.03}" y_loc="-${standoff_y - 0.03}" z_loc="${plate_height/2}"/>
<mrobot_standoff_2in parent="base_link" number="2" x_loc="-${standoff_x/2 + 0.03}" y_loc="${standoff_y - 0.03}" z_loc="${plate_height/2}"/>
<mrobot_standoff_2in parent="base_link" number="3" x_loc="${standoff_x/2}" y_loc="-${standoff_y}" z_loc="${plate_height/2}"/>
<mrobot_standoff_2in parent="base_link" number="4" x_loc="${standoff_x/2}" y_loc="${standoff_y}" z_loc="${plate_height/2}"/>

 如果要在一个xacro文件中引用另一个xacro文件,可使用形如下面的语句:

<xacro:include filename="$(find mrobot_description)/urdf/mrobot_body.urdf.xacro" />

 

将xacro文件转换成urdf文件:

我们可以先写xacro,再用xacro生成urdf:

rosrun xacro xacro.py xxx.xacro > xxx.urdf

以上命令将xxx.xacro转化为xxx.urdf,然后就可以用上面介绍的方法将urdf模型显示在rviz中

当然也可以在launch文件中进行配置,,直接运行launch文件就可以将xacro定义的模型显示在rviz中

 

 

 

 

 

 

 

 

check_urdf

posted @ 2020-12-29 23:34  大黑耗  阅读(1063)  评论(0编辑  收藏  举报