目錄
- 0 專欄介紹
- 1 什么是Gazebo?
- 2 Gazebo架構
- 2.1 Gazebo前后端
- 2.2 Gazebo文件格式
- 2.3 Gazebo環境變量
- 3 Gazebo安裝與基本界面
- 4 搭建自己的地圖
- 4.1 編輯地圖
- 4.2 保存地圖
- 4.3 加載地圖
- 5 常見問題
0 專欄介紹
本專欄旨在通過對ROS2的系統學習,掌握ROS2底層基本分布式原理,并具有機器人建模和應用ROS2進行實際項目的開發和調試的工程能力。
🚀詳情:《ROS2從入門到精通》
1 什么是Gazebo?
Gazebo
是一款3D物理仿真器,支持機器人開發所需的機器人、傳感器和環境模型,并通過其搭載的強大物理引擎產生高品質的圖形畫面,達到逼真的仿真結果。
Gazebo
功能強大,主要有:
-
構建機器人運動仿真模型
Gazebo
提供了最基礎的球體、圓柱體與立方體,利用它們以及伸縮變換或者旋轉變換,可以自主設計機器人三維仿真模型。除此之外,Gazebo
提供了CAD
、Blender
、SolidWorks
等各種2D、3D設計軟件接口,可以導入圖紙讓Gazebo
機器人模型更真實。Gazebo
提供了 機器人的運動仿真,通過Model Editor
下的plugin
,添加需要驗證的算法文件,就可以在Gazebo
里對機器人的運動進行仿真 -
構建現實世界各種場景的仿真模型
Gazebo
可以建立一個用來測試機器人的仿真場景,通過添加物體庫來模仿現實世界,還可以通過添加2D房屋設計圖,構建出3D的房屋 -
構建傳感器仿真模型
Gazebo
提供強大的傳感器模型庫,包括camera
、depth camera
、laser
、imu
等機器人常用的傳感器,并且可以直接使用。Gazebo
也允許用戶從零創建一個新的傳感器,添加它的具體參數,甚至還可以添加傳感器噪聲模型,讓傳感器更加真實 -
為機器人模型添加現實世界的物理性質
Gazebo
提供的物理引擎可以為機器人添加重力、阻力等,提供了在復雜的室內和室外環境中準確有效地模擬機器人群體的能力
2 Gazebo架構
2.1 Gazebo前后端
Gazebo
區分
- 客戶端:
gzclient
,接受數據信息并顯示,允許多個客戶端存在 - 服務端:
gzserver
,運行Gazebo
運算分析功能
終端運行指令
gazebo
默認執行指令
gzserver
gzclient
當然也可以分開運行服務端和客戶端指令。
2.2 Gazebo文件格式
-
世界
擴展名為
.world
,該文件包含了仿真的所有元素——機器人、環境、傳感器等,通過gzserver
讀取所有信息并構建一個真實的3D場景 -
模型
擴展名為
.sdf
,即仿真描述文件(simulation description format, SDF),模型文件主要用于實現基本組件復用,例如——太陽、平面等,從而簡化.world
下面是一個
.world
文件,其中包含ground_plane
與sun
模型文件<?xml version="1.0" ?> <sdf version="1.5"><world name="default"><include><uri>model://ground_plane</uri></include><include><uri>model://sun</uri></include><model name="box"><pose>0 0 0.5 0 0 0</pose><link name="link"><collision name="collision"><geometry><box><size>1 1 1</size></box></geometry></collision></link></model> </world> </sdf>
2.3 Gazebo環境變量
Gazebo
環境變量表示了內置文件與庫的存放位置,列舉如下:
GAZEBO_MODEL_PATH
:Gazebo
所有模型的路徑GAZEBO_RESOURCE_PATH
:Gazebo
所有資源的路徑,例如.world
、.sdf
等GAZEBO_MASTER_URI
:指定ip與端口,用于Gazebo
客戶端與服務器連接使用,通常使用服務器運行Gazebo
時需要設置GAZEBO_PLUGIN_PATH
:Gazebo
搜索插件庫的路徑GAZEBO_MODEL_DATABASE_URI
:Gazebo
下載模型的路徑
上述所有的變量查看位置/usr/share/gazebo/setup.sh
3 Gazebo安裝與基本界面
Gazebo
已經集成在桌面完整版的ROS
系統當中
啟動與測試
ros2 launch gazebo_ros spawn_entity_demo.launch.py
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-w8JqPBGP-1721265452675)(https://i-blog.csdnimg.cn/direct/173a148d437e4222aae25de427d0f56d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATXIuV2ludGVyYA==,size_120,color_FFFFFF,t_70,g_se,x_16#pic_center =650x)]
如上圖所示,Gazebo-GUI
主要包含以下部分:
-
場景(Scene):模擬器的主要部分,是仿真模型顯示的地方,用戶可以在場景中操作仿真對象,使其與環境進行交互
-
左側面板:
WORLD
:該選項卡顯示當前場景中的模型,并允許查看和修改模型參數INSERT
:該選項卡是向仿真場景中添加新對象、模型,可以添加常用模型所在的路徑LAYERS
:該選項卡組織并顯示仿真中可用的不同可視化組,一個圖層可以包含一個或多個模型,打開或關閉圖層將顯示或隱藏該圖層中的模型
-
頂部工具欄:包含與模擬器交互時最常用的選項,如按鈕:選擇、移動、旋轉和縮放;燈光;創建簡單形狀(例如立方體、球體、圓柱體);復制/粘貼;更改視圖;捕捉對齊等。
-
底部工具欄:顯示有關仿真的數據,如仿真時間及其與真實時間。
- 仿真時間:指當仿真運行時,時間在仿真環境中過得有多快。仿真可以比真實時間慢或快,具體取決于運行仿真所需的計算量
- 真實時間:指在仿真環境中運行時實際經過的時間。仿真時間和真實時間的比率稱為實時因子。
- 步長:每次仿真迭代都會推進一個固定的秒數,默認情況下,步長為1ms,按“暫停”按鈕暫停仿真,并使用“步長”按鍵一次執行多個步長。
4 搭建自己的地圖
本文介紹如何用Gazebo
搭建自己的地圖,關于Gazebo
搭建機器人請參考后面的文章。
4.1 編輯地圖
啟動Gazebo
,依次點擊Edit
-> Building Editor
打開地圖編輯器,如下所示
該編輯器由以下3個區域組成:
- 調色板:選擇建筑特征和材料
- 2D視圖:設計或導入樓層平面圖,編輯器會根據平面圖自動在3D編輯器中插入墻壁、門窗和樓梯
- 3D視圖:預覽平面設計的3D視圖,在這里可以為建筑物的不同部分分配顏色和紋理
4.2 保存地圖
在頂部菜單上,選擇File
,然后Save As
可以保存模型文件.sdf
與.config
。單擊Exit Building Editor
退出場景編輯器,注意退出后就不能夠再次編輯場景了。
回到主界面再次選擇File
,然后Save World
可以保存世界文件.world
。
4.3 加載地圖
.world
中包含模型文件的全部內容,但不利于模型文件.sdf
與.config
復用以及.world
文件的可讀性,本節進行改進。假設模型文件名為scene1
,則模塊化加載模型的方式為
- 存放位置為
~/ros2_learning_tutorials/Lecture_2_2/src/gazebo_labmodels/models
,則<!-- 自定義模型 --> <model name='scene1'><include><uri>///home/winter/ros2_learning_tutorials/Lecture_2_2/src/gazebo_lab/models/scene1</uri></include> </model>
- 存放位置為
~/.gazebo/models
,則<!-- 自定義模型 --> <model name='scene1'><include><uri>model://scene1</uri></include> </model>
啟動地圖可以類比turtlebot3_world.launch
的結構,將其中的地圖改成自己的場景即可,如下所示
<launch><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find gazebo_lab)/worlds/scene1.world"/><!-- more default parameters can be changed here --><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="headless" value="false"/> <!-- Inert - see gazebo_ros_pkgs issue #491 --><arg name="recording" value="false"/><arg name="debug" value="false"/></include>
</launch>
5 常見問題
-
Gazebo
出現黑屏解決方案:更新
Gazebo
模型庫cd ~/.gazebo/ mkdir -p models cd ~/.gazebo/models/ wget http://file.ncnynl.com/ros/gazebo_models.txt wget -i gazebo_models.txt ls model.tar.g* | xargs -n1 tar xzvf
-
[gazebo-1] process has died [pid 20736, exit code 255, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/winter/.ros/log/2670202e-5ef6-11ec-847d-347df65d6a56/gazebo-1.log].
解決方案:關閉已有的
Gazebo
進程killall gzserver killall gzclient
本文的完整工程代碼請通過下方名片聯系我獲取
🔥 更多精彩專欄:
- 《ROS從入門到精通》
- 《機器人原理與技術》
- 《機器學習強基計劃》
- 《計算機視覺教程》
- …