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
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号