一、提要

欢迎来到中级模块!本模块将指导您完成创建新模拟功能并将该功能贡献给 Gazebo 的过程。

我们基础知识需要: Gazebo 、Linux。我们还假设您是一位专业的教程阅读者(仔细、完整地阅读所有内容)。

在本系列教程中,我们将创建一个 Velodyne HDL-32 LiDAR,我们将逐步完成

  1. 创建 HDL-32 传感器的 SDF 模型,
  2. 将模型贡献给 Gazebo 的模型数据库,
  3. 改善模型的外观和数据输出,
  4. 使用插件控制模型,以及
  5. 在 Gazebo 和 RViz 中可视化传感器数据。

上述每个主题都将有专门的教程解说。本教程的 重点是 Velodyne SDF 模型的创建。

二、生成模型

创建新模型的第一步是收集有关模型的信息。在这种情况下,Velodyne 激光雷达公司在其网站 Velodyne 的 HDL-32E 环绕激光雷达传感器 | 上提供了有关其传感器的文档。 Velodyne 激光雷达。如果没有关于模型的详细信息,那么您可以测量物理版本,询问制造商的规格,或者在最坏的情况下猜测。

根据 Velodyne 文档,我们将创建一个传感器,该传感器具有:

  1. 底部圆柱体和顶部圆柱体,顶部圆柱体在其中旋转,以及
  2. 一组垂直扇形定向的激光射线。

2.1 Step 1: 生成基座的 SDF模型

  1. 生成新文件.

    cd
    gedit velodyne.world
  2. 使用地平面和灯光填充世界文件:

    <?xml version="1.0" ?>
    <sdf version="1.5"><world name="default"><!-- A global light source --><include><uri>model://sun</uri></include><!-- A ground plane --><include><uri>model://ground_plane</uri></include></world>
    </sdf>
  3. 接下来,我们将 Velodyne LiDAR 的基础知识添加到 SDF 世界文件中。我们将使用 Velodyne 传感器尺寸来构建一个基圆柱体和一个顶部圆柱体。下面是 Velodyne 2D 绘图的屏幕截图。

  1. 将以下内容复制到 SDF 世界文件中,直接位于 </world> 标记之前。

    <model name="velodyne_hdl-32"><!-- Give the base link a unique name --><link name="base"><!-- Offset the base by half the lenght of the cylinder --><pose>0 0 0.029335 0 0 0</pose><collision name="base_collision"><geometry><cylinder><!-- Radius and length provided by Velodyne --><radius>.04267</radius><length>.05867</length></cylinder></geometry></collision><!-- The visual is mostly a copy of the collision --><visual name="base_visual"><geometry><cylinder><radius>.04267</radius><length>.05867</length></cylinder></geometry></visual></link><!-- Give the base link a unique name --><link name="top"><!-- Vertically offset the top cylinder by the length of the bottomcylinder and half the length of this cylinder. --><pose>0 0 0.095455 0 0 0</pose><collision name="top_collision"><geometry><cylinder><!-- Radius and length provided by Velodyne --><radius>0.04267</radius><length>0.07357</length></cylinder></geometry></collision><!-- The visual is mostly a copy of the collision --><visual name="top_visual"><geometry><cylinder><radius>0.04267</radius><length>0.07357</length></cylinder></geometry></visual></link>
    </model>
  2. 在构建新模型时,定期尝试小的更改是个好主意。启动 Gazebo 已暂停,以便您可以在物理引擎不改变模型姿势的情况下查看模型。还有一些其他图形工具可以帮助开发过程,我们将在本教程的过程中介绍这些工具。

  3. 暂停运行 Velodyne 世界(-u 参数)。

    cd
    gazebo velodyne.world -u
  4. 默认情况下,您会在模型中看到 <visual> 元素,这些元素定义了模型的外观。另一方面,<collision> 元素定义了模型在与其他模型碰撞时的行为方式。要查看和调试 <collision> 元素,请右键单击模型,然后选择“查看”->“碰撞”。现在试试这个,你应该会看到两个橙色圆柱体(由于它们的距离很近,看起来像一个圆柱体)。

2.2 Step 2: 添加惯性

此时,我们的 Velodyne 模型缺少惯性矩等动态属性。物理引擎使用惯性信息来计算模型在受力时的行为方式。具有不正确或没有惯性值的模型将以奇怪的方式表现。

1)首先可视化当前的惯性值。在 Gazebo 运行时,右键单击 Velodyne 并选择 View->Inertia。这将导致出现两个紫色框。

通常,每个紫色框应与与其关联的链接的大小大致匹配。您会注意到当前的惯性框非常大,这是由于我们的模型缺少惯性信息。

  1. 我们可以通过指定质量和惯性矩阵来为链接添加惯性。我们将质量基于 Velodyne 的指定质量,即 1.3 千克,并给予基本链接多数(此分布是我们的猜测)。惯性矩矩阵可以使用维基百科上的方程计算。

    以下是基础链接的惯性值。将 <inertial> 块复制到指定位置。

    <model name="velodyne_hdl-32"><link name="base"><pose>0 0 0.029335 0 0 0</pose><inertial><mass>1.2</mass><inertia><ixx>0.001087473</ixx><iyy>0.001087473</iyy><izz>0.001092437</izz><ixy>0</ixy><ixz>0</ixz><iyz>0</iyz></inertia></inertial>
    

    接下来为顶部链接添加惯性值。将以下 <惯性> 块复制到指定位置。

     <link name="top"><pose>0 0 0.095455 0 0 0</pose><inertial><mass>0.1</mass><inertia><ixx>0.000090623</ixx><iyy>0.000090623</iyy><izz>0.000091036</izz><ixy>0</ixy><ixz>0</ixz><iyz>0</iyz></inertia></inertial>
  2. 有了惯性值,可视化应该类似于下图。

在模型创建过程的这一点上,您应该拥有一个具有正确视觉、碰撞和惯性属性的模型。我们现在将移动到关节。

2.3 Step 3: 加入关节

关节定义链接之间的约束。在机器人领域,最常见的关节类型是旋转的。旋转关节定义了两个连杆之间的单个旋转自由度。可以在 SDF 网站上找到完整的关节列表。

当然,可以可视化关节。运行 Gazebo 时,右键单击模型,然后选择查看 -> 关节。关节通常位于模型内,因此您可能必须使模型透明才能看到关节可视化(右键单击模型并选择查看->透明)。

  1. 我们首先必须在 Velodyne 模型中添加一个关节。关节将是旋转的,因为顶部连杆将相对于基本连杆旋转。

  2. 打开 SDF 世界,并在 </model> 标签前添加一个旋转关节。

    <!-- Each joint must have a unique name -->
    <joint type="revolute" name="joint"><!-- Position the joint at the bottom of the top link --><pose>0 0 -0.036785 0 0 0</pose><!-- Use the base link as the parent of the joint --><parent>base</parent><!-- Use the top link as the child of the joint --><child>top</child><!-- The axis defines the joint's degree of freedom --><axis><!-- Revolve around the z-axis --><xyz>0 0 1</xyz><!-- Limit refers to the range of motion of the joint --><limit><!-- Use a very large number to indicate a continuous revolution --><lower>-10000000000000000</lower><upper>10000000000000000</upper></limit></axis>
    </joint>
  3. 运行 SDF 世界,暂停并可视化关节。

  1. gazebo velodyne.world -u
  2. 右键点击 model并选 View->Joints
  3. 右键点击 model并选  View->Transparent
  1. 我们还可以使用 Joint Command 图形工具验证关节是否正确旋转。拖动主窗口上打开的右侧面板,然后选择 Velodyne 模型。

  2. 使用此小部件中的“力”选项卡向关节施加较小的力,0.001 即可。取消暂停世界,您应该会看到可视化关节开始围绕模型的 Z 轴旋转。

至此,我们有了一个具有有效惯性、碰撞和关节属性的 Velodyne 模型。在下一节中,我们将介绍模型的最后一部分,即传感器的添加。

2.4 Step 4: 添加 sensor

传感器用于从环境或模型生成数据。在本节中,我们将为 Velodyne 模型添加一个光线传感器。 Gazebo 中的射线传感器由一个或多个光束组成,这些光束会产生距离和潜在的强度数据。

一个射线传感器由一个 <scan> 和一个 <range> SDF 元素组成。 <scan> 元素定义光束的布局和数量,<range> 元素定义单个光束的属性。

<scan> 元素中包含 <horizo​​ntal> 和 <vertical> 元素。 <horizo​​ntal> 组件定义在水平平面中散开的光线,<vertical> 组件定义在垂直平面中散开的光线。

Velodyne 传感器需要垂直射线,然后旋转。我们将其模拟为旋转的水平风扇。我们采用这种方法是因为在 Gazebo 中可视化数据会更容易一些。 Velodyne 规范表明 HDL-32 有 32 条射线,垂直视场介于 +10.67 和 -30.67 度之间。

  1. 我们将光线传感器添加到顶部链接。将以下内容复制到
    <link name="top"> 元素,在velodyne.world文件内
    
  2. <!-- Add a ray sensor, and give it a name -->
    <sensor type="ray" name="sensor"><!-- Position the ray sensor based on the specification. Also rotateit by 90 degrees around the X-axis so that the <horizontal> raysbecome vertical --><pose>0 0 -0.004645 1.5707 0 0</pose><!-- Enable visualization to see the rays in the GUI --><visualize>true</visualize><!-- Set the update rate of the sensor --><update_rate>30</update_rate>
    </sensor>
  3. 接下来,我们将添加 <ray> 元素,它定义了 <scan> 和 <range> 元素。将以下 SDF 放在 <sensor> 元素中(直接在 <update_rate> 元素下方效果很好)。

    <ray><!-- The scan element contains the horizontal and vertical beams.We are leaving out the vertical beams for this tutorial. --><scan><!-- The horizontal beams --><horizontal><!-- The velodyne has 32 beams(samples) --><samples>32</samples><!-- Resolution is multiplied by samples to determine number ofsimulated beams vs interpolated beams. See:http://sdformat.org/spec?ver=1.6&elem=sensor#horizontal_resolution--><resolution>1</resolution><!-- Minimum angle in radians --><min_angle>-0.53529248</min_angle><!-- Maximum angle in radians --><max_angle>0.18622663</max_angle></horizontal></scan><!-- Range defines characteristics of an individual beam --><range><!-- Minimum distance of the beam --><min>0.05</min><!-- Maximum distance of the beam --><max>70</max><!-- Linear resolution of the beam --><resolution>0.02</resolution></range>
    </ray>
  4. 再次启动模拟,您应该可以看到 32 个传感器光束在没有暂停时。

后续操作

现在我们有了 Velodyne LiDAR 模型,我们可以通过三种方式对其进行改进:

  • 添加 3D 网格以改善视觉外观
  • 添加传感器噪声以提高数据真实性
  • 添加一个插件来控制传感器。

第一个改进将在其它教程中解决。

【gazebo要素4】传感器插件(Velodyne)相关推荐

  1. 基于ROS的UR5机器人开发学习(三)| 安装力矩传感器插件和Onrobot RG2夹爪

    操作系统:Ubuntu18.04 ROS版本:Melodic 目录 1.使用Gazebo中的力矩传感器插件F/T sensor 1.1 添加插件 1.2 完整文件 1.3查看力矩传感器信息 2. 安装 ...

  2. 建造属于你的无人驾驶车——(七)为XACRO模型添加GAZEBO属性与运动控制插件

    建造属于你的无人驾驶车! 本专栏持续更新中- 程序源码:https://github.com/kkmd66/ZZX_RUN Solidworks模型文件:https://github.com/kkmd ...

  3. gazebo 直接获取传感器数据_【ROS-Gazebo】IMU插件使用与数据采集——以四足机器人pigot为例...

    最近在琢磨别的事情,Gazebo探索上面进展不大,但也有一些收获,秉承慢慢写的佛系态度记录一下:pigot四足项目的步态改进,前行换成了摆线步态,加入了斜向步态 Gazebo-IMU(惯性测量单元)插 ...

  4. 【Gazebo要素01】术语和概念

    一.提要 要了解gazebo需要多种技术知识,常常无法短期内掌握,这里列出相关得种种技术术语,和其基本含义:以便在开发中形成一个总体概念.注意,本文不着眼于技术细节,仅仅是提纲携领而已. 二.gaiz ...

  5. gazebo 直接获取传感器数据_Gazebo软件简介

    点击蓝字关注我们 1.什么是Gazebo? Gazebo是一款开源的3D动态模拟器,能够在复杂的室内和室外环境中准确有效地模拟机器人群.提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序 ...

  6. gazebo 直接获取传感器数据_5个使传感器更简单的技巧

    传感器遍布地球表面和周围空间,为世界提供数据.这些廉价的传感器是物联网背后的驱动力之一,也是我们社会现在面临的数字革命.然而,连接到传感器并从传感器获取数据并不总是直截了当或容易的.这里有五个提示,可 ...

  7. SLAM传感器篇:Velodyne激光雷达

    VLP-16 & HDL-64E激光雷达 主要参数: VLP-16基本特性 稍微介绍一下,扫描频率越高,短时间可以获取更多数据,在机器人运动速度快的时候可以获取连续性较好的数据,有利于SLAM ...

  8. gazebo 直接获取传感器数据_基于uFUN开发板的心率计(一)DMA方式获取传感器数据...

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

  9. 【gazebo要素10】制作移动的机器人

    一.说明: 介绍如何制作移动机器人,将展示Gazebo的基础模型管理功能,并通过引导用户完成创建一个使用差分驱动机制进行移动的两轮移动机器人的整个过程,来熟悉模型数据库中的基础模型表示方法 二.设置模 ...

最新文章

  1. 维护学习的一点体会与看法
  2. 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
  3. PHP设置块注释的模板
  4. 【渝粤题库】广东开放大学 PHP动态网站设计 形成性考核
  5. JS之按照Unicode返回指定字符串
  6. 【CodeForces - 205B 】Little Elephant and Sorting (思维)
  7. sendBroadcast和sendStickyBroadcast的区别
  8. 有关SQL Server中日期的常见问题解答
  9. pytorch梯度的自动求取
  10. R语言使用RStudio将可视化结果保存为pdf文件(export--Save as PDF)
  11. yolov3的loss计算公式
  12. 往年计算机二级在线查询,2012年计算机二级查询
  13. css 右上角 翻开动画_CSS3 transition动画、transform变换、animation动画
  14. 基础 | 并发编程 - [LongAdder Striped64]
  15. sql:函数:开窗函数简介
  16. DB2数据库安装与配置
  17. SIPP对Freeswitch进行压力测试
  18. Training: PHP LFI (Exploit, PHP, Training)
  19. Solidworks不能生成此特征因为这将导致厚度为零的几何体
  20. Java入门之基础程序设计

热门文章

  1. ORACLE分配DBA权限
  2. 关于计算机的英语谚语,关于英语谚语83句
  3. 百度云盘 油猴下载助手脚本【绝对可用】
  4. 东方财富:公司总经理陶涛辞任 其实将担任总经理职务
  5. VSCode取消注释斜体
  6. 初中计算机科目三必背,驾校科目三路考必背要点口诀(教练整理)
  7. 当Myeclipse或者Eclipse出现launching client
  8. YOLOv4论文解读
  9. 如何查看网络计算机ip,怎么查ip地址 如何查看(局域网/互联网)本机ip地址
  10. android 拼图游戏2(可从手机选择任意一张图片)