Gazebo仿真平台模型搭建与修改

2023-05-16

ROS进阶教程(一)Gazebo仿真平台模型搭建与修改

  • 文件讲解
    • Models 文件
    • World文件
    • Launch文件
  • 模型编辑
    • 可视化操作
    • 配置文件编辑
  • 仿真操作流程
    • 完成model建模
    • world文件和launch文件修改
  • 其他模型展示

文件讲解

Gazebo中进行算法仿真首先需要启动世界模型,通过launch文件实现模型与代码的交互,launch文件中整合了world文件和其他launch文件使其同时运行在Gazebo中;world文件是整合模型的文件,可以直接调用模型或者直接编写模型相关的参数;Models文件则是构建每个子模型的文件。三者关系如下图所示:
Gazebo文件架构

Models 文件

在打开Gazebo后进行insert,会有非常多已有的模型,拖动即可插入制作好的模型构建虚拟环境,是Gazebo仿真环境中的最底层文件。
在这里插入图片描述
文件位置:/home/username/.gaezbo/models (.gazebo文件为隐藏文件,按Ctrl+H显示)
包含内容:

  1. .config文件(声明文件,在Gazebo中声明sdf与materials等文件)
  2. .sdf文件(参数文件,包含构建模型所必须的参数信息)
  3. materials文件(元素文件,包含需要在models中插入的图片、3D模型dae文件等)
  4. 其他参数文件(皆通过.config文件进行声明)

Note: 现有已经展示出的模型文件比较有限,同时复杂的模型配置文件相当复杂,可能有成千上万个参数,很难通过修改参数来调整模型,同时有很多系统封装的模型dae文件或stl文件可以调用,如在一个模型文件的sdf文件中存在如下语句:

<uri>model://bed/meshes/cube_20k.stl</uri>

即表示调用 ~/.gazebo/models/bed/meshes 模型文件中的 cube_20k.stl 文件构建模型,其中调用了一些系统文件,如

<uri>file://media/materials/scripts/gazebo.material</uri>

其中 gazebo.material文件位于 /usr/share/gazebo-7/media/materials/scripts,其中有诸多model的引用模型的定义, /usr/share/gazebo-7/media/materials/textures中保存了模型的引用图案和纹理。

World文件

将models集成起来,但由于world文件只包含模型,故在直接运行时无法直接通过代码对模型进行控制,是Gazebo中的中层文件。
系统自带world文件位置:/usr/share/Gazebo-7/worlds(几乎包含了所有可用的现有的模型)
Note: world文件中有非常多的默认参数,且可以引用很多系统自带的model,几乎可以构建出所有想要的环境,现有world文件测试如下:

world 文件Gazebo场景
actor.world移动的人
blank.world一片空白
camera.worldturtlebot和一个cube,都携带摄像头传感器
cart_demo.world一个简单的小车和一个机器人
contact.world一个立方体一个turtlebot
depth_camera.world携带深度摄像头的turtlebot和一个半球体,可输出物体width,height,midpoint,distance,min和Max等信息
elevator.worldturtlebot和电梯模型
empty.world空的世界
empty_sky.worldturtlebot机器人和蓝天白云(白云可移动)
road.world一条双向马路和一个turtlebot
wireless_sensors.world有一个turtlebot,同时地板上每个方块顶点都有一个点状传感器
single_rotor_demo.world一个风车和一个turtlebot
population.worldturtlebot和很多饮料罐
linear_battery_demo.world:
light.worlds绿色光源和一些奇怪的荧光图案
imu_demo.world一个物体自由落体可测试imu传感器
plane_demo.world模拟行星表面
projector.world有一个小球作灯光投影
sonar_demo.worldturtlebot声呐传感器
heightmap.world很高的一个台子
presentation.worldturtlebot在一篇白地上做圆周运动
rubble.world碎石头块和turtlebot
shapes.world三个基本形状和turtlebot

在Gazebo中添加激光雷达参考:https://blog.csdn.net/qq_16775293/article/details/85009088

Launch文件

作用:将 world文件models和其他launch文件组成起来,且作为接口文件可使代码对model进行控制,是Gazebo中最顶层的文件。

launch文件参数的学习:
https://blog.csdn.net/qq_38402294/article/details/71512089

launch文件示例:
/turtlebot/turtlebot_simulator/turtlebot_gazebo/src/launch/turtlebot_world.launch
其中如果调用系统自带的launch文件可通过
$(find workspace)/launch/xxx.launch调用其他launch文件,例如$(find gazebo_ros)/launch/empty_world.launch,可通过指令进行定位

rospack find gazebo_ros

其中empty_world.launch文件位置:/opt/ros/kinetic/share/gazebo_ros/launch
Note:launch文件与代码文件的通信原理,launch文件中节点名字Node的定义通过代码文件进行调用即可使用代码控制gazebo中的模型。

模型编辑

可视化操作

可参考:https://blog.csdn.net/lxlong89940101/article/details/91044811

Note: 进入gazebo后按快捷键Ctrl+B进入编辑界面,并且可以拖动墙体、门体和三种基础形状进行编辑,其中点击墙体拖动进入gazebo后滑动确定长度后点击右键停止建墙。三种基础形状拖动进入gazebo后可进行编辑确定其参数。编辑好模型后保存至~/.gazbeo/models中。
Gazebo进入编辑墙体界面
Gazebo进入编辑正方体界面
存在问题: 三种基础形状更改后保存再次打开会存在问题,所以建议通过第二种方法直接修改模型。墙体在保存后其高低无法更改,但是其长度仍然可以在再次打开模型后进入Edit models进行修改。不建议一次性将所有模型集成起来,建议分开保存,之后再整合,否则一旦保存成为一个模型将无法更改里面的子模型。

配置文件编辑

打开models所在文件夹的sdf文件进行参数修改,主要需要修改的参数,把握size、pose等字眼,修改其中的数字参数,在修改sdf文件的同时在gazebo中查看模型状态再调整参数,在sdf中引用stl或dae等模型文件格式如下:

<link name="link1">		#定义了具有惯性,视觉特征和碰撞特性的刚体
      <pose>0 0 0.2 0 0 0</pose>		#模型的位置,依次表示x,y,z以及三个朝向
      <collision name="collision">		#定义碰撞属性
        <geometry>
          <mesh>
            <uri>model://bed/meshes/cube_20k.stl</uri>	#引用bed模型中的cube文件
            <scale>0.9 0.7 0.2</scale>		#定义长方体大小,x方向1.8m,y 1.4m,z 0.4m
          </mesh>
        </geometry>
      </collision>
      <visual name="visual">		#定义可视属性
        <geometry>
          <mesh>
            <uri>model://bed/meshes/cube_20k.stl</uri>
            <scale>0.9 0.7 0.2</scale>
          </mesh>
        </geometry>
      </visual>
    </link>
在sdf文件中同时引用多个stl或dae文件格式如下:
<?xml version="1.0" ?> 	#声明这是一个XML文件
<model name=”xxx”>		#定义该模型的名称,用于.config文件中调用并在insert中显示
	<link name=”xxx1”>
	……				#具体为模型的参数设置(如上所示)
	</link>
	<link name=”xxx2”>
	……
	</link>
</model>

更复杂的引用如引用纹理,使用自定义图片建立带纹理的地面模型:
https://blog.csdn.net/catherine627/article/details/83548063
在Gazebo中构建四轮小车教程如下,包含详细的Link元素结构及详细属性分析、Joint元素结构及属性分析等参数讲解
https://blog.csdn.net/qq_16775293/article/details/88379988

仿真操作流程

完成model建模

model可以有两种方式进行建模

  1. 直接在~/.gazebo/models文件中复制现有的model文件产生副本并重命名,然后在该文件的基础上修改config和sdf文件。但是这种方式仅限于简单的模型且参数容易修改的
  2. 在Gazebo中进行可视化建模然后保存。具体的流程为:
    拖动需要的模型(含自制的模型)组建出如下类似的效果
    在这里插入图片描述
    保存至home/用户名/.gazebo/models/模型命名文件夹中
    在这里插入图片描述
    此时再次打开Gazebo会发现左侧model栏中会出现已有的文件,可以拖动这个model到界面中(可能会卡顿)。如果想要固定该model,则需要修改world文件和launch文件

world文件和launch文件修改

找到现有的可以运行的仿真文件,如turtlebot3_empty_world.launch,首先一定要备份原文件,以免修改出错后原文件也没了。以博主的文件为例,首先定位turtlebot3_empty_world.launch位于~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch中,打开该launch文件,发现其引用了world文件,将其修改为

  <include file="$(find turtlebot3_gazebo)/launch/empty_world.launch">
  #这个empty_world.launch文件是基本仿真参数配置文件不需要修改
    <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/empty_1.world"/>
    # 需要修改这里的world文件为自己定义的文件
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/>
    <arg name="debug" value="false"/>
  </include>

同时打开位于~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/worlds文件,复制一份原有的empty_world文件并修改代码(只展示加入进去的代码):

    <include>
      <uri>model://robothouse</uri> #这里是博主上面的模型文件
    </include>

此时打开终端,运行

$ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

运行结果如下:
在这里插入图片描述
此时如果需要运行导航及建图,请参考博主后续文章:
ROS及SLAM进阶教程(九)Gmapping+amcl的turtlebot实现和Gazebo仿真实现

其他模型展示

模型展示1
模型展示2
上图是为了模拟家庭环境,结合了现有的model以及自己编辑的家具model而成的仿真平台,仅为参考。

博主有两年多ROS的使用经验,目前仍在不停研究中。本系列ROS及SLAM进阶教程将涵盖ROS的进阶功能使用、机器人SLAM及导航的设计及研究等领域,持续不断更新中。如果大家有相关问题或发现作者漏洞欢迎私戳,同时欢迎关注收藏。
同时欢迎关注博主Git:
https://github.com/redglassli

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gazebo仿真平台模型搭建与修改 的相关文章

随机推荐