< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-模型群(Population of models)

ROS2与Gazebo11入门教程-模型群(Population of models)

说明:

  • 介绍如何使用SDF population标签创建模型群

概述

  • 添加一个模型群只需指定以下参数即可:

  • 模型(例如桌子table、乐可罐coke_can等)

  • 模型群中作为其组成部分的物体的个数

  • 放置这些物体的容器形状(例如方盒box、圆柱体cylinder等)和尺寸

  • 模型群容器的位置和方向

  • 容器内物体的分布(例如随机、网格等分布)

创建物体群

  • 快速开始

  • 首先为本节教程创建一个目录并进入该目录,命令为:

mkdir ~/tutorial_model_population
cd ~/tutorial_model_population
  • 将这个can_population.world世界文件下载到当前目录中。可以使用以下命令:
wget https://raw.githubusercontent.com/osrf/gazebo_tutorials/master/model_population/files/can_population.world
  • 这个世界文件应该如下所示:
<?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>



<!-- Testing the automatic population of objects -->

<population name="can_population1">

<model name="can1">

<include>

<static>true</static>

<uri>model://coke_can</uri>

</include>

</model>

<pose>0 0 0 0 0 0</pose>

<box>

<size>2 2 0.01</size>

</box>

<model_count>10</model_count>

<distribution>

<type>random</type>

</distribution>

</population>



</world>

</sdf>
  • 用can_population.world世界文件启动Gazebo,命令为:
gazebo can_population.world
  • 这样就应该会看到随机分布在仿真世界中的一群苏打罐。这些罐子被放置在尺寸为2 × 2 × 0.01米的方盒容器内。

  • 对仿真世界的说明

  • 下面来进一步了解世界文件can_population.world中的不同元素。

<population name="can_population1">

<model name="can1">

<include>

<static>true</static>

<uri>model://coke_can</uri>

</include>

</model>
  • 在这段代码中,可以看到如何使用标签指定模型群元素。每个模型群都应该有一个唯一的名称,这是由name属性指定的。在population标签内,可以看到如何使用标签选择模型。模型群中的每个物体都会使用一个唯一的名称插入仿真中,该名称会通过在模型名称后添加后缀_clone_i来创建,其中i是模型群中的第i个物体。

  • 可以在左侧面板的“世界(World)”选项卡中看见Gazebo场景中生成的模型列表,如下图所示:

请输入图片描述

  • 最常见的模型群类型是由没有生命的物体(例如树木、岩石和建筑物等)组成的。

  • 建议仅对静态模型使用标签,并将诸如机器人等移动实体排除在外,这些移动实体通常需要更精确的放置且数量往往更少

<pose>0 0 0 0 0 0</pose>

<box>

<size>2 2 0.01</size>

</box>
  • 上面这个代码块指定了放置物体群的区域。在本例中,所有物体都会在长宽高三边为2 × 2 × 0.01 m、以(0,0,0)为中心且方向为(0,0,0)的3D边界框内生成。除了外,还可以通过指定圆柱体的半径和长度来设置区域(请查阅SDF规程以获取参数的完整说明)。元素用于设置模型群区域的参考坐标系。
<model_count>10</model_count>
  • 从上面这行代码可以看出如何确定模型群中的模型个数。

  • 模型个数可以是任何正整数,但考虑到这个数字越大,对性能的影响就会越大,因此应设置适当的模型个数。

<distribution>

<type>random</type>

</distribution>
  • 元素用于设置这些模型物体在物体放置区域内是如何放置的(即分布类型)。

  • 分布类型

    • 随机(random)分布:随机放置模型。请注意,在随机分布中,这些物体可能会相互碰撞。

    • 均匀(uniform)分布:以伪2D网格模式放置模型。使用K-Means近似解,并在区域内摆放指定数量的物体。

    • 网格(grid)分布:以2D网格模式均匀地放置模型。此分布还要求您指定行数、列数以及每个物体之间的距离。请注意,在这个分布类型中元素<model_count>将会被忽略。插入到仿真中的物体个数将会等于行数与列数的乘积。

    • linear-x分布:沿全局x轴均匀地放置各个模型。

    • linear-y分布:沿全局y轴均匀地放置各个模型。

    • linear-z分布:沿全局z轴均匀地放置各个模型。

  • 当然,可以通过输入以下命令对其进行测试:

gazebo worlds/population.world

请输入图片描述

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程