Gazebo和ROS2的使用說明(部分翻譯)
用于與Gazebo通訊的ROS 2包的集合在名為gazebo_ros_pkgs的meta包中。有關(guān)背景信息,請(qǐng)參閱ROS2概述,然后再繼續(xù)。這些軟件包支持ROS 2 Crystal、Dashing和Gazebo 9,可以從debian軟件包或源代碼安裝。
Dolly是虛擬機(jī)器人小車,可作為Gazebo和ROS 2的實(shí)用介紹。
機(jī)器人操作系統(tǒng)的最新版本ROS 2提供了熟悉的工具和功能,同時(shí)擴(kuò)展到新的用例。
Gazebo是一個(gè)功能強(qiáng)大的機(jī)器人模擬器,供工業(yè)界和學(xué)術(shù)界使用,可以計(jì)算物理,生成傳感器數(shù)據(jù)并提供方便的界面。
開源軟件正在降低進(jìn)入門檻并加快機(jī)器人技術(shù)的進(jìn)步。
世界各地的機(jī)器人專家正在利用Gazebo和ROS的應(yīng)用,從人形機(jī)器人、無人機(jī)、物流機(jī)器人和自動(dòng)駕駛汽車。
參考文獻(xiàn):
http://gazebosim.org/tutorials?tut=ros2_installing
https://github.com/chapulina/dolly
介紹
用于與Gazebo通信的ROS 2包的集合包含在名為gazebo_ros_pkgs的meta包中。有關(guān)背景信息,請(qǐng)參閱ROS2概述,然后再繼續(xù)。這些軟件包支持ROS 2 Crystal和Gazebo 9,可以從debian軟件包或源代碼安裝。
預(yù)備條件
了解ROS 2的基本概念,并學(xué)習(xí)了一些?ROS 2教程。
安裝ROS 2
可以通過二進(jìn)制包安裝或源安裝來安裝ROS2,請(qǐng)參閱ROS 2安裝頁(yè)面。目前穩(wěn)定的分布是Crystal、Dashing。
提示:不要忘記按照ROS安裝頁(yè)面上的說明更新腳本。根據(jù)安裝方法,確切的命令會(huì)有所不同(setup.bash)
如:source /opt/ros/dashing/setup.bash
安裝Gazebo軟件
從源代碼或預(yù)制軟件包安裝Gazebo。請(qǐng)參閱安裝Gazebo。
安裝Gazebo 9。如果從源代碼安裝,請(qǐng)確保編譯?gazebo9發(fā)行版。目前ROS2只支持Gazebo9+版本。
提示:如果在查找插件和其他資源時(shí)遇到困難,可能需要獲取Gazebo的安裝文件。例如:。source?/usr/share/gazebo/setup.sh
安裝gazebo_ros_pkgs
按照說明從debian軟件包安裝,或從源代碼安裝說明。
從debian軟件包安裝(在Ubuntu上)
假設(shè)已經(jīng)安裝了一些Dashing debian軟件包,請(qǐng)gazebo_ros_pkgs按如下方式安裝?:
sudo apt install ros-dashing-gazebo-ros-pkgs
從源代碼安裝(在Ubuntu上)
如果您是一名活躍的開發(fā)人員,可以為代碼庫(kù)做出貢獻(xiàn),建議您安裝源代碼,因?yàn)樗梢蕴峁?duì)工作流程的更多訪問和控制。
提示:這些說明需要使用colcon構(gòu)建工具,這是ROS 2中使用的標(biāo)準(zhǔn)工具。
需要gazebo_ros_pkgs根據(jù)您正在使用的ROS 2版本選擇對(duì)應(yīng)發(fā)行版。目前支持的發(fā)行版是:
crystal+dashing:適用于Crystal debians或Crystal、Dashing的?ros2.repos。
ros2:指向下一個(gè)未發(fā)布的ROS 2龜,目前是Dashing。它適用于主?ros2.repos。
以下設(shè)置假定使用ros2分支安裝gazebo_ros_pkgs。
確保git安裝在您的Ubuntu機(jī)器上:
sudo apt install git
為colcon工作區(qū)創(chuàng)建一個(gè)目錄并移入其中:
mkdir -p ~/ws/src
復(fù)制此文件,獲取gazebo_ros_pkgs所需的其他包:
cd ~/ws
wget https://bitbucket.org/api/2.0/snippets/chapulina/geRKyA/f02dcd15c2c3b83b2d6aac00afe281162800da74/files/ros2.yaml
注意:version?yaml文件中的標(biāo)記表示我們正在檢查特定存儲(chǔ)庫(kù)的發(fā)行版,例如?版本:ros2檢出ros2發(fā)行版。
將包裝到src目錄中
cd ~/ws
vcs import src < ros2.yaml
安裝所有依賴項(xiàng):
cd ~/ws
rosdep install --from-paths src --ignore-src -r -y
然后編譯所有包:
cd ~/ws
colcon build --symlink-install
注意:在編譯之前,請(qǐng)確保正確獲取ROS 2環(huán)境。
如果在編譯過程中遇到任何問題,請(qǐng)務(wù)必在answers.gazebosim.org上尋求幫助?。
確保打開的每個(gè)新終端獲取此工作區(qū)的安裝設(shè)置:
source ~/ws/install/setup.bash
提示:可以通過運(yùn)行此命令為每個(gè)新終端自動(dòng)獲取此信息:echo?"source ~/ws/install/setup.bash"?>>?~/.bashrc
測(cè)試Gazebo和ROS 2集成
假設(shè)您的ROS 2和Gazebo環(huán)境已經(jīng)正確設(shè)置和構(gòu)建,您現(xiàn)在應(yīng)該能夠加載包含ROS 2插件的Gazebo世界,并在運(yùn)行時(shí)插入具有ROS 2插件的模型。
Gazebo ROS軟件包為您提供了幾個(gè)演示世界,讓您可以快速了解插件。可以在此處找到演示世界?,默認(rèn)安裝在?。/opt/ros/
每個(gè)世界文件都附帶頂部的說明,其中包含一些示例命令,您可以運(yùn)行這些命令來測(cè)試其功能,請(qǐng)務(wù)必檢查出來!
現(xiàn)在嘗試加載其中一個(gè)!
打開一個(gè)新終端
安裝ROS 2時(shí)按照說明獲取ROS 2。
確保安裝了一些核心工具:
sudo apt install ros-dashing-ros-core ros-dashing-geometry2
如果gazebo_ros_pkgs從源安裝,請(qǐng)使用工作區(qū):
. ~/ws/install/setup.bash
使用Gazebo加載阿克曼汽車模型:
gazebo --verbose /opt/ros/dashing/share/gazebo_plugins/worlds/gazebo_ros_ackermann_drive_demo.world
Gazebo GUI應(yīng)該帶有一個(gè)簡(jiǎn)單的車輛:
在新終端(這是第二個(gè))上,運(yùn)行以下命令以查看world文件。
gedit /opt/ros/dashing/share/gazebo_plugins/worlds/gazebo_ros_ackermann_drive_demo.world
看看頂部的塊如何有一些示例命令?打開第三個(gè)終端,再次,導(dǎo)入ROS 2,gazebo_ros_pkgs如上所述。
然后運(yùn)行其中一個(gè)命令,例如:
ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 0.2}}' -1
或者使用圖形化工具: rqt
你會(huì)看到車輛轉(zhuǎn)向前進(jìn):
多莉機(jī)器人
它是一只綿羊,它是一個(gè)小車,它是一個(gè)跟隨機(jī)器人。克隆多莉吧!
用于啟動(dòng)Dolly演示的軟件包,使用Gazebo和ROS 2。
多莉已通過測(cè)試:
ROS 2版本:
ROS水晶:crystal分支
ROS Dashing:master分支
操作系統(tǒng):
Ubuntu Bionic
OSX Sierra(謝謝,@ Karsten1987!)
安裝
安裝Ubuntu Bionic的說明。
按照此處的說明安裝相應(yīng)的ROS 2版本。
安裝gazebo_ros_pkgs,也安裝Gazebo。替換
sudo apt install ros-
克隆多莉:
mkdir -p ~/ws/src
cd ~/ws/src
git clone https://github.com/chapulina/dolly
編譯和安裝:
cd ~/ws
colcon build
運(yùn)行
設(shè)置環(huán)境變量(順序很重要):
. /usr/share/gazebo/setup.sh
. ~/ws/install/setup.bash
在城市中啟動(dòng)Dolly(這需要一些時(shí)間來下載模型):
ros2 launch dolly_gazebo dolly.launch.py world:=dolly_city.world
在一個(gè)空無的世界中啟動(dòng)Dolly:
ros2 launch dolly_gazebo dolly.launch.py world:=dolly_empty.world
功能包
此存儲(chǔ)庫(kù)包含3個(gè)包:
dolly:Metapackage,提供所有其他包。
dolly_follow:為節(jié)點(diǎn)提供跟隨邏輯。
dolly_gazebo:機(jī)器人模型,模擬世界和啟動(dòng)腳本。
將來完善
讓Doliz的模型可用于RViz
多莉是一只機(jī)器人羊。多莉隨身攜帶你的重物。Dolly有兩個(gè)電動(dòng)輪,可以讓機(jī)器人轉(zhuǎn)向,還有一個(gè)激光掃描儀可以檢測(cè)前方的物體。它還有一些代碼可以在激光掃描中找到最近的物體(可能是你)并控制車輪跟隨它。
莉不是一個(gè)真正的機(jī)器人。這是一個(gè)簡(jiǎn)單的機(jī)器人模擬,作為機(jī)器人專家在世界各地使用的一些強(qiáng)大的開源工具的介紹而創(chuàng)建。盡管多莉本身非常簡(jiǎn)單,但它與許多更復(fù)雜的機(jī)器人共享其大部分代碼,例如自動(dòng)駕駛汽車,倉(cāng)庫(kù)機(jī)器人,工業(yè)武器,四軸飛行器,人形機(jī)器人,甚至是國(guó)際空間站中的三個(gè)機(jī)器人。所有這些軟件的共同點(diǎn)是ROS,即??機(jī)器人操作系統(tǒng)。確切地說,當(dāng)今天聽到“ROS”這個(gè)詞時(shí),多莉并沒有像大多數(shù)人想象的那樣運(yùn)行。多莉?qū)嶋H上正在運(yùn)行最新一代的ROS,稱為ROS 2!
與之前的ROS 1一樣,ROS 2是用于機(jī)器人應(yīng)用的開源軟件開發(fā)套件。ROS 2的開發(fā)由Open Robotics公司領(lǐng)導(dǎo)??,該公司還負(fù)責(zé)維護(hù)Dolly生活的機(jī)器人模擬器,稱為??Gazebo,以及其他開源機(jī)器人軟件和硬件。這些項(xiàng)目是在BSD??和??Apache 2.0等許可的開源許可下發(fā)布的??,這使得它們對(duì)學(xué)術(shù)界和行業(yè)都具有吸引力。
機(jī)器人軟件
“機(jī)器人”這個(gè)詞的定義根據(jù)你的要求而有所不同,但運(yùn)行ROS并在Gazebo中模擬的機(jī)器人的關(guān)鍵特征是??驅(qū)動(dòng)。所以沒有聊天機(jī)器人或垃圾郵件;?我們談?wù)摰氖菣C(jī)器人能夠與他們的環(huán)境進(jìn)行交互,移動(dòng)自己甚至是其他物體。而且他們也不是盲目地移動(dòng)玩具;?他們配備了傳感器,可以觀察周圍世界的變化。將所有這些結(jié)合在一起,他們有邏輯理解這些觀察結(jié)果,以便做出明智的決定,決定接下來完成特定任務(wù)的動(dòng)作。這被稱為感覺 - 思考 - 行為周期,而多莉的軟件被組織起來以反映這三個(gè)部分。
ROS 2正在開發(fā)中,其目標(biāo)是為工業(yè)界和學(xué)術(shù)界提供標(biāo)準(zhǔn)軟件平臺(tái),從研究和原型設(shè)計(jì)到部署和生產(chǎn)將為他們提供支持。ROS 2建立在ROS 1的成功基礎(chǔ)之上,ROS 1目前已在世界各地的各種機(jī)器人應(yīng)用中使用。這種轉(zhuǎn)變的一個(gè)重要部分是維護(hù)核心ROS概念和工具,使ROS在機(jī)器人社區(qū)中取得如此成功。這些眾所周知的概念之一是“?節(jié)點(diǎn)”,“這是一個(gè)負(fù)責(zé)特定任務(wù)的計(jì)算單位。每個(gè)Dolly的sense-think-act循環(huán)都被映射到一個(gè)節(jié)點(diǎn)。“激光”節(jié)點(diǎn)感知世界,“跟隨”節(jié)點(diǎn)處理該數(shù)據(jù)以找到前方最近的點(diǎn)并生成具有移動(dòng)方向的命令,并且“差異驅(qū)動(dòng)”節(jié)點(diǎn)按指令移動(dòng)輪子(所謂因?yàn)槎嗬蚴遣钏佥喪綑C(jī)器人)。隨著Dolly移動(dòng),其激光讀數(shù)發(fā)生變化,周期再次開始。Dolly的軟件只有三個(gè)節(jié)點(diǎn)以簡(jiǎn)化,但大型機(jī)器人應(yīng)用程序可能有數(shù)百個(gè)節(jié)點(diǎn)協(xié)同工作,每個(gè)節(jié)點(diǎn)負(fù)責(zé)一個(gè)離散的明確定義的任務(wù)。
ROS中最基本的通信方法是通過稱為“?主題?”的通道使用多對(duì)多發(fā)布者 - 訂閱者機(jī)制。激光節(jié)點(diǎn)在“掃描”主題上發(fā)布掃描,跟隨節(jié)點(diǎn)訂閱;?反過來,follow節(jié)點(diǎn)在diffd驅(qū)動(dòng)節(jié)點(diǎn)訂閱的“cmds”主題上發(fā)布移動(dòng)命令。Dolly只使用主題,但除了這種單向通信之外,ROS還提供了一種稱為“服務(wù)”的請(qǐng)求 - 響應(yīng)機(jī)制,以及用于觸發(fā)更長(zhǎng)行為的“行動(dòng)”。
在使用這些通信模式時(shí),ROS開發(fā)人員傾向于盡可能使用標(biāo)準(zhǔn)化消息,這樣便于在各種項(xiàng)目之間共享節(jié)點(diǎn)。在這種分布式體系結(jié)構(gòu)中,節(jié)點(diǎn)不關(guān)心他們正在與哪些其他節(jié)點(diǎn)通信,他們只關(guān)心正在使用哪個(gè)主題,服務(wù)或操作。這意味著,如果有一天有人決定移除Dolly的輪子并將它們交換為螺旋槳將其變成飛羊,則他們將不需要觸摸激光器或跟隨節(jié)點(diǎn)。他們只需要將diff-drive節(jié)點(diǎn)交換為其他能夠以與機(jī)器人的新主體相匹配的方式轉(zhuǎn)換cmds主題上的移動(dòng)命令的東西。
代碼重用的簡(jiǎn)易性是ROS最大的優(yōu)勢(shì)之一,因?yàn)樗试S開發(fā)人員盡可能地利用彼此的工作。通過在ROS生態(tài)系統(tǒng)中構(gòu)建現(xiàn)有軟件,開發(fā)人員可以專注于其特定應(yīng)用程序的獨(dú)特方面。實(shí)際上,實(shí)現(xiàn)Dolly只需要編寫??跟隨節(jié)點(diǎn),該節(jié)點(diǎn)少于100行代碼。激光和差分驅(qū)動(dòng)節(jié)點(diǎn)由gazebo_ros_pkgs提供?,一個(gè)標(biāo)準(zhǔn)的ROS包,它在模擬特定邏輯和非特定邏輯之間建立橋梁。當(dāng)Dolly準(zhǔn)備好成為一個(gè)物理機(jī)器人時(shí),這些節(jié)點(diǎn)將由特定于硬件的驅(qū)動(dòng)程序和控制器代替,但是后續(xù)節(jié)點(diǎn)可以保持相同,因?yàn)樗l(fā)布和訂閱標(biāo)準(zhǔn)消息。但是你可以想象,跟隨節(jié)點(diǎn)并不是最亮的機(jī)器人邏輯。事實(shí)上,多莉無法從樹上告訴一個(gè)人。在實(shí)際應(yīng)用程序中,開發(fā)人員將利用社區(qū)提供的其他功能,例如??導(dǎo)航堆棧,這將允許Dolly在世界范圍內(nèi)自主移動(dòng)。
上面提到的所有通信模式都已經(jīng)從ROS 1遷移到ROS 2并且在此過程中得到了改進(jìn)。雖然ROS 1使用自定義通信層,但ROS 2構(gòu)建在DDS之上??。DDS是在航空和核電等關(guān)鍵任務(wù)應(yīng)用中得到驗(yàn)證的行業(yè)標(biāo)準(zhǔn)。您可以?在InfoQ上閱讀本文中有關(guān)DDS集成的更多詳細(xì)信息??。
除了消息傳遞系統(tǒng),ROS 2還提供了強(qiáng)大的開發(fā)人員工具。例如,??RViz??是ROS主題的可視化工具,在應(yīng)用程序開發(fā)和調(diào)試期間非常寶貴。它有一個(gè)3D場(chǎng)景,來自應(yīng)用程序任何部分的數(shù)據(jù)可以一起顯示,例如點(diǎn)云和坐標(biāo)框架。RViz還提供控制界面,例如可以拖動(dòng)以移動(dòng)真實(shí)機(jī)器人的3D標(biāo)記。?RQT?是另一個(gè)方便的圖形工具,它允許開發(fā)人員快速組裝小部件以與其機(jī)器人應(yīng)用程序的任何方面進(jìn)行交互,無論是否模擬。下圖顯示了Doliz在RViz中的激光掃描以及Gazebo的視圖,顯示了模擬中的可視化。RViz將以相同的方式顯示掃描,無論它們是模擬還是來自硬件。
模擬
多莉住在Gazebo,這是一個(gè)機(jī)器人模擬器,可以執(zhí)行物理計(jì)算,生成合成傳感器數(shù)據(jù)并提供方便的界面。界面范圍從圖形工具到C ++ API,允許用戶和開發(fā)人員更快地實(shí)現(xiàn)他們的目標(biāo)。Gazebo的目的是成為物理機(jī)器人的最佳軟件替代品。Gazebo的一些用途包括新機(jī)器人的原型設(shè)計(jì),新算法和行為的開發(fā),持續(xù)集成測(cè)試和教育。
在模擬中,物理引擎處理Dolly如何與環(huán)境交互。這包括諸如重力將Dolly拉到地面,車輪和人行道之間的接觸以及施加在車輪上的扭矩等行為。Gazebo沒有實(shí)現(xiàn)自己的物理引擎;?相反,它提供了一個(gè)抽象層,允許集成多個(gè)引擎。這樣,開發(fā)人員一次描述和編程他們的機(jī)器人,然后在運(yùn)行時(shí)選擇最合適的物理引擎。默認(rèn)情況下,Gazebo使用??Open Dynamics Engine(ODE),但它也支持??Bullet,DART??和??Simbody。
Dolly配備了單個(gè)傳感器,激光掃描儀,但Gazebo支持十幾種傳感器,如彩色和深度相機(jī),IMU和GPS。開發(fā)人員還可以通過C ++ API創(chuàng)建新的傳感器。像攝像機(jī)和激光掃描儀這樣的傳感器使用??Ogre3D??渲染引擎生成世界圖像,而IMU和聲納等傳感器則利用物理引擎。模擬傳感器的缺點(diǎn)是,與物理傳感器相比,它們往往有點(diǎn)過于完美。因此,傳感器API的一個(gè)重要方面是能夠向生成的數(shù)據(jù)添加各種類型的噪聲并且還會(huì)干擾它們的更新速率。
Gazebo具有豐富的圖形界面,可幫助用戶構(gòu)建,內(nèi)省并與其模擬進(jìn)行交互。例如,Dolly的城市環(huán)境是使用eRuby??腳本,UI的3D視圖和小部件的組合構(gòu)建的??,這些小部件提供有關(guān)場(chǎng)景中每個(gè)模型的詳細(xì)信息。在模擬運(yùn)行時(shí),3D視圖也是一種可視化激光掃描的方便方法,也可以內(nèi)省各種其他方面,如關(guān)節(jié)位置,質(zhì)心,甚至慣性矩。在迭代算法時(shí),這種模擬能夠提供場(chǎng)景的空中X射線視圖的能力非常有用,并且在現(xiàn)實(shí)世界中很難(如果不是不可能的話)。
Gazebo還允許開發(fā)人員與他們的機(jī)器人進(jìn)行交互,就像在現(xiàn)實(shí)世界中一樣。理論上,你可以戴上一些VR護(hù)目鏡并使用控制器來踢多莉像一些機(jī)器人專家那樣喜歡他們真正的機(jī)器人。請(qǐng)注意,這里絕對(duì)不鼓勵(lì)濫用機(jī)器人。相反,您可以使用稍微更精細(xì)的方法,例如推動(dòng)機(jī)器人檢查其恢復(fù)行為的3D箭頭。它也可以移動(dòng)人類,添加另一個(gè)機(jī)器人,改變城市的布局......任何有助于您的特定項(xiàng)目的開發(fā)。
使用模擬描述格式描述Gazebo中的世界??。SDF是一種XML格式,允許指定模擬的各個(gè)方面,從Dolly's waggy尾巴上的彈簧到太陽(yáng)光的顏色。用戶可以將在線數(shù)據(jù)庫(kù)中的3D模型與他們自己的自定義模型相結(jié)合,為他們的機(jī)器人創(chuàng)建各種環(huán)境。實(shí)際上,Dolly周圍的整個(gè)城市環(huán)境都是由Ignition Fuel??在線數(shù)據(jù)庫(kù)中的免費(fèi)模型組成??。Dolly本身就是一個(gè)自定義模型,它的所有細(xì)節(jié)都可以通過UI或直接在其SDF文件中進(jìn)行調(diào)整和改進(jìn)。
Dolly的例子是Gazebo可以做的最簡(jiǎn)單的模擬之一,但網(wǎng)上有各種精心設(shè)計(jì)的例子。基于模擬的比賽,如??虛擬機(jī)器人挑戰(zhàn)賽,??太空機(jī)器人挑戰(zhàn)賽??和即將舉行的??地下挑戰(zhàn)賽等??都是很好的例子。一些機(jī)器人制造商也在免費(fèi)分發(fā)他們機(jī)器人的Gazebo模擬,例如??Fetch Robotics的倉(cāng)庫(kù)機(jī)器人和??Parrot的無人機(jī)。
為了解決新的使用案例,Open Robotics團(tuán)隊(duì)正積極致力于Gazebo的下一代產(chǎn)品,即??Ignition。這種重構(gòu)將Gazebo打造成更小,更可重用的庫(kù),具有物理和渲染引擎的抽象層,支持運(yùn)行分布在云中的機(jī)器上的大型模擬,以及使用現(xiàn)代GUI(QtQuick)和傳輸(ZeroMQ)庫(kù)。
克隆多莉!
Gazebo和ROS 2現(xiàn)在只需幾次擊鍵即可。您可以??克隆Dolly并按照說明啟動(dòng)并運(yùn)行一個(gè)簡(jiǎn)單的示例。還有關(guān)于??ROS索引??和??Gazebo教程??的各種教程,涵蓋了各種各樣的功能和用例。您可以在社區(qū)中找到有關(guān)ROS Discourse??和??Gazebo社區(qū)的更多深入討論??,以及有關(guān)ROS Answers??和??Gazebo Answers的技術(shù)問題的??答案。最后,但并非最不重要的是,觀看ROS開發(fā)者年度會(huì)議ROSCon的視頻,并確保為澳門發(fā)生的ROSCon 2019預(yù)留座位??。
Louise Poubel??是Open Robotics的軟件工程師??,致力于機(jī)器人技術(shù)的免費(fèi)和開源工具,如機(jī)器人模擬器Gazebo和機(jī)器人操作系統(tǒng)(ROS)。
機(jī)器人 機(jī)器翻譯
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。