學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
705
2022-05-30
《孫子兵法·謀攻篇》:“上兵伐謀,其次伐交,其次伐兵,其下攻城;攻城之法為不得已。”
任何發(fā)生在自己國(guó)土上的戰(zhàn)爭(zhēng),即便勝利,也飽含屈辱。
----~~~~----Gazebo 8
使用ROS / Gazebo版本的組合
介紹
本文檔概述了使用不同版本的ROS與不同版本的Gazebo結(jié)合使用的選項(xiàng)。建議在安裝Gazebo ROS包裝機(jī)之前閱讀它。
重要!簡(jiǎn)單分析一個(gè)快速正確的決定
如果您計(jì)劃使用特定版本的ROS,并且沒有理由使用特定版本的Gazebo,則應(yīng)繼續(xù)?安裝gazebo_ros_pkgs?教程,該教程說明如何通過ROS安裝完全支持的Gazebo版本。
警告:請(qǐng)注意,使用與ROS存儲(chǔ)庫交付的官方版本不同的Gazebo版本可能會(huì)導(dǎo)致ROS程序包的沖突或其他集成問題。
Gazebo版本和ROS集成
Gazebo是一個(gè)獨(dú)立的項(xiàng)目,如boost,ogre或ROS使用的任何其他項(xiàng)目。通常,在每個(gè)ROS發(fā)行周期開始時(shí)(例如gazebo7ROS Kinetic)提供的Gazebo的最新主要版本被選為完全集成和支持的官方Gazebo,并將在ROS發(fā)行的整個(gè)生命周期中保留。
Gazebo開發(fā)與ROS不同步,所以每個(gè)新的主要版本的Gazebo必須在ROS發(fā)布之前被釋放。以下部分介紹如何使用不同版本的Gazebo的ROS。
需要注意的是GazeboABI穩(wěn)定政策遵循?語義版本理念,其中具有相同的主號(hào)碼(所有版本,,?,...)使用相同的ROS發(fā)行時(shí)是二進(jìn)制兼容的,因此可以互換。gazebo_6.0.0gazebo_6.1.0gazebo_6.0.1
安裝Gazebo
GazeboUbuntu包
安裝Gazebo的最簡(jiǎn)單方法是使用包。有兩個(gè)主要的倉庫主持Gazebo包:一個(gè)是另一個(gè)。在寫作時(shí):packages.ros.orgpackages.osrfoundation.org
packages.ros.org
Indigo:主機(jī)Gazebo版本2.x包。
Kinetic:主機(jī)或使用Gazebo版本7.x包。
Lunar:主機(jī)或使用Gazebo版本7.x包。
packages.osrfoundation.org
Gazebo5.x系列(包名gazebo5)
Gazebo6.x系列(包名gazebo6)
Gazebo7.x系列(包名gazebo7)
Gazebo8.x系列(包名gazebo8)
這意味著包含osrfoundation存儲(chǔ)庫不是嚴(yán)格需要獲得GazeboUbuntu包。它可以從ros存儲(chǔ)庫安裝。
Gazebo從源頭建成
如果您從源代碼編輯了Gazebo版本,請(qǐng)注意,根據(jù)使用的存儲(chǔ)庫分支(gazebo6,,gazebo7...),您的Gazebo將與gazebo_ros_pkgs(和所有其他在Gazebo頂部編譯的ROS包)二進(jìn)制兼容,只有主版本匹配您的本地分支存儲(chǔ)庫和ROS發(fā)行版中使用的Gazebo版本。例如,如果您是從Gazebo分支編譯,您可以使用?Indigo(使用Gazebo2系列)的禮物。gazebo_2.0gazebo_ros_pkgs
請(qǐng)注意,如果您使用default分支,您可能不是與任何發(fā)布的包二進(jìn)制兼容,所以您將需要一個(gè)catkin工作區(qū)才能獲得有效的gazebo_ros_pkgs。
使用默認(rèn)的Gazebo版本進(jìn)行ROS分發(fā)
對(duì)于需要運(yùn)行特定版本的ROS并且想要使用所有GazeboROS相關(guān)軟件包的用戶,這是推薦的部分:
Lunar
ROS Lunar主持或使用7.x版本的Gazebo。對(duì)于完全集成的ROS系統(tǒng),我們建議使用7.x版本的Gazebo。繼續(xù)進(jìn)行下去的方法就是使用ROS庫(它會(huì)自動(dòng)安裝gazebo7),并且還沒有使用osrfoundation庫。
Kinetic
ROS Kinetic主機(jī)或使用7.x版本的Gazebo。對(duì)于完全集成的ROS系統(tǒng),我們建議使用7.x版本的Gazebo。繼續(xù)進(jìn)行下去的方法就是使用ROS庫(它會(huì)自動(dòng)安裝gazebo7),并且還沒有使用osrfoundation庫。
Indigo
ROS Indigo擁有Gazebo的2.x版本。對(duì)于完全集成的ROS系統(tǒng),我們建議使用2.x版本的Gazebo。繼續(xù)進(jìn)行下去的方法就是使用ROS庫(它會(huì)自動(dòng)安裝gazebo2),并且還沒有使用osrfoundation庫。
用ROS使用具體的Gazebo版本
警告!使用此選項(xiàng),您將無法使用ROS deb存儲(chǔ)庫中與Gazebo相關(guān)的任何ROS Ubuntu軟件包。相當(dāng)于gazebo_ros_pkgs?可以從debian包安裝,但所有其他軟件(如?turtlebot_gazebo)都必須從源代碼構(gòu)建。感謝catkin工作區(qū),?這很容易做到。
如果真的需要,可以使用Gazebo和ROS的任何特定版本:
Gazebo8.x系列
OSRF存儲(chǔ)庫提供了構(gòu)建在包上方的ROS / Kinetic或ROS / LunarGazebo包裝器()的版本。使用它們的步驟是:-gazebo8-gazebo8_ros_pkgsgazebo8
將osrfoundation存儲(chǔ)庫添加到源列表中。
安裝從osrfoundation庫,這將安裝包。ros-$ROS_DISTRO-gazebo8-ros-pkgsgazebo8
使用catkin工作區(qū)編譯源代碼中使用的其他軟件。
Gazebo7.x系列
OSRF存儲(chǔ)庫提供了構(gòu)建在包上方的ROS / IndigoGazebo包裝器()的版本。使用它們的步驟是:-gazebo7-gazebo7_ros_pkgsgazebo7
將osrfoundation存儲(chǔ)庫添加到源列表中。
安裝從osrfoundation庫,這將安裝包。ros-indigo-gazebo7-ros-pkgsgazebo7
使用catkin工作區(qū)編譯源代碼中使用的其他軟件。
常問問題
我沒有使用ROS,應(yīng)該使用哪個(gè)版本?
如果您不需要ROS支持,推薦的版本是可以使用osrfoundationrepo安裝的最新版本?。
我想使用子彈/ simbody / dart物理引擎,我應(yīng)該使用哪個(gè)版本的Gazebo?
從gazebo4Ubuntu軟件包中內(nèi)置了子彈和simbody支持,所以請(qǐng)按照上述說明gazebo4與ROS結(jié)合使用。Dart仍然需要從源頭開始安裝Gazebogazebo3,從而可以使用gazebo3或更高版本,并按照上述說明使其與ROS一起使用。
我需要使用Gazebo8和ROS Kinetic / Lunar,我該怎么辦?
警告!使用此選項(xiàng),您將無法使用ROS deb存儲(chǔ)庫中與Gazebo相關(guān)的任何ROS Kinetic軟件包。要從源頭構(gòu)建它們的方式。感謝catkin工作區(qū),這很容易做到。
如果您需要一些僅在Gazebo版本8.x中出現(xiàn)的功能,則有一種安裝方式gazebo8和ROS Kinetic / Lunar。請(qǐng)按照有關(guān)如何使用ROS與Gazebo8軟件包在同一文檔的說明。
我需要使用Gazebo7和ROSIndigo,我該怎么辦?
警告!使用此選項(xiàng),您將無法使用ROS deb存儲(chǔ)庫中與Gazebo相關(guān)的ROS Indigo軟件包。要從源頭構(gòu)建它們的方式。感謝catkin工作區(qū),這很容易做到。
如果您需要一些僅在Gazebo版本7.x中顯示的功能,則有一種安裝方式gazebo7和ROS Indigo。請(qǐng)按照有關(guān)如何使用在同一文檔中使用Raze與Gazebo7的說明。
一些ROS包與GazeboX ROS Wrappers沖突!
請(qǐng)注意,每個(gè)ROS分布都被設(shè)計(jì)為與特定版本的Gazebo一起使用(gazebo7在Kinetic中)。當(dāng)有人選擇使用與ROS發(fā)行版中推薦的不同版本的Gazebo時(shí),可能會(huì)出現(xiàn)問題,其中一些可能無法解決。
如果在嘗試安裝本文檔中描述的一個(gè)版本之后發(fā)現(xiàn)依賴沖突(例如使用RVIZ),則需要從源安裝ROS或Gazebo。
----~~~~----ROS2
ROS 2
機(jī)器人操作系統(tǒng)(ROS)是一組可幫助您構(gòu)建機(jī)器人應(yīng)用程序的軟件庫和工具。從驅(qū)動(dòng)程序到最先進(jìn)的算法,以及強(qiáng)大的開發(fā)人員工具,ROS具有您下一個(gè)機(jī)器人項(xiàng)目所需的功能。這都是開源的。
在這里,您將找到有關(guān)如何安裝和使用ROS 2軟件的文檔,ROS 2是一個(gè)正在大力開發(fā)的新版本的ROS。有關(guān)ROS 2的更多信息,請(qǐng)參見下文。
如果您正在尋找有關(guān)ROS 1的信息(即ROS,因?yàn)樗呀?jīng)存在了好幾年,現(xiàn)在您可能正在使用),請(qǐng)查看ROS網(wǎng)站或文檔維基。
在繼續(xù)之前,請(qǐng)閱讀功能頁面了解當(dāng)前ROS 2版本中的內(nèi)容。
安裝
請(qǐng)參閱安裝頁面。
教程
ROS 2正在大力發(fā)展,所有版本目前都是“alpha”-prefixed。您不應(yīng)該期望今天從ROS 1切換到ROS 2,但您可以查看教程頁面,以查看系統(tǒng)在當(dāng)前狀態(tài)下可以執(zhí)行的操作的一系列示例。
特約
有關(guān)如何為ROS 2開發(fā)做出貢獻(xiàn)的詳細(xì)信息,請(qǐng)參閱貢獻(xiàn)頁面和開發(fā)人員指南。
報(bào)告問題和提問
請(qǐng)參閱聯(lián)系頁面。
關(guān)于ROS 2
自從ROS于2007年啟動(dòng)以來,機(jī)器人和ROS社區(qū)發(fā)生了很大變化。ROS 2項(xiàng)目的目標(biāo)是適應(yīng)這些變化,利用ROS 1的優(yōu)勢(shì),改善不了的。有一個(gè)關(guān)于ROS 2的動(dòng)機(jī)完整的文章在這里。
當(dāng)前狀態(tài)
ROS 2的Alpha版本目前正在進(jìn)行約6周的節(jié)奏,讓社區(qū)成員有機(jī)會(huì)對(duì)系統(tǒng)提供反饋。在高層次上,ROS 2的發(fā)展廣泛側(cè)重于為支持多個(gè)DDS中間件實(shí)施,多個(gè)操作系統(tǒng),多種編程語言以及與運(yùn)行ROS 1的系統(tǒng)共存的基礎(chǔ)奠定基礎(chǔ)。有關(guān)當(dāng)前功能的詳細(xì)信息,請(qǐng)參閱功能。
有什么事情
有關(guān)ROS 2的即將推出的功能的詳細(xì)信息,請(qǐng)參閱路線圖。
在哪里可以找到更多信息
有關(guān)ROS 2設(shè)計(jì)的各種文章在design.ros2.org,如:為什么選擇ROS 2.0?,ROS上DDS,和ROS 1和ROS 2之間變化。
ROS 2的代碼是開源的,分為各種存儲(chǔ)庫。您可以在ros2 github組織上找到大多數(shù)存儲(chǔ)庫的代碼。
以下是關(guān)于ROS 2的ROSCon會(huì)談,并提供有關(guān)ROS 2和各種演示的工作的信息:
----~~~~----ROS暑期學(xué)校課程及資料下載
第1天 (2017年7月22日)(科學(xué)會(huì)堂)
第2天(2017年7月23日)(科學(xué)會(huì)堂)
第3天(2017年7月24日)
第4天(2017年7月25日)
第5天(2017年7月26日)
第6天(2017年7月27日)
第7天(2017年7月28日)
第8天(2017年7月29日)
----~~~~----使用ROS進(jìn)行機(jī)器人編程學(xué)習(xí)網(wǎng)址
http://robocademy.com/
如果你喜歡機(jī)器人,而你想學(xué)習(xí)如何編程,那就是你的Meetup!
ROS正在成為機(jī)器人編程的標(biāo)準(zhǔn)。所以你必須掌握ROS,如果你想在不久的將來在機(jī)器人工作。
來到這個(gè)MeetUp,找到一個(gè)非常快的方式來學(xué)習(xí)ROS!
您將需要攜帶筆記本電腦,因?yàn)檫@將是一個(gè)手寫教程。但不用擔(dān)心,您可以攜帶任何類型的筆記本電腦。本教程無需安裝。所有的編程都將在線完成。
請(qǐng)?zhí)崆?0-15分鐘連接互聯(lián)網(wǎng),抓住一個(gè)不錯(cuò)的機(jī)會(huì)!
----~~~~----
http://bluesat.com.au/a-dummys-guide-to-debugging-ros-systems/
調(diào)試ROS系統(tǒng)的虛擬指南
所以你寫了最終的ROS程序:經(jīng)過數(shù)千行代碼,你的機(jī)器人終將達(dá)到感覺,帶來奇點(diǎn)!
一個(gè)接一個(gè)地啟動(dòng)你的節(jié)點(diǎn)。每一個(gè)使啟示錄越來越近。你輸入最后一個(gè)命令。和。而且什么也沒有。什么地方出了錯(cuò)?你會(huì)怎么找到,永遠(yuǎn)擠壓那個(gè)妨礙你勝利的時(shí)刻的錯(cuò)誤?這個(gè)博客試圖回答這些問題,更多*。
在BLUEsat中,我們已經(jīng)有了我們分享復(fù)雜的ROS調(diào)試問題。當(dāng)您通過競(jìng)爭(zhēng)任務(wù)中途進(jìn)行時(shí),最好的時(shí)間會(huì)發(fā)生,隨著時(shí)間的推移。雖然這篇文章還會(huì)在較短的時(shí)間內(nèi)看看更常見的調(diào)試情況,并且易發(fā)生火災(zāi)的環(huán)境**。
以下是我們成功部署以調(diào)試ROS環(huán)境的幾種工具和技術(shù)。
保持冷靜和火焰!
你以前可能已經(jīng)聽過這個(gè)消息,但是在調(diào)試時(shí)不重要的結(jié)論或者您沒有正確測(cè)試的修復(fù)程序非常重要。例如,Google有一個(gè)策略,可以回滾其服務(wù)上的更改,而不是嘗試推送修復(fù)。一個(gè)類似的想法適用于競(jìng)爭(zhēng)或時(shí)間壓力的情況:確保你已經(jīng)想到通過這個(gè)補(bǔ)丁,從你的機(jī)器人刪除“不要?dú)⑷恕钡陌踩≡掚m如此,不幸的是,回滾不太可能適用于競(jìng)爭(zhēng)情況,也不可能將您剛才 在機(jī)器人上啟動(dòng)的火災(zāi)推遲。所以我們不能只是復(fù)制谷歌,但我們應(yīng)該考慮一下我們?cè)谧鍪裁础?/p>
基本上,在這種情況下您應(yīng)用的任何修補(bǔ)程序或配置修復(fù)程序都是計(jì)算出的風(fēng)險(xiǎn),您應(yīng)該確保在做某些事情之前了解這些風(fēng)險(xiǎn)。在去年的歐洲巡回賽挑戰(zhàn)賽中,我發(fā)現(xiàn)可以調(diào)整小型設(shè)置,重啟某些節(jié)點(diǎn),重新校準(zhǔn)系統(tǒng);?但是由于建立通信所需的時(shí)間,在任務(wù)期間強(qiáng)制循環(huán)流動(dòng)站太危險(xiǎn)了。同樣重新啟動(dòng)我們的驅(qū)動(dòng)系統(tǒng)或攝像機(jī)對(duì)我們的飛行員來說是非常具有破壞性的,所以只能在某些情況下完成,在這種情況下,通過不修復(fù)系統(tǒng)造成的損壞可能會(huì)更糟。話雖如此,在關(guān)鍵的攝像機(jī)失敗后,我們?cè)噲D以編程方式對(duì)該設(shè)備進(jìn)行電源循環(huán) - 這個(gè)決定是指攝像機(jī)足夠重要,可以嘗試這樣一個(gè)危險(xiǎn)的舉動(dòng)。
在非時(shí)間壓力的情況下,您可以更靈活。可以測(cè)試不同的選項(xiàng),看看它們是否工作。這是因?yàn)樗鼈儾粫?huì)損壞您的機(jī)器人。然而,結(jié)構(gòu)化的方法通常對(duì)于那些更復(fù)雜的錯(cuò)誤是有益的。我經(jīng)常發(fā)現(xiàn),當(dāng)我調(diào)試間歇性或難以檢測(cè)到的問題,很容易就會(huì)失去跟蹤我嘗試過的結(jié)果,或者得到結(jié)果。我發(fā)現(xiàn)一個(gè)非常有用的技術(shù)是記錄我在做什么,就像我所做的那樣,特別是如果問題包括傳感器數(shù)據(jù)。
基本上主要的一點(diǎn)也是保持頭腦清晰,并在行動(dòng)之前考慮后果。了解風(fēng)險(xiǎn),并準(zhǔn)備好您的E-Stop按鈕!現(xiàn)在看看可以用來幫助你調(diào)試的一些工具。
抓住你的RQT
方便的“?rqt?”工具是ROS調(diào)試器的瑞士軍刀。在時(shí)間壓力和非時(shí)間壓力的調(diào)試中,它節(jié)省了很多次。在2016年歐洲巡回賽挑戰(zhàn)賽中,我是在調(diào)試臺(tái)的不間斷的伙伴,提供了許多有用的見解和許多有用的診斷數(shù)據(jù)。(一個(gè)標(biāo)準(zhǔn)的BLUEsat漫游者駕駛?cè)藛T由駕駛漫游者的飛行員組成,一名副駕駛 - 跟蹤任務(wù)目標(biāo),飛行員位置,并管理飛行員的通訊;以及一個(gè)調(diào)試器,用于監(jiān)視流動(dòng)站的狀態(tài)軟件和管理不同運(yùn)行的ROS節(jié)點(diǎn))。
RQT使用終端中的“rqt”命令運(yùn)行,并且包含可通過插件菜單加載的一系列小部件??。下面我將簡(jiǎn)要介紹一些必須有用的小部件。
RQT的第一個(gè)工具是節(jié)點(diǎn)圖。此小部件將您的ROS圖中的所有節(jié)點(diǎn)描繪為橢圓形,并將所有主題作為正方形。方向箭頭表示哪些節(jié)點(diǎn)正在廣告或訂閱主題。您還可以選擇僅顯示當(dāng)前連接到發(fā)布者和訂戶(活動(dòng))的主題,或僅顯示節(jié)點(diǎn)而不顯示主題信息。
當(dāng)我開始調(diào)試ROS問題時(shí),節(jié)點(diǎn)圖是我看到的第一件事情之一。一目了然,我可以看到哪些節(jié)點(diǎn)正在運(yùn)行,如果兩個(gè)節(jié)點(diǎn)正確連接。令人驚訝的是,ROS問題的頻率可以像沒有運(yùn)行的節(jié)點(diǎn)一樣簡(jiǎn)單(或者當(dāng)不應(yīng)該運(yùn)行時(shí))。該圖還允許我們看到節(jié)點(diǎn)是否正確連接 - 拼寫錯(cuò)誤的主題名稱當(dāng)然不會(huì)在代碼中跳出來,但它在圖表中直接顯示為缺少的一個(gè)鏈接。
如果我們使用節(jié)點(diǎn)圖找不到我們的問題,那么?下一個(gè)小部件通常會(huì)有幫助。該主題監(jiān)視器??是較年輕,更好地組織同級(jí)rostopic回聲命令行工具。它顯示所有當(dāng)前廣告主題的列表,并允許您監(jiān)視它們。除了每個(gè)主題都是一個(gè)復(fù)選框,當(dāng)選中訂閱我們的主題,顯示其完整的輸出以及它使用的帶寬和發(fā)布的頻率。
這對(duì)于檢查正確的信息是否正在通過您的ROS網(wǎng)絡(luò)而言非常有用,而無需在所有節(jié)點(diǎn)中添加ROS_INFO調(diào)試。在BLUEtongue Rover上,我們發(fā)布了大量的診斷信息作為ROS主題(這里有一點(diǎn)更多)。其中一些用于通過GUI向我們的飛行員提供信息,但如果我們需要了解細(xì)節(jié),那么RQT可以提供大量豐富的信息。
除了診斷信息之外,主題監(jiān)視器可用于查找網(wǎng)絡(luò)中的問題。一個(gè)常見的情況是沒有實(shí)際發(fā)布任何消息的節(jié)點(diǎn) - 在這種情況下,它可能無法正確連接,您應(yīng)該查看ROSWTF部分。您還可以看到節(jié)點(diǎn)是否發(fā)布錯(cuò)誤的消息類型,或者是否有任何值不正確。
最后,您還可以使用主題監(jiān)視器來識(shí)別潛在的帶寬問題,盡管您應(yīng)該記住,在這樣做時(shí),rqt將會(huì)訂閱主題本身,這可能會(huì)加劇問題。
RQT??Message Publisher是??主題監(jiān)視器的?邪惡雙胞胎。顧名思義,它允許您發(fā)布消息,為命令行rostopic pub命令提供非常相似的功能??- 您可以選擇主題,消息類型和頻率,然后輸入要發(fā)送的數(shù)據(jù)。然而,它還提供了一些額外的視覺輔助工具來加快調(diào)試過程。
首先,它預(yù)先填充主題列表和相應(yīng)的類型列表,使您可以快速發(fā)布到當(dāng)前在網(wǎng)絡(luò)中的任何用戶。這可以是壓力下的救生員,并且阻止您不斷提醒自己,如果該cmd_vel消息是geometry_msgs / Twist?? 或geometry_msgs / TwistStamped。
一旦您選擇了消息類型,它還將顯示該消息的字段,使其更簡(jiǎn)單地填寫這些更復(fù)雜的消息。它還記住以前發(fā)送的消息,允許您快速重新發(fā)送。如果您需要執(zhí)行類似發(fā)送特定消息集的操作,或者在事件發(fā)生后快速啟用消息,這可能會(huì)很好。
最后,如果您是高級(jí)用戶或需要發(fā)送更復(fù)雜的消息,則可以在“表達(dá)式”字段中輸入有效的python表達(dá)式,而不是實(shí)際值。這包括時(shí)間,數(shù)學(xué)或隨機(jī)模塊中的任何方法。此外,它還為您提供自動(dòng)計(jì)數(shù)器i(請(qǐng)參閱上述圖像的示例)。
我將在RQT調(diào)試工具中討論的最后一個(gè)工具是TF Tree。如果您使用ROS的變換系統(tǒng),該工具很有用??,如果您不想跳過本節(jié)。
TF樹顯示您的變換的連接結(jié)構(gòu),以及哪個(gè)節(jié)點(diǎn)發(fā)布給定的幀,最后一次更新,以及系統(tǒng)中最舊的變換。
我用過的最好的用法是檢測(cè)圖中的差距。例如,如果您沒有向joint_state發(fā)布任何關(guān)于它的信息,那么ROS的robot_state_publisher將不會(huì)發(fā)布非固定聯(lián)合的轉(zhuǎn)換??,這可能導(dǎo)致無法訪問的轉(zhuǎn)換。如果發(fā)生這種情況,最好的方法往往是返回并檢查以確保要發(fā)布的任何節(jié)點(diǎn)正在正常運(yùn)行。通過查看平均速率和??最近的變換值來識(shí)別轉(zhuǎn)換超時(shí)的原因也很有用。
找到自己與RViz
RQT是一個(gè)非常有用的日常調(diào)試工具,但是如果您正在處理非常可視化的信息,例如點(diǎn)云或軟件認(rèn)為機(jī)器人的不同部分,那么需要更強(qiáng)大的功能。那就是RViz進(jìn)入的地方,它是一個(gè)3D場(chǎng)景,您可以在其中可視化不同類型的ROS數(shù)據(jù)。除了URDF機(jī)器人模型,RViz還支持點(diǎn)云,占用網(wǎng)格等等。基本上如果您想要可視化的主題是ros-desktop的一部分,那么您可以在RViz中看到它。(注意:如果您真的想使用RQT,您可以使用RViz作為RQT插件)。
RViz實(shí)際上在ROS Wiki上有一些合理的教程,所以我只是在這里給出懸崖的筆記。RViz的關(guān)鍵特性是能夠加載不同的ROS消息,并相對(duì)于彼此進(jìn)行可視化。如果您嘗試調(diào)試與本地化或自動(dòng)化相關(guān)的任何操作,如果您的機(jī)器人認(rèn)為它在錯(cuò)誤的地方或傳感器數(shù)據(jù)有問題,您可以快速解決問題,這很有用。作為RViz多功能性的一個(gè)例子,我們?cè)?016年歐洲巡回賽挑戰(zhàn)賽的“盲人導(dǎo)航”任務(wù)中利用它來顯示相對(duì)于流動(dòng)站估計(jì)位置的單個(gè)LIDAR數(shù)據(jù)平面(在該任務(wù)中禁止攝像機(jī)進(jìn)給或全3D傳感器可視化) )。我們還廣泛使用它來調(diào)試LIDAR傳感器輸入(見下文)和各種SLAM解決方案。
ROSWTF!
如果你有奇怪的連接問題或節(jié)點(diǎn),否則似乎正常工作,那么roswtf工具就是你的家伙/ gal。基本上,ROSWTF旨在成為您一站式商店,用于識(shí)別您的ROS系統(tǒng)中的問題,盡管我的經(jīng)驗(yàn)是不完整的。然而,它真正的好處是檢測(cè)您的ROS網(wǎng)絡(luò)的任何設(shè)置或網(wǎng)絡(luò)問題。
一個(gè)這樣的問題是您的ROS網(wǎng)絡(luò)上的機(jī)器無法識(shí)別對(duì)方的主機(jī)名。如果您沒有像DHCP或DNS在機(jī)器之間共享這些東西,或者您的計(jì)算機(jī)的DNS名稱與本地程序認(rèn)為您的主機(jī)名不匹配,則可能會(huì)發(fā)生這種情況。這是一個(gè)難以檢測(cè)的問題,因?yàn)楣?jié)點(diǎn)通常會(huì)連接并正常運(yùn)行,直到他們嘗試與其他機(jī)器上的節(jié)點(diǎn)通信為止。ROSWTF會(huì)發(fā)現(xiàn)這很難找到問題。
在大多數(shù)情況下,有兩種方法來解決這個(gè)問題,第一種是將本地機(jī)器的ROS_HOST環(huán)境變量配置為其IP地址,第二種是修復(fù)主機(jī)名解析,使機(jī)器可以找到對(duì)方。后者可以通過在/ etc / hosts文件中添加條目??或更新本地DNS服務(wù)器來完成。在BLUEsat中,我們傾向于使用環(huán)境變量選項(xiàng)作為我們的網(wǎng)絡(luò)設(shè)置通常意味著我們不使用DHCP,并且擁有主機(jī)知道自己的ip意味著我們不必在我們的網(wǎng)絡(luò)中的每臺(tái)機(jī)器上更新??/ etc / hosts?添加一個(gè)新的主機(jī)。
roswtf?可以檢測(cè)到的其他問題??是:配置錯(cuò)誤的ROS_MASTER節(jié)點(diǎn),實(shí)際網(wǎng)絡(luò)問題和ros啟動(dòng)文件配置問題。如果一切都看起來應(yīng)該是工作,但不是,??roswtf?是工作的工具!
用GDB和Valgrind深入挖掘
不用說,如果你已經(jīng)經(jīng)歷了其他步驟,你的機(jī)器人還在著火,你可能沒有太多的機(jī)器人。GDB和Valgrind是最適合初始測(cè)試和開發(fā)的工具,但是當(dāng)您的機(jī)器人??不起火時(shí),它們非常有用。
這兩個(gè)工具本身都是主題,我建議您閱讀有關(guān)各個(gè)工具(gdb,valgrind)的完整教程,以便更好地了解它們。在這里,我們將主要介紹如何在ROS環(huán)境中使用這兩種工具。
為了有效地使用這些工具之一,您必須首先使用調(diào)試符號(hào)重新編譯代碼。這允許工具向您提供有關(guān)行號(hào)的信息,以及可能發(fā)生錯(cuò)誤的代碼片段。要重新編譯啟用了調(diào)試符號(hào)的catkin工作區(qū),您可以運(yùn)行以下命令。
1
2
$ catkin_make -DCMAKE_BUILD_TYPE=Debug
[Catkin Output Goes Here]
第二個(gè)難題實(shí)際上是找到可執(zhí)行文件來運(yùn)行它,使用gdb或valgrind(不幸的是你不能在rosrun上運(yùn)行g(shù)db)。如果您位于catkin工作區(qū)的根目錄,那么可執(zhí)行文件應(yīng)位于??devel / lib /
1
$ gdb devel /lib/ [ros_package_name]/[node_name]
然后,您可以按照gdb中的正常方式逐步執(zhí)行程序。同樣,您可以使用以下命令運(yùn)行valgrind:
1
$ valgrind --leak-check= yes devel /lib/ [ros_package_name]/[node_name]
我發(fā)現(xiàn)當(dāng)我試圖調(diào)試segfaults,奇怪的輸出或意想不到的行為時(shí),我傾向于使用gdb;?而我?guī)缀鯇iT使用valgrind來查找內(nèi)存泄漏和數(shù)組溢出。它們是調(diào)試C ++代碼的關(guān)鍵工具,我強(qiáng)烈建議您閱讀更多關(guān)于它們!
現(xiàn)在去獲得這個(gè)奇點(diǎn)!
所有這些工具在我在BLUEsat期間對(duì)我來說非常有用,特別是在歐洲漫游挑戰(zhàn)賽的任務(wù)中。我希望您下次嘗試創(chuàng)建奇點(diǎn)時(shí),甚至當(dāng)您正在調(diào)試正常的ROS代碼時(shí),您會(huì)發(fā)現(xiàn)它們有幫助。如果沒有,這里只是用很多這些工具刮掉了你可以做的事情,我鼓勵(lì)讀者對(duì)所有這些工具進(jìn)行更深入的實(shí)驗(yàn)和深入探討!
* BLUEsat UNSW及其成員(大多數(shù))不贊同啟發(fā)啟示,并且對(duì)由于啟示相關(guān)調(diào)試而可能發(fā)生的任何死亡或全球范圍的災(zāi)難承擔(dān)全部責(zé)任。
**??本文中的調(diào)試技巧不能在火災(zāi)中保證應(yīng)用安全。BLUEsat建議自由使用E-Stop系統(tǒng)。
----~~~~----
ROS VSCode擴(kuò)展
這Visual Studio代碼(VSCode)擴(kuò)展提供支持機(jī)器人操作系統(tǒng)(ROS)
的發(fā)展。
知識(shí)庫
問題
入門
當(dāng)您打開一個(gè)catkin工作區(qū)或一個(gè)catkin工作區(qū)內(nèi)的文件夾時(shí),擴(kuò)展名將自動(dòng)啟動(dòng)。
ROS發(fā)行版將自動(dòng)從父環(huán)境確認(rèn),否則將
無法自動(dòng)完成ROS?發(fā)行版的提示。
要啟動(dòng)ROS主機(jī),請(qǐng)使用“ROS:?jiǎn)?dòng)核心”命令。左下角的“ROS主站”指示燈將顯示
主站當(dāng)前是否正在運(yùn)行,您可以單擊此按鈕查看參數(shù)等。如果您點(diǎn)擊F5,您可以創(chuàng)建一個(gè)調(diào)試
配置來運(yùn)行rosrun或roslaunch命令。
首次打開工作區(qū)時(shí),擴(kuò)展將自動(dòng)創(chuàng)建catkin_make構(gòu)建任務(wù)并更新
C ++和Python路徑。稍后可以使用相應(yīng)的命令重新運(yùn)行此過程。
特征
自動(dòng)ROS環(huán)境配置。
允許啟動(dòng),停止和查看ROS主站狀態(tài)。
catkin_make使用標(biāo)準(zhǔn)構(gòu)建命令運(yùn)行。
創(chuàng)建catkin包。
運(yùn)行rosrun或roslaunch
語法高亮顯示.msg,.urdf和其他ROS文件。
自動(dòng)添加ROS C ++包含和Python導(dǎo)入路徑。
使用ROS?clang-format風(fēng)格格式化C ++?。
命令
ROS Summer School 2017 挑戰(zhàn)賽
團(tuán)隊(duì)介紹
隊(duì)名: STAR Robot
單位: 上海科技大學(xué)自動(dòng)化與機(jī)器人中心
成員: 陳宏宇, 曠皓飛, 龍肖靈
實(shí)驗(yàn)環(huán)境
硬件平臺(tái):
Turtlebot 2(Kinect相機(jī)需要面向地面安裝)
PC(i7處理器, 8G內(nèi)存)(PC的性能影響圖像處理的效率)
軟件環(huán)境:
Ubuntu 14.04
ROS Indigo
Python 2.7, OpenCV2.4.8
Python以及OpenCV環(huán)境配置
Python環(huán)境:Ubuntu 14.04 已預(yù)裝了Python2.7
安裝OpenCV:
軟件源安裝:
sudo apt-get install python-numpy
sudo apt-get install python-opencv
也可使用pip或anaconda安裝。
源碼安裝:到OpenCV官網(wǎng)下載所需的版本, 按照其教程來安裝。
IDE配置:
PyCharm:到PyCharm官網(wǎng)下載,按照其教程來安裝
配置PyCharm:詳見ROS wiki IDEs
算法簡(jiǎn)介
Step 1 導(dǎo)入相機(jī)數(shù)據(jù)
讀取相機(jī)數(shù)據(jù): 通過rospy訂閱 '/camera/rgb/image_raw' 這一Topic:?self.image_sub = rospy.Subscriber('/camera/rgb/image_raw', Image, self.image_callback)
在回調(diào)函數(shù)里,利用cv_bridge將每一幀圖像轉(zhuǎn)換為opencv格式的圖片:?image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
Step 2 圖像預(yù)處理
將原始圖像轉(zhuǎn)換為hsv圖像
提取所需的顏色,將圖像轉(zhuǎn)換為二值圖像
利用中值濾波和腐蝕來去除噪點(diǎn)
將處理后的圖像切片,只保留相機(jī)下方某一范圍內(nèi)的區(qū)域
Step 3 提取關(guān)鍵點(diǎn)
對(duì)Step 2中產(chǎn)生的二值圖像進(jìn)行輪廓提取:
提取圖片中的所有輪廓
將輪廓面積小于一定值的輪廓去除(消除了某些濾波沒有清除的噪聲的影響)
選取剩下的輪廓中面積最大的輪廓作為最終區(qū)域
經(jīng)過上一步處理后,如果存在輪廓,取輪廓的質(zhì)心作為最終所追蹤的關(guān)鍵點(diǎn)
Step 4 控制
通過對(duì) '/cmd_vel_mux/input/teleop' Topic發(fā)送Twist類型的消息來控制小車移動(dòng)
如果存在關(guān)鍵點(diǎn):利用P控制器控制小車移動(dòng)(線速度為定值,角速度受error影響,error為質(zhì)心的x值減去圖像中線的值(Kinect是320), error所乘的比例可以調(diào)節(jié),其決定角速度的大小)
如果不存在關(guān)鍵點(diǎn): 在小車運(yùn)動(dòng)時(shí),若是線離開了相機(jī)的視野(該處指對(duì)原圖切片后的視野), 小車會(huì)立即停止運(yùn)動(dòng),執(zhí)行以下決策:
向某一方向旋轉(zhuǎn)一定角度(根據(jù)最后一次error的正負(fù)來決定旋轉(zhuǎn)的方向(error小于0,逆時(shí)針;error大于0,順時(shí)針)),若旋轉(zhuǎn)過程中檢測(cè)到了關(guān)鍵點(diǎn)(即線又回到了視野內(nèi)),則繼續(xù)執(zhí)行之前的決策; 若沒有檢測(cè)到,則執(zhí)行2。
前進(jìn)一段距離,停止(即到達(dá)終點(diǎn)或失敗)。
參考資料
Programming Robots with ROS: A Practical Introduction to the Robot Operating System
我們對(duì)本書第12章中所提到的算法進(jìn)行了改進(jìn),用于此次挑戰(zhàn)賽
致謝
很感謝華東師范大學(xué)機(jī)器人運(yùn)動(dòng)與視覺實(shí)驗(yàn)室以及張新宇老師,還有暑期學(xué)校的組委會(huì)組織了此次活動(dòng)。感謝GaiTech贊助了本次暑期學(xué)校的挑戰(zhàn)賽。很高興能與很多對(duì)機(jī)器人感興趣的同學(xué)老師聚在一起交流學(xué)習(xí)。
由于時(shí)間較短,我們的程序還存在很多問題,如果同學(xué)老師對(duì)我們的程序有任何問題和建議,或是對(duì)我們的團(tuán)隊(duì)感興趣,可以聯(lián)系我們,我們的聯(lián)系方式可以在我們實(shí)驗(yàn)室的主頁上找到(上海科技大學(xué)自動(dòng)化與機(jī)器人中心)
--------唯有全力以赴,方能不負(fù)此生--------
Ubuntu 視頻
版權(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)容。