近期需要搭建一个室内仿真环境,用于实验调试,所以想把相关技巧记录下来,如有错误,还请批评指正,谢谢。
参考网页:使用gazebo中的building editor创建一个建筑环境并用于仿真
1.配置要求
系统:ubuntu14.04(其他版本也行,这个要求不严)
ROS版本:indigo版本(这个关系到gazebo版本,每个ROS的都会有对应的gazebo版本,所以还是用indigo版本自带gazebo比较好)
搭建的模板大致如下图所示:
2.创建模型
(1) 开启gazebo
$ gazebo
(2) 按Ctrl+B打开building editor,或者从控制面板进入
(3)利用左上角的add wall,add Windows ,add door , add stair四个控制按钮来搭建环境。
(4)在wall上右击可以打开wall inspector编辑器,用来编辑wall的长度等信息
各个参数表示含义如下:
(5)编辑窗户时,也可以用右键调出编辑器进行调整,各个参数表示含义如下:
(6)终于搭建好一个像样的模型了,我的像这样
(7)保存之前,先在home目录下用Ctrl+H键打开隐藏目录,在.gazebo/models路径下新建一个文件夹,用来保存搭建好的模型,我的命名为house_6,注意模型名字要和这个文件名一致。最后保存如下,
(8)保存之后,就可以退出gazebo编辑器了。
3.编辑模型初始化文件
(1)再次以同样的方式进入.gazebo/models/house_6,这时你会发现只有一个sdf文件,只有这个文件是不够,还需要一个config文件。所以新建一个model.config(文件名只能是这个,不可更改!)
(2)在.gazebo/models/house_6/model.config中,填入以下信息
<?xml version="1.0"?>
<model>
<name>House 6</name>
<version>1.0</version>
<sdf version="1.4">house_6.sdf</sdf>
<author>
<name>XXXXXXXXX</name>
<email>[email protected]</email>
</author>
<description>
A model of a simple house for semi-navigation.
</description>
</model>
相信你能看懂,就不解释了,可以自行更改里面的信息。
改完之后。保存退出就行了。
4.搭建自己的环境
(1)再次打开gazebo编辑器,在insert选项卡里选中调出,就可以看到刚才搭建好的模型了。
(2)下面利用gazebo已有的模型,可以继续完善自己的环境,搭建一个自己的world,我的搭建如下:
没有办法进行颜色搭配,模型库的模型也不全 ,只能将就这样了。
最后保存为world文件,就大功告成了。
5.使用环境
(1)可以使用launch文件直接调用刚才搭建好的环境,新建launch文件写入如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find turtlebot_gazebo)/worlds/XXXX.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
<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>
</launch>
(2)gazebo仿真多用于turtlebot,这里同样可以用于turtlebot,新建launch文件写入如下内容
<launch>
<arg name="world_file" default="$(find turtlebot_gazebo)/worlds/XXXXXX.world"/>
<arg name="base" default="kobuki"/> <!-- create, roomba -->
<arg name="battery" default="/proc/acpi/battery/BAT0"/> <!-- /proc/acpi/battery/BAT0 -->
<arg name="gui" default="true"/>
<arg name="stacks" default="hexagons"/> <!-- circles, hexagons -->
<arg name="3d_sensor" default="KinectHokuyo"/> <!-- kinect, asus_xtion_pro ,KinectHokuyo-->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="debug" value="false"/>
<arg name="gui" value="$(arg gui)" />
<arg name="world_name" value="$(arg world_file)"/>
</include>
<include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml">
<arg name="base" value="$(arg base)"/>
<arg name="stacks" value="$(arg stacks)"/>
<arg name="3d_sensor" value="$(arg 3d_sensor)"/>
</include>
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" type="double" value="30.0" />
</node>
</launch>
运行launch文件,就可以看到了:
大功告成!!!