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

2020-11-17  本文已影响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文件

<?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>

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

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. 注意事项

<exec_depend>joint_state_publisher_gui</exec_depend>

5. 参考链接

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

上一篇下一篇

猜你喜欢

热点阅读