ROS2從入門到精通2-3:機器人3D物理仿真Gazebo與案例分析

目錄

  • 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提供了CADBlenderSolidWorks等各種2D、3D設計軟件接口,可以導入圖紙讓Gazebo機器人模型更真實。Gazebo提供了 機器人的運動仿真,通過Model Editor下的plugin,添加需要驗證的算法文件,就可以在Gazebo里對機器人的運動進行仿真

  • 構建現實世界各種場景的仿真模型

    Gazebo可以建立一個用來測試機器人的仿真場景,通過添加物體庫來模仿現實世界,還可以通過添加2D房屋設計圖,構建出3D的房屋

  • 構建傳感器仿真模型

    Gazebo提供強大的傳感器模型庫,包括cameradepth cameralaserimu等機器人常用的傳感器,并且可以直接使用。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_planesun模型文件

    <?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_PATHGazebo所有模型的路徑
  • GAZEBO_RESOURCE_PATHGazebo所有資源的路徑,例如.world.sdf
  • GAZEBO_MASTER_URI:指定ip與端口,用于Gazebo客戶端與服務器連接使用,通常使用服務器運行Gazebo時需要設置
  • GAZEBO_PLUGIN_PATHGazebo搜索插件庫的路徑
  • GAZEBO_MODEL_DATABASE_URIGazebo下載模型的路徑

上述所有的變量查看位置/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 常見問題

  1. 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
    
  2. [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從入門到精通》
  • 《機器人原理與技術》
  • 《機器學習強基計劃》
  • 《計算機視覺教程》

👇源碼獲取 · 技術交流 · 抱團學習 · 咨詢分享 請聯系👇

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46457.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效 上篇作業解題 在前一篇文章的最后,給各位看官留了一個作業,如上圖所示。本篇文章,我們來公布一下它的源碼。 主要實現的思路 四個漸變色的線段,沿著四個方向的依次運動,(運動在加載前執行)使用 …

均值濾波算法及實現

均值濾波器的使用場景&#xff1a; 均值濾波器使用于處理一些如上述藍色線的高斯噪聲場景 紅色曲線是經過均值濾波處理后的數據。主要因為均值濾波設置數據緩沖區&#xff08;也即延時周期&#xff09;&#xff0c;使得測量值經過緩沖不會出現特別大的變化。 黃色曲線為高斯噪聲…

【iOS】—— 消息傳遞和消息轉發

【iOS】—— 消息傳遞和消息轉發 1. 消息傳遞SEL選擇子IMP快速查找匯編代碼查找過程總結消息轉送快速查找IMP 慢速查找總結消息傳遞慢速查找IMP 2. 消息轉發動態決議動態解析添加方法 快速轉發慢速轉發 總結動態決議消息轉發消息的三次拯救 1. 消息傳遞 在iOS中&#xff0c;消…

一、單例模式

文章目錄 1 基本介紹2 實現方式2.1 餓漢式2.1.1 代碼2.1.2 特性 2.2 懶漢式 ( 線程不安全 )2.2.1 代碼2.2.2 特性 2.3 懶漢式 ( 線程安全 )2.3.1 代碼2.3.2 特性 2.4 雙重檢查2.4.1 代碼2.4.2 特性 2.5 靜態內部類2.5.1 代碼2.5.2 特性 2.6 枚舉2.6.1 代碼2.6.2 特性 3 實現的要…

【樂吾樂2D可視化組態編輯器】快捷鍵

快捷鍵 樂吾樂2D可視化組態編輯器demo&#xff1a;https://2d.le5le.com/ 快捷鍵描述空格 鼠標拖拽移動畫布鼠標右鍵拖拽移動畫布Ctrl 滾輪縮放畫布Ctrl 點擊 Pen多選Ctrl A全選Ctrl C復制Ctrl X剪切Ctrl V粘貼&#xff0c;alt視圖中心粘貼&#xff0c;shift原位粘貼…

查詢優化 -- UNION 用法

union 不返回重復行&#xff08;所有字段值相同的行&#xff09; union all 返回所有行 // 每類最多統計100條 select server_id,count(1) as logs from ( SELECT server_id FROM log WHERE log.type "a" AND server_id1 limit 100 ) UNION select server_id,coun…

谷粒商城-全文檢索-ElasticSearch

1.簡介 一個分布式的開源搜索和分析引擎,可以 秒 級的從海量數據中檢索 主要功能:做數據的檢索和分析(MySQL專攻于數據的持久化存儲與管理CRUD達到百萬以上的數據MSQL就會很慢,海量數據的檢索和分析還是要用ElasticSearch) 用途:我們電商項目里的所有的檢索功能都是由Elasti…

Java中為什么不能直接創建泛型數組

在Java中&#xff0c;不能直接創建泛型數組的主要原因是類型擦除和類型安全問題。 類型擦除 Java中的泛型是通過類型擦除&#xff08;Type Erasure&#xff09;實現的&#xff0c;這意味著在編譯時&#xff0c;泛型類型會被轉換成原始類型&#xff08;如 List<T> 會被轉…

網絡安全-網絡安全及其防護措施9

41.網絡故障排除 網絡故障排除的定義和重要性 網絡故障排除是指通過系統化的方法和工具&#xff0c;識別、診斷和解決網絡中出現的問題&#xff0c;以恢復正常的網絡服務和性能。有效的故障排除可以減少停機時間&#xff0c;提升網絡的穩定性和可靠性。 故障排除的步驟 問題…

基于X86+FPGA+AI數字化醫療設備:全自動尿沉渣檢測儀

助力數字醫療發展&#xff0c;信邁可提供全自動尿沉渣檢測儀專用計算機 隨著信息技術的不斷進步&#xff0c;醫療也進入了一個全新的數字化時代。首先是醫療設備的數字化&#xff0c;大大豐富了醫療信息的內涵和容量&#xff0c;具有廣闊的市場發展前景。 數字化醫療設備&…

使用Redis的SETNX命令實現分布式鎖

什么是分布式鎖 分布式鎖是一種用于在分布式系統中控制多個節點對共享資源進行訪問的機制。在分布式系統中&#xff0c;由于多個節點可能同時訪問和修改同一個資源&#xff0c;因此需要一種方法來確保在任意時刻只有一個節點能夠對資源進行操作&#xff0c;以避免數據不一致或…

白騎士的C++教學高級篇 3.1 文件操作

系列目錄 上一篇&#xff1a;白騎士的C教學進階篇 2.4 標準模板庫&#xff08;STL&#xff09; 文件操作是C編程中的一個重要部分&#xff0c;允許程序與外部存儲設備進行交互&#xff0c;從而實現數據的持久化存儲和讀取。C標準庫提供了豐富的文件操作功能&#xff0c;包括文…

嵌入式香橙派人工智能AI開發板詳細操作與遠程聊天實現

大家好&#xff0c;今天給大分享一個OrangePi AIpro&#xff08;20T&#xff09;采用昇騰作為主控芯片的開發板&#xff0c;開箱以及對應功能的詳細實現。 第一&#xff1a;板子基本介紹 接通電源給對應的開發板上電&#xff0c;觀察其中的現象&#xff0c;如下&#xff1a; 注…

基于HAL庫的stm32的OLED顯示屏顯示(IIC)

OLED OLED&#xff0c;即有機發光二極管( Organic Light Emitting Diode )。OLED由于同時具備自發光&#xff0c;不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性&#xff0c;被認為是下一代的平面顯示器…

龍國專利局瑞數6

聲明(lianxi a15018601872) 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 前言(lianxi a…

富文本中提取信息并去除其中的HTML或XML標簽

要從富文本中提取信息并去除其中的HTML或XML標簽&#xff0c;可以使用不同的編程語言和庫。以下是一些流行語言中的示例方法&#xff1a; 1. Python&#xff08;使用BeautifulSoup&#xff09; BeautifulSoup是一個強大的Python庫&#xff0c;用于從HTML或XML文件中提取數據。…

巨魔商店(TrollStore)介紹與使用指南

iOS巨魔商店&#xff08;TrollStore&#xff09;介紹與使用指南 引言 在iOS系統中&#xff0c;App Store是官方唯一的應用下載渠道&#xff0c;但這也限制了用戶獲取非官方或破解版應用的可能性。然而&#xff0c;巨魔商店&#xff08;TrollStore&#xff09;的出現打破了這一…

配置和保護SSH

使用SSH訪問遠程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一種網絡協議&#xff0c;用于在不安全的網絡上安全地進行系統管理和數據傳輸。它最初由 Tatu Ylnen 于1995年設計&#xff0c;并成為保護網絡服務免受攻擊的標準。SSH提供了多種功能&…

開始構建我們自己的大語言模型:數據處理部分

關注本專欄&#xff08;NLP簡論&#xff1a;手搓大語言模型實踐&#xff09; 繼續學習從頭編寫、訓練自己的大語言模型。 接上集&#xff0c;本章我們將深入說一下大語言模型數據處理部分的細節&#xff0c;并直接提供本部分的完整代碼。 【配套資源】 暫時的詞匯表&#xff1…

GNN論文粗讀

論文 文章目錄 論文基于異構圖的GNN論文GNN領域論文環境領域GNN論文 隨緣更新 基于異構圖的GNN論文 Distance Information Improves Heterogeneous Graph Neural Networks:DOI: 10.1109/TKDE.2023.3300879 轉導和歸納任務&#xff0c;創新點&#xff1a;異構距離編碼HDE提高GN…