近期需要搭建一個室內仿真環境,用於實驗調試,所以想把相關技巧記錄下來,如有錯誤,還請批評指正,謝謝。
參考網頁:使用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文件,就可以看到了:
大功告成!!!