《鴻蒙機器人編程》課件-9-ROS調(diào)試與可視化工具_第1頁
《鴻蒙機器人編程》課件-9-ROS調(diào)試與可視化工具_第2頁
《鴻蒙機器人編程》課件-9-ROS調(diào)試與可視化工具_第3頁
《鴻蒙機器人編程》課件-9-ROS調(diào)試與可視化工具_第4頁
《鴻蒙機器人編程》課件-9-ROS調(diào)試與可視化工具_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

ROS調(diào)試與可視化工具課程介紹課程安排:介紹ROS程序調(diào)試方式、診斷工具和可視化工具等。課程目的:有效地使用調(diào)試診斷工具,加快ROS程序開發(fā)所需基礎:ROS系統(tǒng)基礎、了解GDB調(diào)試器。2?NXROBO2022課程內(nèi)容日志記錄工具GBD調(diào)試器ROS系統(tǒng)診斷工具roswtf可視化工具Rviz數(shù)據(jù)保存與回放工具rosbag3?NXROBO2022ROS程序的調(diào)試為了監(jiān)測ROSnode內(nèi)部代碼執(zhí)行的情況,可以從以下三個層面著手,使軟件調(diào)試更加容易:輸出調(diào)試信息動態(tài)調(diào)試ROS組件工具4?NXROBO2022輸出調(diào)試信息在編寫程序時,在恰當位置設置打印輸出調(diào)試信息以顯示程序的運行狀態(tài)是非常重要的roscpp:使用rosconsole功能包以ROS_形式的宏提供客戶端的日志記錄API;4種日志記錄方式;5種詳細級別;支持printf形式及stream形式的格式化輸出

rospy:以log開頭的methods同樣提供4種日志記錄方式及5種詳細級別的日志記錄。5?NXROBO2022日志記錄方式與級別日志記錄四種方式:stdoutstderrlogfile/rosoutTOPIC6日志記錄五個級別:DEBUG(對應rospy中的logdebug)INFO(loginfo)WARN(logwarn)ERROR(logerr)FATAL(logfatal)?NXROBO2022日志記錄方式與級別具體列表如下,左側為roscpp的日志等級,右側為rospy的日志等級。7?NXROBO2022調(diào)試信息的輸出舉例基本信息語句形式為ROS_<LEVEL>[_STREAM],如ROS_DEBUG(...)ROS_DEBUG_STREAM(args)因為日志記錄宏是由roscosole功能包提供的,所以要包含console.h頭文件。代碼中以DEBUG級別為例就printf和stream風格輸出日志信息。這樣的日志記錄的輸出者為默認的ros.<your_package_name>。8?NXROBO2022日志記錄方式與級別不管在終端還是rqt工具中,各級別的日志文字的輸出顏色是不一樣的。DEBUG為綠色,INFO為白色,WARN為黃色,ERROR為紅色,以及FATAL為紫色。所有輸出的調(diào)試信息都附帶其級別和當前時間戳(方括號中的數(shù)值)。時間戳以公歷時間計時,表示自1970年以來的秒和納秒計數(shù),時間戳之后是具體的信息。9?NXROBO2022日志記錄方式與級別10?NXROBO2022動態(tài)調(diào)試ROS節(jié)點調(diào)試信息可以大致了解程序的執(zhí)行進度及邏輯走向,對于大段計算算法及bug排除,調(diào)試信息打印顯得有點力不從心,而動態(tài)調(diào)試則高效得多,獲取程序的實時信息更為直接。對于Linux系統(tǒng)中的可執(zhí)行程序(elf文件),動態(tài)調(diào)試一般使用GDB調(diào)試器。11?NXROBO2022GDB調(diào)試前的準備GDB調(diào)試前的準備為了保證能進行源碼級穩(wěn)定的調(diào)試,須做以下工作:編譯時一定要加上選項"-g",這樣編譯出的可執(zhí)行代碼中才包含調(diào)試信息,否則GDB無法關聯(lián)源碼。編譯時不能使用-O2選項對可執(zhí)行文件進行優(yōu)化,否則可能在調(diào)試過程中出現(xiàn)不可預知的錯誤或問題。12?NXROBO2022GDB調(diào)試前的準備對于roscpp程序,可在CMakeLists.txt下加入:

SET(CMAKE_BUILD_TYPE"Debug")

SET(CMAKE_CXX_FLAGS_DEBUG"$ENV{CXXFLAGS}-O0-Wall-g-ggdb")SET(CMAKE_CXX_FLAGS_RELEASE"$ENV{CXXFLAGS}-O3-Wall")因為CMake中有一個變量

CMAKE_BUILD_TYPE,可以的取值是

Debug、Release、RelWithDebInfo

MinSizeRel。當這個變量值為

Debug

的時候,CMake會使用變量

CMAKE_CXX_FLAGS_DEBUG

CMAKE_C_FLAGS_DEBUG

中的字符串作為編譯選項生成Makefile;除此之外,還要保證GDB能找到源碼文件,-g選項的作用是在可執(zhí)行文件中加入源代碼的關聯(lián)信息,因為并不是把整個源文件嵌入到可執(zhí)行文件中,GDB會在編譯目錄和當前目錄搜索源碼。13?NXROBO2022調(diào)用GDB調(diào)試器直接啟動GDB通過rosrun啟動GDB通過roslaunch啟動GDBGDB掛接已運行進程14?NXROBO2022調(diào)用GDB調(diào)試器直接啟動GDB

對于不需要參數(shù)設置和重映像的node運行,可以直接運行程序,而無需使用標準的rosrun<package><node>的語法。

所以只要保證roscore已經(jīng)啟動,調(diào)試ROS節(jié)點程序如同調(diào)試普通C/C++程序一樣:

15$gdbexecutable?NXROBO2022調(diào)用GDB調(diào)試器通過rosrun啟動GDB從Indigo版本開始,rosrun工具增加了--prefix選項,通過此選項可在GDB環(huán)境下啟動node:16$rosrun--prefix'gdb-exrun--args'my_packagemy_node?NXROBO2022調(diào)用GDB調(diào)試器通過roslaunch啟動GDBroslaunch文件中的標簽可通過launch-prefix屬性以調(diào)試器環(huán)境運行node,如:launch-prefix="xterm-egdb--args"launch-prefix="gdb-exrun--args"launch-prefix="valgrind"GDB掛接已運行進程用gdbPID(PID為程序進程)格式掛接正在運行的程序。先用gdbprogram

關聯(lián)上源代碼,并進入gdb,在gdb中用attach命令來掛接進程PID。并用detach來取消掛接的進程。17?NXROBO2022GDB常用命令

命令

描述backtrace(bt)

查看各級函數(shù)調(diào)用及參數(shù)

finish

連續(xù)運行到當前函數(shù)返回為止,然后停下來等待命令

frame(f)

幀編號

選擇棧幀

info(i)locals

查看當前棧幀局部變量的值

list(l)

列出源代碼,接著上次的位置往下列,每次列10行

listrow

根據(jù)行號row列出從第幾行開始的源代碼

listfunc

根據(jù)函數(shù)名func列出某個函數(shù)的源代碼

next(n)

執(zhí)行下一行語句

print(p)

打印表達式的值,通過表達式可以修改變量的值或者調(diào)用函數(shù)

quit(q)退出gdb調(diào)試環(huán)境

setvar

修改變量的值

start

開始執(zhí)行程序,停在main函數(shù)第一行語句前面等待命令

step(s)

執(zhí)行下一行語句,如果有函數(shù)調(diào)用則進入到函數(shù)中18?NXROBO2022GDB補充說明GDB的具體使用請查閱官網(wǎng):/gdb/download/onlinedocs/二進制文件調(diào)試除了GDB,其它工具如性能檢測等功能的工具也同樣可以使用,如Valgrind。另外,如果覺得GDB的不友好顯示是個障礙,可使用集成GDB的圖形化程序如DDD或GDB自帶的gdbtui。19?NXROBO2022ROS系統(tǒng)狀態(tài)檢測有很多時候,ROS系統(tǒng)內(nèi)的node沒有出錯但是沒有按我們預期來運行,比如有些node似乎沒有接收到TOPIC,有些似乎沒有調(diào)用SERVICE。還有些時候,我們想了解系統(tǒng)內(nèi)各node的狀態(tài)、關聯(lián)情況和一些實時信息,ROS提供了一套工具來滿足這些需求。這些工具對于大型的ROS系統(tǒng)來說顯得尤其重要。因為大型系統(tǒng)node多,關聯(lián)復雜,系統(tǒng)運行狀態(tài)難以預料,個別node崩潰或功能異常偶有發(fā)生。20?NXROBO2022ROS系統(tǒng)診斷工具roswtfROS還提供了roswtf工具來檢測ROS系統(tǒng)安裝、環(huán)境變量、功能包、roslaunch文件的潛在問題,而且支持插件擴展功能。檢查系統(tǒng)安裝及環(huán)境變量問題直接運行roswtf即可。檢查功能包需切換到功能包目錄下運行roswtf。檢查roslaunch文件,命令格式為:

21$roswtfyourfile.launch$roswtf?NXROBO2022roswtf運行22?NXROBO2022roswtf運行23?NXROBO2022roswtf運行24?NXROBO2022roswtf其他狀況說明roswtf工具還支持以下選項:

--all

roswtf將檢查*ROS_PACKAGE_PATH*變量指向路徑中的所有功能包

--no-plugins禁用roswtf插件

--offline只進行離線測試

通常情況下,我們所希望獲得的結果是沒有任何的錯誤和警告,但總是會出現(xiàn)地些警告或錯誤。一般來說警告對系統(tǒng)正常運行是沒有影響的,如出現(xiàn)錯誤信息也并不一定系統(tǒng)出現(xiàn)異常,如果系統(tǒng)異??蓞⒄斟e誤信息來判斷問題所在。25?NXROBO2022圖像可視化工具image_view

單一圖像預覽工具,使用方法為:

其中/camera為圖像發(fā)布至的TOPIC,實際使用時需要具體對待和更改。rqt_image_view

自由圖像預覽工具,使用方法為:

可自由選擇圖像TOPIC并顯示圖像。這兩款工具均可以保存預覽的圖像。rviz工具中也可顯示圖像。26$rosrunimage_viewimage_viewimage:=/camera$rosrunrqt_image_viewrqt_image_view?NXROBO20223D可視化工具在實際的機器人硬件系統(tǒng)中有很多設備(例如雙目攝像頭、3D激光雷達和Kinect傳感器)能夠提供點云格式的3D數(shù)據(jù),實現(xiàn)3D數(shù)據(jù)可視化就顯得非常有意義。ROS系統(tǒng)就提供了這樣的工具rviz(rqt工具中也提供了其插件)。它集成了能夠完成3D數(shù)據(jù)處理的OpenGL接口,能夠?qū)鞲衅鲾?shù)據(jù)在模型化世界(World)中展示,過程是先使用傳感器坐標系讀取測量值,再將這些讀數(shù)按照之間的相對位置在正確的位置繪制。27?NXROBO2022初步使用rvizrviz啟動方式:直接啟動

以插件形式通過rqt啟動

或先啟動rqt,再在GUI中手動加載rviz插件28$rviz$rosrunrvizrviz$rosrunrqt_rvizrqt_rviz?NXROBO2022初步使用rviz29?NXROBO2022使用rosbag記錄數(shù)據(jù)通過rosbag工具的record命令執(zhí)行數(shù)據(jù)記錄操作,如:

/camera和/tf兩個Topic使用bz2壓縮算法保存為test.bag文件30$rosbagrecord/camera/tf-j-Otest?NXROBO2022回放消息記錄數(shù)據(jù)回放消息記錄文件,只需要運行roscore,而不需要再運行其他任何節(jié)點。然后,執(zhí)行類似以下命令:

回放的Topic會發(fā)布出來?;胤胚^程中可以使用空格暫停或使用“S”鍵步進,回放結束會自動停止。

記錄包文件可以像實時會話一樣在ROS中再現(xiàn)情

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論