輪式智能移動操作機器人技術與應用-基于ROS的Python編程 課件 第7章 基于代碼的導航應用_第1頁
輪式智能移動操作機器人技術與應用-基于ROS的Python編程 課件 第7章 基于代碼的導航應用_第2頁
輪式智能移動操作機器人技術與應用-基于ROS的Python編程 課件 第7章 基于代碼的導航應用_第3頁
輪式智能移動操作機器人技術與應用-基于ROS的Python編程 課件 第7章 基于代碼的導航應用_第4頁
輪式智能移動操作機器人技術與應用-基于ROS的Python編程 課件 第7章 基于代碼的導航應用_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章基于代碼的導航應用

實例第6章介紹了move_base的工作流程,并且通過Rviz中的導航工具進行了導航,本章將介紹如何通過編寫代碼的方式進行導航目標點的設定。與手動在Rviz里設置操作不同,利用編寫代碼的方式設置操作需要考慮函數調用接口和ROS節(jié)點關系的設計。好在ROS已經替我們考慮好了這一切,Navigation系統(tǒng)支持標準的Actionlib接口,這個接口可以讓我們在發(fā)送導航終點坐標之后,還能實時獲得導航執(zhí)行的進度消息。只需要編寫一個ROS節(jié)點,就可以通過這個Actionlib接口和Navigation系統(tǒng)進行調用和交互。目錄7.1利用編寫代碼的方式進行導航7.2

開源地圖導航插件“Maptools”7.3本章小結7.1利用編寫代碼的方式進行導航

7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航1.編寫代碼節(jié)點首先要創(chuàng)建一個ROS源碼包。在Ubuntu里打開一個終端程序,輸入如下指令進入ROS工作空間(見圖7-1)。cdcatkin_ws/src/圖7-1進入ROS工作空間7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航然后輸入如下指令創(chuàng)建ROS源碼包。catkin_create_pkgnav_pkgrospymove_base_msgsactionlib輸入指令按“Enter”鍵后,系統(tǒng)會提示ROS源碼包創(chuàng)建成功(見圖7-2),這時我們可以看到“catkin_ws/src”目錄下出現了“nav_pkg”子目錄。圖7-2創(chuàng)建nav_pkg源碼包7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航創(chuàng)建nav_pkg源碼包的指令含義,如表7-1所示。表7-1創(chuàng)建nav_pkg源碼包的指令含義指令含義catkin_create_pkg創(chuàng)建ROS源碼包(Package)的指令nav_pkg新建的ROS源碼包命名rospyPython依賴項,因為本例程使用Python編寫,所以需要這個依賴項move_base_msgsmove_base導航消息依賴項actionlibactionlib依賴項,Navigation的編程接口為actionlib格式7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航接下來在VisualStudioCode中進行操作,將目錄展開,找到前面新建的“nav_pkg”并展開,可以看到它是一個功能包最基礎的結構,選中“nav_pkg”,并對其右擊,彈出圖7-3所示的快捷菜單,選擇“新建文件夾”。圖7-3快捷菜單7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航將這個文件夾命名為“scripts”(見圖7-4)。在第2章的2.3節(jié)中,有對此名稱文件夾的解釋。命名成功后按“Enter”鍵即創(chuàng)建成功。圖7-4創(chuàng)建“scripts”文件夾7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航選中此文件夾并右擊,彈出圖7-3所示的快捷菜單,選擇“新建文件”。將這個Python節(jié)點文件命名為“simple_goal.py”。命名完成后即可在IDE右側開始編寫“simple_goal.py”的代碼,其內容如下。#!/usr/bin/envpython3#coding=utf-8importrospyimportactionlibfrommove_base_msgs.msgimportMoveBaseAction,MoveBaseGoalif__name__=="__main__":rospy.init_node("simple_goal")#生成一個導航請求客戶端

ac=actionlib.SimpleActionClient('move_base',MoveBaseAction)#等待服務器端啟動

ac.wait_for_server()

7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航#構建目標航點消息

goal=MoveBaseGoal()#目標航點的參考坐標系

goal.target_pose.header.frame_id="base_footprint"#目標航點在參考坐標系里的三維數值

goal.target_pose.pose.position.x=1.0goal.target_pose.pose.position.y=0.0goal.target_pose.pose.position.z=0.0#目標航點在參考坐標系里的朝向信息

goal.target_pose.pose.orientation.x=0.0goal.target_pose.pose.orientation.y=0.0goal.target_pose.pose.orientation.z=0.0goal.target_pose.pose.orientation.w=1.0#發(fā)送目標航點去執(zhí)行

ac.send_goal(goal)rospy.loginfo("開始導航……")ac.wait_for_result()rospy.loginfo("導航結束!")

7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航(1)代碼的開始部分,使用Shebang符號指定這個Python文件的解釋器為python3。如果是Ubuntu18.04或更早的版本,解釋器可設為python。(2)第二句代碼指定該文件的字符編碼為utf-8,這樣就能在代碼執(zhí)行的時候顯示中文字符。(3)使用import導入四個模塊,第一個是rospy模塊,包含了大部分的ROS接口函數;第二個是actionlib模塊,我們編寫的這個節(jié)點和ROS的導航系統(tǒng)是通過actionlib方式通信的;第三個是move_base_msgs消息包中的MoveBaseAction數據格式,它定義了咱們這個節(jié)點和ROS導航系統(tǒng)進行通信的數據格式;第四個是move_base_msgs消息包中的MoveBaseGoal數據格式,用于描述導航目標。7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航(4)當__name__為“__main__”時,說明這個程序是被直接執(zhí)行的,下面就是需要執(zhí)行的內容。(5)調用rospy的init_node()函數進行該節(jié)點的初始化操作,參數是節(jié)點名稱。(6)調用actionlib的SimpleActionClient()函數生成一個ActionClient對象ac,用來調用和監(jiān)控ROS的導航服務。在SimpleActionClient()函數的參數中指定服務的名稱為“move_base”,通信格式為MoveBaseAction。MoveBaseAction通信格式如圖7-5所示。7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航圖7-5MoveBaseAction通信格式7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航這是一個包含任務目標、執(zhí)行過程反饋及最終結果的數據結構。其中action_goal為任務目標,action_result為最終執(zhí)行結果,action_feedback為任務執(zhí)行過程中的狀態(tài)反饋。(7)在請求導航服務前,需要確認導航服務已經開啟,所以這里調用ac.wait_for_server()函數來查詢ROS導航服務的狀態(tài)。這個函數在檢測到服務沒有啟動時會卡住不繼續(xù)往下執(zhí)行,直到檢測導航服務啟動才繼續(xù)往下執(zhí)行。這個機制能避免在ROS導航服務還沒有啟動時,盲目調用ROS導航服務導致任務提前失敗。(8)確認導航服務啟動后,定義一個move_base_msgs::MoveBaseGoal類型對象goal,用來傳遞我們要導航去的目標信息。7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航(8)確認導航服務啟動后,定義一個move_base_msgs::MoveBaseGoal類型對象goal,用來傳遞我們要導航去的目標信息。goal.target_pose.header.frame_id表示這個目標位置的坐標是基于哪個坐標系的。代碼里為它賦值“base_footprint”表示這是一個基于機器人本體坐標系的導航目標位置,因為在機器人的urdf描述里,“base_footprint”通常是最根部的那個joint。goal.target_pose.pose.position.x賦值1.0,表示本次導航的目的地是以機器人本體坐標系為基礎,向X軸(機器人正前方)移動1.0米。goal.target_pose.pose.position的y和z都賦值0。goal.target_pose.pose.orientation.w賦值1.0,其他的xyz賦值0.0,表示導航的目標姿態(tài)是機器人面朝X軸的正方向(正前方)。7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航(9)調用ac.send_goal(goal)將包含導航目標信息的對象傳遞給導航服務的客戶端ac,由ac向ROS的導航服務發(fā)出導航申請,并監(jiān)控后續(xù)的導航過程。(10)調用ac.wait_for_result()等待ROS的導航結果,這個函數會保持阻塞,就是卡在這,直到整個導航過程結束,或者導航過程被某些原因中斷。(11)通過rospy.loginfo()函數在終端里輸出信息,提示導航開始了。(12)導航結束后,ac.wait_for_result()的阻塞會跳出,繼續(xù)執(zhí)行后面的代碼。這里通過rospy.loginfo()函數在終端里輸出信息,提示導航結束。7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航程序編寫完后,代碼并未馬上保存到文件里,此時編輯區(qū)左上角的文件名“simple_goal.py”左側有個白色小圓點(見圖7-6),這表示此文件并未保存。在按下“Ctrl+S”鍵進行保存后,白色小圓點會變成關閉按鈕“×”。圖7-6文件未保存狀態(tài)7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航2.設置可執(zhí)行權限由于這個代碼文件是新創(chuàng)建的,其默認不帶有可執(zhí)行屬性,所以我們需要為其添加一個可執(zhí)行屬性才能讓它運行起來。啟動一個終端程序,輸入如下指令進入這個代碼文件所存放的目錄(見圖7-7)。cd~/catkin_ws/src/nav_pkg/scripts/圖7-7進入目錄7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航再執(zhí)行如下指令為代碼文件添加可執(zhí)行屬性。chmod+xsimple_goal.py按“Enter”鍵執(zhí)行后,這個代碼文件就獲得了可執(zhí)行屬性,它就可以在終端程序里運行了(見圖7-8)。圖7-8設置文件權限7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航3.編譯軟件包現在節(jié)點文件可以運行了,但是這個軟件包還沒有加入ROS的包管理系統(tǒng),無法通過ROS指令運行其中的節(jié)點,所以還需要對這個軟件包進行編譯。在終端程序中輸入如下指令進入ROS工作空間(見圖7-9)。cd~/catkin_ws/圖7-9進入ROS工作空間7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航再輸入如下指令對軟件包進行編譯。catkin_make編譯完成如圖7-10所示,這時就可以測試此節(jié)點了。圖7-10編譯完成7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航4.啟動仿真環(huán)境啟動開源項目“wpr_simulation”中的仿真場景(見圖7-11),打開終端程序,輸入如下指令。roslaunchwpr_simulationwpb_navigation.launch圖7-11啟動仿真場景7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航仿真場景啟動后會彈出圖7-12所示的仿真場景界面,機器人位于仿真場景的客廳入口處。圖7-12仿真場景界面7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航啟動Gazebo的同時,Rviz也會啟動,可以在左側任務欄進行窗口切換,Rviz界面如圖7-13所示,在Rviz中就可以看到6.1節(jié)中創(chuàng)建好的地圖。5.標定機器人初始位置按照第6章的方式對機器人的初始位置進行標定。圖7-13Rviz界面7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航6.運行節(jié)點程序啟動simple_goal節(jié)點,如圖7-14所示,打開一個新的終端程序,輸入如下指令。rosrunnav_pkgsimple_goal.py圖7-14啟動simple_goal節(jié)點7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航此時再查看Rviz的顯示界面(見圖7-15),可以看到有一條線從機器人腳下伸向機器人正前方1米的位置(Rviz上的地面基準柵格每一格表示1米距離)。圖7-15自主規(guī)劃路徑7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航此時,機器會開始向前移動。機器人運動到目標地點后,便會停止移動(見圖7-16)。圖7-16到達目的地7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航此時再查看simple_goal節(jié)點終端,可以看到如圖7-17所示的“導航結束”提示。圖7-17“導航結束”提示7.1.1在仿真環(huán)境中實現編寫代碼控制機器人導航7.修改節(jié)點參數嘗試在代碼里給goal.target_pose.pose.position的x和y設置一些不同的數值,觀察機器人的導航行為。8.修改節(jié)點坐標系嘗試將goal.target_pose.header.frame_id改成其他坐標系(比如“map”),觀察機器人的導航目的地是否發(fā)生變化。。7.1.2在真實環(huán)境中實現編寫代碼控制機器人導航這里的程序可以在啟智ROS機器人上運行,具體步驟如下。(1)根據啟智ROS的實驗指導書對運行環(huán)境和驅動源碼包進行配置。(2)連接好設備上的硬件。(3)把本章所創(chuàng)建的源碼包“nav_pkg”復制到機載計算機的“~/catkin_ws/src”目錄下進行編譯。(4)打開機器人底盤上的電源開關(按下去)。(5)打開機器人的紅色急停開關(沿按鈕上的箭頭方向旋轉,讓其彈起),底盤電機會處于上電抱死狀態(tài),強行推動機器人會感覺到阻力。。7.1.2在真實環(huán)境中實現編寫代碼控制機器人導航(6)使用機載計算機打開終端程序,輸入如下指令。roslaunchwpb_home_tutorialsnav.launch(7)設置機器人所在的初始位置。(8)啟動simple_goal節(jié)點。保持前面的導航服務程序繼續(xù)運行不要退出,打開一個新的終端程序,運行如下指令。rosrunnav_pkgsimple_goal.py按“Enter”鍵運行后,即可看到機器人向前移動1米。。7.2開源地圖導航插件“Maptools”

7.2開源地圖導航插件“Maptools”在地圖中使用坐標值來表示航點不太直觀,在沒有測繪條件的環(huán)境下通常需要不停嘗試來調整位置。這里使用一個開源工具,可以很直觀地在地圖上設置航點位置,且在Rviz里將航點標示出來,方便編輯查看和調用。在使用之前,需要先獲取一下開源項目。(1)獲取“waterplus_map_tools”開源項目,如圖7-18所示,在終端中輸入如下指令。cd~/catkin_ws/srcgitclone/6-robot/waterplus_map_tools.git7.2開源地圖導航插件“Maptools”圖7-18獲取“waterplus_map_tools”開源項目7.2開源地圖導航插件“Maptools”(2)進行編譯。cd~/catkin_wscatkin_make開源程序編譯成功如,圖7-19所示。這樣就完成了開源項目的獲取,下面開始使用此插件。圖7-19開源程序編譯成功7.2.1在仿真環(huán)境中利用導航插件實現機器人導航1.確認地圖文件確保已經按照第6章步驟建立好地圖并保存到對應文件夾。2.啟動航點設置程序在仿真環(huán)境中設置航點,啟動添加航點程序,如圖7-20所示,在終端程序中輸入如下指令。roslaunch

waterplus_map_tools

add_waypoint_simulation.launch圖7-20啟動添加航點程序7.2.1在仿真環(huán)境中利用導航插件實現機器人導航運行指令后可以看到圖7-21所示的Rviz界面,在界面中有前面創(chuàng)建好的地圖,并且在工具欄內多了一個“AddWaypoint”按鈕,這個按鈕就是添加航點需要用到的。圖7-21Rviz界面7.2.1在仿真環(huán)境中利用導航插件實現機器人導航3.設置航點添加航點,單擊“AddWaypoint”按鈕,在地圖上可以用鼠標像設置機器人初始姿態(tài)一樣設置航點,先單擊要設置航點的位置,然后按住鼠標左鍵不放,拖動鼠標就可以選擇航點的朝向(見圖7-22)。圖7-22設置航點位置及朝向7.2.1在仿真環(huán)境中利用導航插件實現機器人導航確定好朝向后即可松開鼠標按鍵,這時第一個航點添加完成(見圖7-23)。圖7-23第一個航點添加完成7.2.1在仿真環(huán)境中利用導航插件實現機器人導航每設置一個航點,地圖上都會顯示一個航點標記,標記的名稱是自動生成的,可以保存后在文件中進行修改。航點的位置和朝向可以在Rviz里動態(tài)調整,如圖7-23所示,航點周圍共有四個箭頭和一個圓環(huán)。紅色箭頭:這一組箭頭是用來調整航點前后位置的,鼠標移動到箭頭上,這時鼠標的光標會發(fā)生變化,按住鼠標左鍵并拖動鼠標,即可沿著示意線進行航點的前后移動(見圖7-24)。圖7-24航點前后移動7.2.1在仿真環(huán)境中利用導航插件實現機器人導航綠色箭頭:這一組箭頭是用來調整航點左右位置的,鼠標移動到箭頭上,這時鼠標的光標會發(fā)生變化,按住鼠標左鍵并拖動鼠標,即可沿著示意線進行航點的左右移動(見圖7-25)。圖7-25航點左右移動7.2.1在仿真環(huán)境中利用導航插件實現機器人導航藍色圓環(huán):這個圓環(huán)是用來調整航點朝向的,將鼠標移動到圓環(huán)上,這時鼠標光標會發(fā)生變化,按住鼠標左鍵并進行拖動,即可繞著示意線進行航點的旋轉,調整航點的朝向,如圖7-26所示。圖7-26調整航點的朝向7.2.1在仿真環(huán)境中利用導航插件實現機器人導航利用上面的方法,在地圖上添加更多的航點(見圖7-27)。圖7-27添加更多航點7.2.1在仿真環(huán)境中利用導航插件實現機器人導航需要注意的是,此時航點并未保存,打開一個新的終端程序并輸入如下指令進行航點的保存。保存所添加的航點,如圖7-28所示。rosrun

waterplus_map_tools

wp_saver圖7-28保存所添加的航點7.2.1在仿真環(huán)境中利用導航插件實現機器人導航程序運行后會在主文件夾內生成一個名為waypoint的xml格式文件,這個文件里就保存著前面所添加的航點信息。對航點名稱的修改就需要在此文件中進行,在每個航點參數內有一對<name>參數,修改其中的內容并保存,即可修改航點名稱。7.2.1在仿真環(huán)境中利用導航插件實現機器人導航4.編寫導航程序代碼創(chuàng)建好導航點就可以使用此插件進行導航了,首先需要創(chuàng)建一個ROS源碼包。在Ubuntu里打開一個終端程序,輸入如下指令進入ROS工作空間(見圖7-29)。cdcatkin_ws/src/圖7-29進入ROS工作空間7.2.1在仿真環(huán)境中利用導航插件實現機器人導航然后輸入如下指令創(chuàng)建ROS源碼包。catkin_create_pkg

wp_pkg

rospy

move_base_msgs

actionlib

waterplus_map_tools按“Enter”鍵后創(chuàng)建wp_pkg源碼包如圖7-30所示,此時系統(tǒng)會提示ROS源碼包創(chuàng)建成功,這時可以看到“catkin_ws/src”目錄下出現了“wp_pkg”子目錄。圖7-30創(chuàng)建wp_pkg源碼包7.2.1在仿真環(huán)境中利用導航插件實現機器人導航創(chuàng)建wp_pkg源碼包的指令含義,如表7-2所示。表7-2創(chuàng)建wp_pkg源碼包的指令含義指令含義catkin_create_pkg創(chuàng)建ROS源碼包(Package)的指令wp_pkg新建的ROS源碼包命名rospyPython依賴項,因為本例程使用Python編寫,所以需要這個依賴項move_base_msgsmove_base導航消息依賴項actionlibactionlib依賴項,Navigation的編程接口為actionlib格式waterplus_map_tools使用到waterplus_map_tools的航點信息查詢服務7.2.1在仿真環(huán)境中利用導航插件實現機器人導航接下來在VisualStudioCode中進行操作,將目錄展開,找到前面新建的“wp_pkg”并展開,可以看到這是一個功能包最基礎的結構,選中“wp_pkg”并對其右擊,彈出如圖7-31所示的快捷菜單,選擇“新建文件夾”。圖7-31快捷菜單7.2.1在仿真環(huán)境中利用導航插件實現機器人導航將這個文件夾命名為“scripts”(見圖7-32)。在第2章的2.3節(jié)中,有對此名稱文件夾的解釋。命名成功后按“Enter”鍵即可創(chuàng)建成功。圖7-32創(chuàng)建“scripts”文件夾7.2.1在仿真環(huán)境中利用導航插件實現機器人導航選中此文件夾并對其右擊,彈出如圖7-31所示的快捷菜單,選擇“新建文件”。將這個Python節(jié)點文件命名為“wp_node.py”。命名完成后即可在IDE右側開始編寫“wp_node.py”的代碼,其內容如下。#!/usr/bin/envpython3#coding=utf-8importrospyfromstd_msgs.msgimportString#導航結束回調函數defresultNavi(msg):

rospy.loginfo("導航結果=%s",msg.data)if__name__=="__main__":

rospy.init_node("wp_node")#發(fā)布航點名稱話題

waypoint_pub=rospy.Publisher("/waterplus/navi_waypoint",String,queue_size=10)7.2.1在仿真環(huán)境中利用導航插件實現機器人導航

#訂閱導航結束話題

result_sub=rospy.Subscriber("/waterplus/navi_result",String,resultNavi,queue_size=10)#延時1秒鐘,讓后臺的話題發(fā)布操作能夠完成

rospy.sleep(1)#構建航點名稱消息包

msg=String()

msg.data='1'#發(fā)送航點名稱消息包

waypoint_pub.publish(msg)#讓程序別退出,等待導航結果

rospy.spin()(1)代碼的開始部分,使用Shebang符號指定這個Python文件的解釋器為python3。如果是Ubuntu18.04或更早的版本,解釋器可設為python。(2)第二句代碼指定該文件的字符編碼為utf-8,這樣就能在代碼執(zhí)行的時候顯示中文字符。7.2.1在仿真環(huán)境中利用導航插件實現機器人導航(3)使用import導入兩個模塊,一個是rospy模塊,包含了大部分的ROS接口函數;另一個是字符串消息類型模塊,即std_msgs.msg里的String,我們會將導航目標的航點名用這個消息包格式發(fā)送給導航系統(tǒng)。(4)首先定義一個回調函數resultNavi(),用來接收導航過程中反饋的狀態(tài)信息。我們的節(jié)點每接收到一個新的導航狀態(tài),就會自動調用一次這個回調函數。因此,我們只需要在函數里使用rospy.loginfo()函數將接收到的狀態(tài)信息顯示在終端里就行。(5)調用rospy的init_node()函數進行該節(jié)點的初始化操作,參數是節(jié)點名稱。7.2.1在仿真環(huán)境中利用導航插件實現機器人導航(6)調用rospy的Publisher()函數生成一個消息發(fā)布對象waypoint_pub。調用的參數里指明了waypoint_pub將會在話題“/waterplus/navi_waypoint”里發(fā)布String類型的數據,消息的緩沖長度為10個消息包。后面我們會通過這個消息發(fā)布對象向MapTools插件系統(tǒng)發(fā)送要導航的目標航點名稱。(7)調用rospy的Subscriber()函數生成一個訂閱對象result_sub,在函數的參數中指明這個對象訂閱的是“/waterplus/navi_result”話題,數據類型為String,回調函數設置為之前定義的resultNavi(),緩沖長度為10。(8)調用rospy.sleep()函數讓程序暫停一會,給一點時間,讓前面兩步話題的發(fā)布和訂閱操作在程序后臺能夠執(zhí)行完成。(5)~(8)是這個文件的主函數代碼。7.2.1在仿真環(huán)境中利用導航插件實現機器人導航(9)前面的準備工作完成后,下面開始向導航系統(tǒng)發(fā)送要導航去的目標航點名稱。構建一個String類型的消息包msg。將目標航點名稱設置到msg.data里,這里給的航點名稱為“1”??梢愿鶕懊鎸嶋H設置的航點名稱進行修改。(10)調用waypoint_pub的publish()函數將消息包msg發(fā)送出去。MapTools插件的導航系統(tǒng)會接收這個消息包,并調用ROS的導航系統(tǒng)讓機器人完成導航。(11)調用rospy的spin()對這個主函數進行阻塞,保證這個節(jié)點程序不會結束退出。編寫完成后,記得按“Ctrl+S”鍵進行保存。7.2.1在仿真環(huán)境中利用導航插件實現機器人導航5.設置可執(zhí)行權限由于這個代碼文件是新創(chuàng)建的,其默認不帶有可執(zhí)行屬性,所以我們需要為其添加一個可執(zhí)行屬性才能讓它運行起來。啟動一個終端程序,輸入如下指令進入這個代碼文件所存放的目錄(見圖7-33)。cd~/catkin_ws/src/wp_pkg/scripts/圖7-33進入目錄7.2.1在仿真環(huán)境中利用導航插件實現機器人導航再執(zhí)行如下指令為代碼文件添加可執(zhí)行屬性。chmod+xwp_node.py設置文件權限,如圖7-34所示,按“Enter”鍵執(zhí)行后,這個代碼文件就獲得了可執(zhí)行屬性,可以在終端程序里運行了。圖7-34設置文件權限7.2.1在仿真環(huán)境中利用導航插件實現機器人導航6.編譯軟件包現在節(jié)點文件可以運行了,但是這個軟件包還沒有加入ROS的包管理系統(tǒng),無法通過ROS指令運行其中的節(jié)點,因此還需要對這個軟件包進行編譯。在終端程序中輸入如下指令進入ROS工作空間(見圖7-35)。cd~/catkin_ws/圖7-35進入ROS工作空間7.2.1在仿真環(huán)境中利用導航插件實現機器人導航再執(zhí)行如下指令對軟件包進行編譯。catkin_make編譯完成如圖7-36所示,這時就可以測試此節(jié)點了。圖7-36編譯完成7.2.1在仿真環(huán)境中利用導航插件實現機器人導航7.啟動仿真環(huán)境啟動帶有導航插件的仿真環(huán)境,如圖7-37所示,在終端程序內輸入如下指令。roslaunch

wpr_simulation

wpb_map_tool.launch圖7-37啟動帶有導航插件的仿真環(huán)境7.2.1在仿真環(huán)境中利用導航插件實現機器人導航指令運行后彈出圖7-38所示的Gazebo仿真界面。圖7-38Gaz

溫馨提示

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

評論

0/150

提交評論