今天繼續介紹怎麼用 XML 格式來設定 Gazebo 的模擬環境。透過世界檔,我們就可以設置模擬中使用的物理參數、光源、地形以及需要匯入的模型。
.world
前往 world
目錄建立一個世界檔 my_world.world
:
$ touch world/my_world.world
在 my_world.world
中加入內容如下,它同樣是採用 XML 格式的配置文件,並且包含世界檔的基本結構:
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<!-- 全域光源 -->
<include>
<uri>model://sun</uri>
</include>
<!-- 基礎地面 -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- Gazebo 官方的無人機模型 -->
<include>
<uri>model://parrot_bebop_2</uri>
<pose>0 4 0 0 0 0</pose> <!-- 設置模型在世界中的位置和姿態 -->
</include>
<!-- 自定義模型, 放兩個 -->
<include>
<uri>model://my_model</uri>
<name>my_model_1</name>
<pose>2 1 0 0 0 0</pose>
</include>
<include>
<uri>model://my_model</uri>
<name>my_model_2</name>
<pose>-3 0 5 0.78 0 0</pose>
</include>
</world>
</sdf>
<sdf>
標籤和 <world>
標籤:
SDF 格式一般用在定義模型,不過在較新版本的 Gazebo 世界檔中也會使用 SDF 來描述模擬環境,這讓世界檔在更新的 SDF 版本推出時有較好的相容性。
<world>
標籤是整個世界檔的根基,用來包住所有的內容。這裡可以用 name="world_name"
定義世界的名稱,或是可以直接用預設名稱 default
。通常只有在需要同時執行多個世界的模擬時才需要特別命名。
匯入模型:
我們可以使用 <include>
標籤來加入 Gazebo 官方的預設模型或是我們自定義的模型。
格式:
<include>
<uri>model://[model_name]</uri>
<name>model_name</name>
<pose>x y z roll pitch yaw</pose>
</include>
[model_name]
:可以從 [Gazebo Model 的 GitHub 儲存庫](osrf/gazebo_models: Gazebo database of SDF models. This is a predecessor to https://app.gazebosim.org (github.com))找到有哪些模型可用。<name>
:如果想在一個模擬環境中匯入多個相同的模型檔,可以透過覆蓋模型的名字來建立。<pose>
:在匯入模型時,可以設定模型在這個世界中的位置和姿態。在我提供的範例裡設定比較簡單,其實世界檔中還可以加入各式各樣的模擬環境設定,包含場景、光源、物理參數等,根據自己的需求來讓模擬環境更加貼近真實世界的樣子。
roslaunch
啟動 Gazebo現在我們把主角都設定完成了。現在我們可以透過 Day 15 設定好的 .launch
檔啟動 Gazebo 並自動匯入模型和場景,看看最後的樣子了。
格式:
roslaunch <package_name> <launch_file.launch>
另外在啟動之前,為了確保 Gazebo 可以正確載入我們建立的自定義模型,需要為 Gazebo 環境變數的模型路徑新增我們的模型路徑。設置完成後,就來啟動我們這兩天設置的模型:
$ export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/catkin_ws/src/my_simulations/models
$ roslaunch my_simulation my_launch.launch
花了不少功夫,終於成功開啟 Gazebo 並且將模型丟進模擬環境裡啦!再來就要來用程式控制 Gazebo 裡面的機器人了。