zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用Feign访问接口
    IDEA 更改提示一键补全快捷键
    Mac配置Gradle环境
    RestSharp Simple REST and HTTP API Client for .NET
    Vue 一个注册页面有省市联动
    Authentication 接口验证访问 (C#)
    WebService快速入门文档
    自己写了个MongoDB的CRUD文档
    RabbitMQ入门教程
    dubbo简单入门使用
  • 原文地址:https://www.cnblogs.com/tan-wm/p/14187027.html
Copyright © 2011-2022 走看看