《鴻蒙機(jī)器人編程》6-ROS調(diào)試與可視化工具-教案_第1頁
《鴻蒙機(jī)器人編程》6-ROS調(diào)試與可視化工具-教案_第2頁
《鴻蒙機(jī)器人編程》6-ROS調(diào)試與可視化工具-教案_第3頁
《鴻蒙機(jī)器人編程》6-ROS調(diào)試與可視化工具-教案_第4頁
《鴻蒙機(jī)器人編程》6-ROS調(diào)試與可視化工具-教案_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ROS調(diào)試與可視化工具ROS程序的調(diào)試為了監(jiān)測ROSnode內(nèi)部代碼執(zhí)行的情況,可以從以下三個(gè)層面著手,使軟件調(diào)試更加容易:輸出調(diào)試信息、動(dòng)態(tài)調(diào)試、ROS組件工具。在編寫程序時(shí),在恰當(dāng)位置設(shè)置打印輸出調(diào)試信息以顯示程序的運(yùn)行狀態(tài)是非常重要的。roscpp:使用rosconsole功能包以ROS_形式的宏提供客戶端的日志記錄API;4種日志記錄方式;5種詳細(xì)級別;支持printf形式及stream形式的格式化輸出

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

CMAKE_BUILD_TYPE,可以的取值是

Debug、Release、RelWithDebInfo

MinSizeRel。當(dāng)這個(gè)變量值為

Debug

的時(shí)候,CMake會(huì)使用變量

CMAKE_CXX_FLAGS_DEBUG

CMAKE_C_FLAGS_DEBUG

中的字符串作為編譯選項(xiàng)生成Makefile;除此之外,還要保證GDB能找到源碼文件,-g選項(xiàng)的作用是在可執(zhí)行文件中加入源代碼的關(guān)聯(lián)信息,因?yàn)椴⒉皇前颜麄€(gè)源文件嵌入到可執(zhí)行文件中,GDB會(huì)在編譯目錄和當(dāng)前目錄搜索源碼。直接啟動(dòng)GDB:對于不需要參數(shù)設(shè)置和重映像的node運(yùn)行,可以直接運(yùn)行程序,而無需使用標(biāo)準(zhǔn)的rosrun<package><node>的語法。所以只要保證roscore已經(jīng)啟動(dòng),調(diào)試ROS節(jié)點(diǎn)程序如同調(diào)試普通C/C++程序一樣:$gdbexecutable通過rosrun啟動(dòng)GDB:從Indigo版本開始,rosrun工具增加了--prefix選項(xiàng),通過此選項(xiàng)可在GDB環(huán)境下啟動(dòng)node:$rosrun--prefix'gdb-exrun--args'my_packagemy_node通過roslaunch啟動(dòng)GDB:roslaunch文件中的標(biāo)簽可通過launch-prefix屬性以調(diào)試器環(huán)境運(yùn)行node,如:launch-prefix="xterm-egdb--args"launch-prefix="gdb-exrun--args"launch-prefix="valgrind"GDB掛接已運(yùn)行進(jìn)程:用gdbPID(PID為程序進(jìn)程)格式掛接正在運(yùn)行的程序。先用gdbprogram

關(guān)聯(lián)上源代碼,并進(jìn)入gdb,在gdb中用attach命令來掛接進(jìn)程PID。并用detach來取消掛接的進(jìn)程。下面是一些GDB常用命令:

命令

描述backtrace(bt)

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

finish

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

frame(f)

幀編號

選擇棧幀

info(i)locals

查看當(dāng)前棧幀局部變量的值

list(l)

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

listrow

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

listfunc

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

next(n)

執(zhí)行下一行語句

print(p)

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

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

setvar

修改變量的值

start

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

step(s)

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

--all

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

--no-plugins禁用roswtf插件

--offline只進(jìn)行離線測試

通常情況下,我們所希望獲得的結(jié)果是沒有任何的錯(cuò)誤和警告,但總是會(huì)出現(xiàn)地些警告或錯(cuò)誤。一般來說警告對系統(tǒng)正常運(yùn)行是沒有影響的,如出現(xiàn)錯(cuò)誤信息也并不一定系統(tǒng)出現(xiàn)異常,如果系統(tǒng)異常可參照錯(cuò)誤信息來判斷問題所在??梢暬ぞ遡mage_view

單一圖像預(yù)覽工具,使用方法為:$rosrunimage_viewimage_viewimage:=/camera其中/camera為圖像發(fā)布至的TOPIC,實(shí)際使用時(shí)需要具體對待和更改。rqt_image_view

自由圖像預(yù)覽工具,使用方法為:$rosrunrqt_image_viewrqt_image_view可自由選擇圖像TOPIC并顯示圖像。這兩款工具均可以保存預(yù)覽的圖像。rviz工具中也可顯示圖像。在實(shí)際的機(jī)器人硬件系統(tǒng)中有很多設(shè)備(例如雙目攝像頭、3D激光雷達(dá)和Kinect傳感器)能夠提供點(diǎn)云格式的3D數(shù)據(jù),實(shí)現(xiàn)3D數(shù)據(jù)可視化就顯得非常有意義。ROS系統(tǒng)就提供了這樣的工具rviz(rqt工具中也提供了其插件)。它集成了能夠完成3D數(shù)據(jù)處理的OpenGL接口,能夠?qū)鞲衅鲾?shù)據(jù)在模型化世界(World)中展示,過程是先使用傳感器坐標(biāo)系讀取測量值,再將這些讀數(shù)按照之間的相對位置在正確的位置繪制。rviz啟動(dòng)方式:直接啟動(dòng)$rviz$rosrunrvizrviz以插件形式通過rqt啟動(dòng)$rosrunrqt_rvizrqt_rviz或先啟動(dòng)rqt,再在GUI中手動(dòng)加載rviz插件。以下是rviz使用界面:數(shù)據(jù)保存與回放工具rosbag我們可以使用rosbag記錄數(shù)據(jù),通過rosbag工具的record命令執(zhí)行數(shù)據(jù)記錄操作。$rosbagrecord/camera/tf-j-Otest/camera和/tf兩個(gè)Topic使

溫馨提示

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

最新文檔

評論

0/150

提交評論