美文网首页
创建简单的机器人模型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项目复现总结

    最近在学习一下ROS中URDF的使用,参照古月大佬的文章[https://www.guyuehome.com/24...

  • smartcar项目(二):xacro改造和ArbotiX控制仿

    在复现ROS探索总结(六)——使用smartcar进行仿真[https://www.guyuehome.com/2...

  • 四阶段day3-django数据库与模型的配置

    一、做项目时是先创模型还是先创建数据库 1、 正向工程:通过面向对象的模型迁移创建数据库的二维表(模型相对比较简单...

  • 无趣的强敌

    用简单的模型复现复杂的现象,足以使模型构筑者倍受鼓舞。 然而当一个复杂的故事可以用太过简单的模型去代替的时候,其实...

  • django入门总结

    django入门思维导图 项目思路:创建项目 --> 创建应用并且注册应用 --> 创建模型 --> 创建视图...

  • Ajax跨域问题及解决方案

    复现Ajax跨域问题 做两个简单的小项目复现Ajax跨域问题. 后端语言使用Java 首先是一个简单的订单系统, ...

  • Django项目部署

    文档参考 参考菜鸟教程 官方文档教程 软件安装 安装Django ## 创建项目 启动项目 创建模型 创建项目内子...

  • MG--Swift3.0简单使用CoreData

    问题:什么时候使用CoreData?数据模型之间关系比较简单的时候 如何简单使用CoreData1.创建一个项目勾...

  • 开发流程

    开发流程  创建 Django 项目 创建应用 模型 数据库配置 数据库表的定义 定义模型...

  • 2018-11-27 模型基础

    一、模型介绍  1. 创建一个简单的学生模型 2. 配置数据库 2.1 在项目文件夹下的setting.py中修改...

网友评论

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

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