• ROS中的3D机器人建模(二)


    一,创建我们的第一个URDF模型

    我们设计的第一个机器人模型是pan-and-tilt机械结构,代码如下 

    pan_tilt.urdf:

     1 <?xml version="1.0"?>
     2 <robot name="pan_tilt">
     3 
     4   <link name="base_link">
     5 
     6     <visual>
     7       <geometry>
     8     <cylinder length="0.01" radius="0.2"/>
     9       </geometry>
    10       <origin rpy="0 0 0" xyz="0 0 0"/>
    11       <material name="yellow">
    12         <color rgba="1 1 0 1"/>
    13       </material>
    14     </visual>
    15 
    16     <collision>                                                            
    17       <geometry>
    18     <cylinder length="0.03" radius="0.2"/>
    19       </geometry>
    20       <origin rpy="0 0 0" xyz="0 0 0"/>
    21     </collision>
    22     <inertial>
    23     <mass value="1"/>
    24     <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    25     </inertial>
    26   </link>
    27 
    28   <joint name="pan_joint" type="revolute">
    29     <parent link="base_link"/>
    30     <child link="pan_link"/>
    31     <origin xyz="0 0 0.1"/>
    32     <axis xyz="0 0 1" />
    33     <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
    34     <dynamics damping="50" friction="1"/>
    35   </joint>
    36 
    37   <link name="pan_link">
    38     <visual>
    39       <geometry>
    40     <cylinder length="0.4" radius="0.04"/>
    41       </geometry>
    42       <origin rpy="0 0 0" xyz="0 0 0.09"/>
    43       <material name="red">
    44         <color rgba="0 0 1 1"/>
    45       </material>
    46     </visual>
    47     <collision>
    48       <geometry>
    49     <cylinder length="0.4" radius="0.06"/>
    50       </geometry>
    51       <origin rpy="0 0 0" xyz="0 0 0.09"/>
    52     </collision>
    53     <inertial>
    54     <mass value="1"/>
    55     <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> 
    56     </inertial>
    57   </link>
    58 
    59   <joint name="tilt_joint" type="revolute">
    60     <parent link="pan_link"/>
    61     <child link="tilt_link"/>
    62     <origin xyz="0 0 0.2"/>
    63     <axis xyz="0 1 0" />
    64     <limit effort="300" velocity="0.1" lower="-4.64" upper="-1.5"/>
    65     <dynamics damping="50" friction="1"/>
    66   </joint>
    67 
    68   <link name="tilt_link">
    69     <visual>
    70       <geometry>
    71     <cylinder length="0.4" radius="0.04"/>
    72       </geometry>
    73       <origin rpy="0 1.5 0" xyz="0 0 0"/>
    74       <material name="green">
    75         <color rgba="1 0 0 1"/>
    76       </material>
    77     </visual>
    78     <collision>
    79       <geometry>
    80     <cylinder length="0.4" radius="0.06"/>
    81       </geometry>
    82       <origin rpy="0 1.5 0" xyz="0 0 0"/>
    83     </collision>                                                           
    84     <inertial>
    85     <mass value="1"/>
    86     <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    87     </inertial>
    88 
    89   </link>
    90 
    91 
    92 </robot>            
    

    详解URDF文件

    <?xml version= "1.0"?>

    <robot name = "pan_tilt">

    <robot>标签定义了我们将要创建的机器人的名称。在这里,我们将机器人命名为pan_tilt.

    如果我们查看<robot>标签定义之后的部分,我们可以看到pan-and-tilt机器结构中连杆和关节的定义:

    <link name ="base_link">

       <visual>

         <geometry>

        <cylinder length= "0.01" radius = "0.2"/>

       </geometry>

       <origin rpy= "0 0 0" xyz="0 0 0"/>

       <material name = "yellow">

          <color rgba>="1 1 0 1"/>

        </material>

     </visual>

    </link>

    前面的这段代码是pan-and-tilt机械结构的base_link的定义。<visual>标签描述了连杆的可见外观,它将在机器人仿真中显示出来。我们就可以用这个标签来定义连杆的几何形状(圆柱、立方体、球体、网络模型)以及连杆的材质(颜色和纹理)。

    <joint name="pan_joint " type ="revolute">

       <parent link = "base_link"/>

       <child link="pan_link"/>

       <origin xyz="0 0 0.1"/>

      <axis xyz ="0 0 1"/>

    </joint>

    在前面的代码片段中,我们定义了一个具有唯一名称和关节类型的关节。在这里我们使用的关节类型是旋转关节(revolute),父连杆和子连杆分别是base_link和pan_link。在此标签内还指定了关节原点。

    然后检查urdf是否包含错误,命令如下:

    $ check_urdf pan_tilt.urdf

    check_urdf命令将解析urdf标签并显示错误(如果有的话),如果一切正常,他将输出如下内容:

    robot name is: pan_tilt
    ---------- Successfully Parsed XML ---------------
    root Link: base_link has 1 child(ren)
        child(1):  pan_link
            child(1):  tilt_link
    

     如果我们想以图形化的方式查看机器人连杆和关节的结构,我们可以使用一个名为urdf_to_graphiz的命令行工具:

    $ urdf_to_graphiz pan_tilt.urdf

    这个命令将生成两个文件:pan_tilt.gv和pan_tilt.pdf.

    我们可以使用以下命令来查看此机器人的结构:

    $ evince pan_tilt.pdf

    如图所示:

    二,在RViz中可视化机器人3D模型

    设计好URDF后,可以在RViz上查看它。我们可以创建一个view_demo.launch启动文件,代码如下:

     1 <launch>                                                                   
     2   <arg name="model" />
     3   <param name="robot_description" textfile="$(find mastering_ros_robot_desc   ription_pkg)/urdf/pan_tilt.urdf" />
     4   <param name="use_gui" value="true"/>
     5 
     6   <node name="joint_state_publisher" pkg="joint_state_publisher" type="join   t_state_publisher" />
     7   <node name="robot_state_publisher" pkg="robot_state_publisher" type="stat   e_publisher" />
     8   <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mastering_ros_ro   bot_description_pkg)/urdf.rviz" required="true" />
     9 
    10 </launch>
    11 
    

     我们使用如下命令来启动模型:

    $ roslaunch mastering_ros_robot_description_pkg view_demo.launch

    如果一切正常,我们将在RViz中看到这个pan-and-tilt机械结构,如图所示

  • 相关阅读:
    leetcode-654-最大二叉树
    leetcode-46-全排列
    图片懒加载?
    HTTP常见的状态码?
    线程与进程的区别?
    网页从输入网址到渲染完成经历了哪些过程?
    网页前端性能优化的方式有哪些?
    常见的浏览器内核有哪些?
    汇编语言--cpu的工作原理(寄存器)--手稿
    对于 vue3.0 特性你有什么了解的吗?
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/12271541.html
Copyright © 2020-2023  润新知