美文网首页
创建简单的机器人模型smartcar项目复现总结

创建简单的机器人模型smartcar项目复现总结

作者: 酵母小木 | 来源:发表于2020-11-17 11:12 被阅读0次

    最近在学习一下ROS中URDF的使用,参照古月大佬的文章,建立一个简单的智能车机器人smartcar.

    1. 设计智能车结构

    智能车采用四个轮子+长方体车体的结构,车体大小为25X16X5cm,轮子大小为直径为5cm,高度为2cm。下图为古月给出的模型图:


    智能车尺寸数据

    项目的文件夹结构:

    .
    ├── CMakeLists.txt
    ├── config                                    (配置folder)
    │   ├── smartcar_urdf.launch
    │   └── smart_urdf.rviz
    ├── launch                                    (启动配置folder)
    │   └── base_urdf_rviz.launch
    ├── meshes
    ├── package.xml
    └── urdf                                      (模型folder)
        ├── smartcar.gv
        ├── smartcar.pdf
        └── smartcar.urdf
    

    2. 建立URDF文件

    • 2.1. URDF代码
      相关包怎么建立以及文件夹结构可以参考古月大佬的博客,这里只贴入代码,用于记录:
    <?xml version="1.0"?>  
    <robot name="smartcar">  
      <link name="base_link">  
        <visual>  
          <geometry>  
            <box size="0.25 .16 .05"/>  
        </geometry>  
        <origin rpy="0 0 1.57075" xyz="0 0 0"/>  
        <material name="blue">  
            <color rgba="0 0 .8 1"/>  
        </material>  
        </visual>  
    </link>   
      
      <joint name="right_front_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="right_front_wheel"/>  
        <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
      </joint>  
      
    <link name="right_front_wheel">  
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
      </link> 
    
      <joint name="right_back_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="right_back_wheel"/>  
        <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
    </joint>  
    
      <link name="right_back_wheel">  
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
      </link>  
      
      <joint name="left_front_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="left_front_wheel"/>  
        <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
      </joint>  
      
    <link name="left_front_wheel">  
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
      </link>  
      
      <joint name="left_back_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="left_back_wheel"/>  
        <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
      </joint>  
      
      <link name="left_back_wheel">  
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
      </link>  
    
      <joint name="tobox" type="fixed">  
        <parent link="base_link"/>  
        <child link="head"/>  
        <origin xyz="0 0.08 0.025"/>  
      </joint>  
      
      <link name="head">  
        <visual>  
          <geometry>  
            <box size=".02 .03 .03"/>  
          </geometry>  
          <material name="white">  
              <color rgba="1 1 1 1"/>  
          </material>  
        </visual>  
      </link>
     
    </robot>
    
    • 2.2. linkjoint的变换关系
      link分为base_link一般linkbase_link的几何中心默认为世界中心。一般情况下,在描述base_link时,若无偏移,则<origin xyz="0 0 0" rpy="0 0 0"/>,其中旋转采用弧度表示,比如90°使用1.57075,对应π/2。

    一般link的相对位置是根据joint的位置确定的。

    • 先定义joint,再定义link
    • link中的origin描述的是link的几何中心相对于该linkjoint的位置变化;
    • joint中的origin描述的是本joint相对于其父linkjoint的位置变化;

    3. 建立launch命令文件

    smartcar_description文件夹下建立launch文件夹,创建智能车的描述文件 base_urdf_rviz.launch,描述代码如下:

    <launch>     
        <arg name="model" />      
        <arg name="gui" default="False" />     
    
        
        <param name="robot_description" textfile="$(find smartcar_description)/urdf/smartcar.urdf" />      
    
        <!-- 设置GUI参数,显示关节控制插件 -->
        <param name="use_gui" value="$(arg gui)"/>     
    
        <!-- 运行joint_state_publish节点,发布机器人关节装态 -->
        <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 urdf_tutorial)/urdf.vcg" /> 
    </launch>
    

    但由于版本问题,上述的代码需要进行更改

    <launch>     
        <arg name="model" />      
        <arg name="gui" default="False" />     
    
        
        <param name="robot_description" textfile="$(find smartcar_description)/urdf/smartcar.urdf" />      
    
        <!-- 设置GUI参数,显示关节控制插件 -->
        <param name="use_gui" value="$(arg gui)"/>     
    
        <!-- 将joint_state_publish节点更换为joint_state_publish_gui节点 -->
        <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" /> 
    
        <!-- 运行robot_state_publisher节点,发布TF -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />    
    
        <!-- 不使用urdf_tutorial,在加载rviz之后,保存配置文件到该文件夹下 -->
        <node name="rviz" pkg="rviz" type="rviz" args="-d $(find smartcar_description)/config/smartcar.rviz" required="true" /> 
    </launch>
    

    4. 注意事项

    • 4.1.joint_state_publish_gui安装
      由于joint_state_publish功能包更新为joint_state_publish_gui功能包,所以需要重新安装,在终端输入指令sudo apt-get install ros-kinetic-joint-state-publisher-gui,同时更新对应的节点名称,将joint_state_publish节点更换为joint_state_publish_gui节点。
    • 4.2. package.xml文件更新
      另外需要再package.xml文件中更新依赖库,添加一行
    <exec_depend>joint_state_publisher_gui</exec_depend>
    

    5. 参考链接

    【1】 Melodic 使用URDF创建简单的机器人模型
    【2】ROS探索总结(五)——创建简单的机器人模型smartcar
    【3】joint_state_publisher功能包

    相关文章

      网友评论

          本文标题:创建简单的机器人模型smartcar项目复现总结

          本文链接:https://www.haomeiwen.com/subject/kqqxiktx.html