輪式智能移動操作機器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第5章 激光雷達應(yīng)用實例_第1頁
輪式智能移動操作機器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第5章 激光雷達應(yīng)用實例_第2頁
輪式智能移動操作機器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第5章 激光雷達應(yīng)用實例_第3頁
輪式智能移動操作機器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第5章 激光雷達應(yīng)用實例_第4頁
輪式智能移動操作機器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第5章 激光雷達應(yīng)用實例_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章激光雷達應(yīng)用實例目錄5.1獲取激光雷達數(shù)據(jù)5.2利用激光雷達實現(xiàn)簡單避障5.3本章小結(jié)激光雷達是地面移動機器人常用的一種傳感器,其工作原理如圖5-1所示,即用一個高速旋轉(zhuǎn)的激光測距探頭,將周圍360°的障礙物分布狀況測量出來。圖5-1激光雷達工作原理激光雷達的旋轉(zhuǎn)部分搭載激光雷達,其在旋轉(zhuǎn)的過程中每隔一定角度就會測量一次距離值。當(dāng)其旋轉(zhuǎn)一圈時,剛好可以得到一幅周圍障礙物輪廓的俯視二維點陣圖。激光雷達二維點陣圖如圖5-2所示,這個二維點陣圖中的點陣就是激光雷達的輸出數(shù)值。圖5-2激光雷達二維點陣圖5.1獲取激光雷達數(shù)據(jù)5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)1.編寫節(jié)點代碼首先需要創(chuàng)建一個ROS源碼包。在Ubuntu里打開一個終端程序,輸入如下指令進入ROS工作空間(見圖5-3)。cdcatkin_ws/src/圖5-3進入ROS工作空間5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)然后輸入如下指令創(chuàng)建ROS源碼包。catkin_create_pkglidar_pkgrospystd_msgssensor_msgs按下“Enter”鍵后,系統(tǒng)會提示ROS源碼包創(chuàng)建成功(見圖5-4),這時我們可以看到“catkin_ws/src”目錄下出現(xiàn)了“l(fā)idar_pkg”子目錄。圖5-4創(chuàng)建lidar_pkg源碼包5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)創(chuàng)建lidar_pkg源碼包的指令含義,如表5-1所示。表5-1創(chuàng)建lidar_pkg源碼包的指令含義指令含義catkin_create_pkg創(chuàng)建ROS源碼包(Package)的指令lidar_pkg新建的ROS源碼包命名rospyPython依賴項,因為本例程使用Python編寫,所以需要這個依賴項std_msgs標(biāo)準(zhǔn)消息依賴項,需要里面的String格式做文字輸出sensor_msgs傳感器消息依賴項,激光雷達數(shù)據(jù)格式需要此項5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)接下來在VisualStudioCode中進行操作,將目錄展開,找到前面新建的“l(fā)idar_pkg”并展開,可以看到它是一個功能包最基礎(chǔ)的結(jié)構(gòu),選中“l(fā)idar_pkg”并對其右擊,彈出圖5-5所示的快捷菜單,選擇“新建文件夾”。圖5-5快捷菜單5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)將這個文件夾命名為“scripts”,如圖5-6所示。在第2章的2.3節(jié)中,有對此名稱文件夾的解釋。命名成功后按“Enter”鍵則創(chuàng)建成功。圖5-6創(chuàng)建“scripts”文件夾選中此文件夾并對其右擊,彈出圖5-5所示的快捷菜單,選擇“新建文件”。將這個Python節(jié)點文件命名為“l(fā)idar_data_node.py”。5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)命名完成后即可在IDE右側(cè)開始編寫“l(fā)idar_data_node.py”的代碼,其內(nèi)容如下。#!/usr/bin/envpython3#coding=utf-8importrospyfromsensor_msgs.msgimportLaserScan#激光雷達回調(diào)函數(shù)defcbScan(msg):rospy.loginfo("雷達數(shù)據(jù)個數(shù)=%d",len(msg.ranges))rospy.logwarn("正前方測距數(shù)值=%.2f",msg.ranges[180])#主函數(shù)if__name__=="__main__":rospy.init_node("lidar_data")#訂閱激光雷達的數(shù)據(jù)話題lidar_sub=rospy.Subscriber("scan",LaserScan,cbScan,queue_size=10)rospy.spin()5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)(1)代碼的開始部分,使用Shebang符號指定這個Python文件的解釋器為python3。如果是Ubuntu18.04或更早的版本,解釋器可設(shè)為python。(2)第二句代碼指定該文件的字符編碼為utf-8,這樣就能在代碼執(zhí)行的時候顯示中文字符。(3)使用import導(dǎo)入兩個模塊,一個是rospy模塊,包含了大部分的ROS接口函數(shù);另一個是激光雷達數(shù)據(jù)的消息類型,即sensor_msgs.msg里的LaserScan。(4)定義一個回調(diào)函數(shù)cbScan(),用來處理激光雷達數(shù)據(jù)。ROS每接收到一幀激光雷達數(shù)據(jù),就會自動調(diào)用一次回調(diào)函數(shù)。激光雷達的測距數(shù)值會以參數(shù)的形式傳遞到這個回調(diào)函數(shù)里。(5)在回調(diào)函數(shù)cbScan()中,從參數(shù)msg里獲取激光雷達數(shù)據(jù),先調(diào)用rospy的loginfo()函數(shù)顯示激光雷達測距數(shù)據(jù)的個數(shù)(通常是360個),然后調(diào)用rospy的logwarn()函數(shù)顯示下標(biāo)為180的測距數(shù)值,也就是最中間那個測距值,對應(yīng)的是機器人正前方的測距值。參數(shù)msg是一個sensor_msgs::LaserScan類型的數(shù)據(jù)包,其數(shù)據(jù)格式定義如圖5-7所示,其中float32[]ranges數(shù)組存放的是激光雷達的測距數(shù)值。這里機器人使用的是RPLidarA2型激光雷達,其旋轉(zhuǎn)一周可測量360個距離值,所以在代碼里,ranges是一個有360個成員的距離數(shù)組。5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)(6)判斷__name__為“__main__”時,執(zhí)行這個文件的主函數(shù)代碼。(7)調(diào)用rospy的init_node()函數(shù)進行該節(jié)點的初始化操作,參數(shù)是節(jié)點名稱。(8)調(diào)用rospy的Subscriber()函數(shù)生成一個訂閱對象lidar_sub,在函數(shù)的參數(shù)中指明這個對象訂閱的是“scan”話題,數(shù)據(jù)類型為LaserScan,回調(diào)函數(shù)設(shè)置為之前定義的回調(diào)函數(shù),緩沖長度為10。(9)調(diào)用rospy的spin()對這個主函數(shù)進行阻塞,保持這個節(jié)點程序不會結(jié)束退出。5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)圖5-7sensor_msgs::LaserScan類型的格式5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)程序編寫完后,代碼并未馬上保存到文件里,此時界面左上編輯區(qū)的文件名“l(fā)idar_data_node.py”右側(cè)有個白色小圓點(見圖5-8),這表示此文件并未保存。在按下“Ctrl+S”鍵進行保存后,白色小圓點會變成關(guān)閉按鈕“×”。圖5-8文件未保存狀態(tài)5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)2.添加可執(zhí)行權(quán)限由于這個代碼文件是新創(chuàng)建的,其默認(rèn)不帶有可執(zhí)行屬性,所以需要為其添加一個可執(zhí)行屬性才能讓它運行起來。啟動一個終端程序,輸入如下指令進入這個代碼文件所存放的目錄(見圖5-9)。cd~/catkin_ws/src/lidar_pkg/scripts/圖5-9進入目錄5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)再執(zhí)行如下指令為代碼文件添加可執(zhí)行屬性。圖5-10設(shè)置文件權(quán)限chmod+xlidar_data_node.py設(shè)置文件權(quán)限如圖5-10所示,按“Enter”鍵執(zhí)行后,這個代碼文件就獲得了可執(zhí)行屬性,可以在終端程序里運行了。5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)圖5-11進入ROS工作空間3.編譯軟件包現(xiàn)在節(jié)點文件可以運行了,但是這個軟件包還沒有加入ROS的包管理系統(tǒng),無法通過ROS指令運行其中的節(jié)點,所以還需要對這個軟件包進行編譯。在終端程序中輸入如下指令進入ROS工作空間(見圖5-11)。cd~/catkin_ws/5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)再輸入如下指令對軟件包進行編譯。catkin_make編譯完成如圖5-12所示,這時就可以測試此節(jié)點了。圖5-12編譯完成5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)4.啟動仿真環(huán)境啟動開源項目“wpr_simulation”中的仿真場景,打開終端程序,輸入如下指令,如圖5-13所示。roslaunchwpr_simulationwpb_simple.launch輸入指令并按“Enter”鍵后會彈出圖5-14所示的仿真場景,機器人位于柜子前方。圖5-13啟動仿真場景圖5-14仿真場景5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)5.啟動圖形界面接下來啟動Rviz,如圖5-15所示,打開一個新的終端程序,輸入如下指令。roslaunchwpr_simulationwpb_rviz.launch啟動Rviz后會彈出圖5-16所示的Rviz界面。圖5-15啟動Rviz圖5-16Rviz界面5.1.1在仿真環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)6.運行節(jié)點程序啟動雷達數(shù)據(jù)獲取節(jié)點如圖5-17所示,再打開一個新的終端程序,輸入如下指令。rosrunlidar_pkglidar_data_node.py這條指令會啟動前面編寫的lidar_data_node.py。按照程序邏輯,系統(tǒng)會從激光雷達的“/scan”主題里不斷獲取激光雷達數(shù)據(jù)包,并把測距數(shù)值顯示在終端程序里。其中接收到的每一幀激光雷達數(shù)據(jù)的個數(shù)都是360。正前方的測距數(shù)值是一個浮點數(shù),單位是米。比如終端里顯示“正前方距離數(shù)值=1.75”,表示激光雷達在180°的這個角度也就是機器人的正前方測量到的其與障礙物的距離值是1.75米,以此類推。圖5-17啟動雷達數(shù)據(jù)獲取節(jié)點5.1.2在真實環(huán)境中實現(xiàn)獲取激光雷達數(shù)據(jù)這里的程序可以在啟智ROS機器人上運行,具體步驟如下。(1)根據(jù)啟智ROS的實驗指導(dǎo)書對運行環(huán)境和驅(qū)動源碼包進行配置。(2)把本章所創(chuàng)建的源碼包“l(fā)idar_pkg”復(fù)制到機載計算機的“~/catkin_ws/src”目錄下進行編譯。(3)連接好設(shè)備上的硬件。(4)使用機載計算機打開終端程序,輸入如下指令。roslaunchwpb_home_bringuplidar_base.launch(5)運行“l(fā)idar_data_node”節(jié)點,打開一個新的終端程序,運行如下指令。rosrunlidar_pkglidar_data_node.py按“Enter”鍵運行后,即可利用“l(fā)idar_data_node”節(jié)點獲取啟智ROS機器人的雷達數(shù)據(jù)信息。5.2利用激光雷達實現(xiàn)簡單避障前面介紹了機器人運動終止的方法,也介紹了激光雷達的數(shù)據(jù)獲取方法,本節(jié)將把它們結(jié)合起來,實現(xiàn)一個根據(jù)激光雷達測距信息進行避障運動的閉環(huán)行為。在開始之前,我們需要先了解一下在本節(jié)所使用的開源仿真項目中,激光雷達是如何安裝在機器人上的(見圖5-18),激光雷達旋轉(zhuǎn)一周的掃描角度范圍為0°到360°,機器人正前方的激光射線角度為掃描角度范圍的中間值,也就是360°的一半,為180°。在程序?qū)崿F(xiàn)的時候,我們只需要將180°方向上的激光雷達測距數(shù)值作為判斷依據(jù),控制機器人旋轉(zhuǎn)和直行即可。圖5-18激光雷達在機器人上的安裝方式5.2.1在仿真環(huán)境中實現(xiàn)簡單避障1.編寫節(jié)點代碼首先需要創(chuàng)建一個ROS源碼包。在Ubuntu里打開一個終端程序,輸入如下指令進入ROS工作空間,如圖5-19所示。cdcatkin_ws/src/圖5-19進入ROS工作空間5.2.1在仿真環(huán)境中實現(xiàn)簡單避障然后輸入如下指令創(chuàng)建ROS源碼包。catkin_create_pkgbehavior_pkgrospystd_msgssensor_msgsgeometry_msgs按下“Enter”鍵后即創(chuàng)建behavior_pkg源碼包,如圖5-20所示,系統(tǒng)會提示ROS源碼包創(chuàng)建成功,這時我們可以看到“catkin_ws/src”目錄下出現(xiàn)了“behavior_pkg”子目錄。圖5-20創(chuàng)建behavior_pkg源碼包5.2.1在仿真環(huán)境中實現(xiàn)簡單避障創(chuàng)建behavior_pkg源碼包的指令含義,如表5-2所示。表5-2創(chuàng)建behavior_pkg源碼包的指令含義指令含義catkin_create_pkg創(chuàng)建ROS源碼包(Package)的指令behavior_pkg新建的ROS源碼包命名rospyPython依賴項,因為本例程使用Python編寫,所以需要這個依賴項std_msgs標(biāo)準(zhǔn)消息依賴項,需要里面的String格式做文字輸出sensor_msgs傳感器消息依賴項,激光雷達數(shù)據(jù)格式需要此項geometry_msgs速度消息依賴項,需要里面的Twist格式描述運動速度5.2.1在仿真環(huán)境中實現(xiàn)簡單避障接下來在VisualStudioCode中進行操作,將目錄展開,找到前面新建的“behavior_pkg”并展開,可以看到它是一個功能包最基礎(chǔ)的結(jié)構(gòu),選中“behavior_pkg”并對其右擊,彈出圖5-21所示的快捷菜單,選擇“新建文件夾”。圖5-21快捷菜單5.2.1在仿真環(huán)境中實現(xiàn)簡單避障將這個文件夾命名為“scripts”,如圖5-22所示。在第2章的2.3節(jié)中,有對此名稱文件夾的解釋。命名成功后按“Enter”鍵則創(chuàng)建成功。圖5-22創(chuàng)建“scripts”文件夾選中此文件夾并對其右擊,彈出圖5-21所示的快捷菜單,選擇“新建文件”。將這個Python節(jié)點文件命名為“behavior_node.py”。5.2.1在仿真環(huán)境中實現(xiàn)簡單避障命名完成后即可在IDE右側(cè)開始編寫“behavior_node.py”的代碼,其內(nèi)容如下。#!/usr/bin/envpython3#coding=utf-8importrospyfromsensor_msgs.msgimportLaserScanfromgeometry_msgs.msgimportTwist

count=0#激光雷達回調(diào)函數(shù)defcbScan(msg):globalvel_pubglobalcountvel_msg=Twist()dist=msg.ranges[180]rospy.logwarn("正前方測距數(shù)值=%.2f",dist)5.2.1在仿真環(huán)境中實現(xiàn)簡單避障ifcount>0:count=count-1rospy.loginfo("持續(xù)轉(zhuǎn)向count=%d",count)returnifdist>1.5:vel_msg.linear.x=0.05else:vel_msg.angular.z=0.3count=50vel_pub.publish(vel_msg)#主函數(shù)if__name__=="__main__":rospy.init_node("behavior_node")#發(fā)布機器人運動控制話題vel_pub=rospy.Publisher("cmd_vel",Twist,queue_size=10)#訂閱激光雷達的數(shù)據(jù)話題lidar_sub=rospy.Subscriber("scan",LaserScan,cbScan,queue_size=10)rospy.spin()5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

(1)代碼的開始部分,使用Shebang符號指定這個Python文件的解釋器為python3。如果是Ubuntu18.04或更早的版本,解釋器可設(shè)為python。(2)第二句代碼指定該文件的字符編碼為utf-8,這樣就能在代碼執(zhí)行的時候顯示中文字符。(3)使用import導(dǎo)入三個模塊,第一個是rospy模塊,包含了大部分的ROS接口函數(shù);第二個是激光雷達數(shù)據(jù)的消息類型,即sensor_msgs.msg里的LaserScan;第三個是運動速度的消息類型,即geometry_msgs.msg里的Twist,其數(shù)據(jù)格式如圖5-23所示。圖5-23Twist.msg數(shù)據(jù)格式5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

其中l(wèi)inear是運動控制的線性分量,也就是機器人直線移動的分量,angular是機器人旋轉(zhuǎn)運動的分量。這兩個分量都是Vector3類型,其數(shù)據(jù)格式如圖5-24所示。圖5-24Vector3.msg數(shù)據(jù)格式由此可見,Vector3類型包含三個浮點數(shù):x、y和z。對于linear來說,x、y和z對應(yīng)的是沿X軸、Y軸和Z軸的速度分量,分量數(shù)值單位為“米/秒”。對于angular來說,x、y和z對應(yīng)的是以X軸、Y軸和Z軸為旋轉(zhuǎn)軸的旋轉(zhuǎn)速度分量,分量數(shù)值單位為“弧度/秒”。5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

(4)接下來定義一個全局變量count并賦初值為0,后面會用這個變量做一個計時器,控制機器人轉(zhuǎn)向運動的時長,以躲避障礙物。(5)定義一個回調(diào)函數(shù)cbScan(),用來處理激光雷達數(shù)據(jù)。ROS每接收到一幀激光雷達數(shù)據(jù),就會自動調(diào)用一次回調(diào)函數(shù)。雷達的測距數(shù)值會以參數(shù)的形式傳遞到這個回調(diào)函數(shù)里。(6)在回調(diào)函數(shù)cbScan()中首先聲明兩個全局變量:一個是機器人運動速度的發(fā)布對象vel_pub,這個會在后面的主函數(shù)里進行定義;另一個就是剛才定義的變量count。(7)定義一個運動速度消息包vel_msg,其格式為Twist。后面會發(fā)送它到機器人的核心節(jié)點,控制機器人的底盤運動。(8)在5.1節(jié)的實驗里,我們知道回調(diào)函數(shù)cbScan()的參數(shù)msg的range是存放了激光雷達測距數(shù)值的數(shù)組,總共有360個,測距范圍為機器人周圍一圈360個方向。其中,下標(biāo)為180的測距數(shù)值對應(yīng)機器人的正前方(見圖5-20),將這個測距值保存到變量dist里,后面用來作為避障行為的激活條件。(9)調(diào)用rospy的logwarn()函數(shù)將機器人正前方的測距數(shù)值顯示在終端里。5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

(10)為了便于理解程序流程,count數(shù)值的判斷這段先不看,調(diào)到下面對dist數(shù)值的判斷處。當(dāng)dist大于1.5米時,說明機器人正前方還沒檢測到有碰撞危險的障礙物,這時候?qū)λ俣认黺el_msg的linear.x賦值0.05,讓機器人以0.05米/秒的速度繼續(xù)前進;當(dāng)dist小于1.5米時,說明機器人正前方存在有碰撞危險的障礙物,這時候?qū)λ俣认黺el_msg的angular.z賦值0.3,讓機器人以0.3弧度/秒的速度向左旋轉(zhuǎn)。同時還對count賦值50,現(xiàn)在回到前面對count的判斷代碼塊。在程序開始時,count的初值為0,只有當(dāng)機器人檢測到正前方有障礙物時,才會給count設(shè)置一個50。因此,如果count的數(shù)值大于0,說明機器人正在轉(zhuǎn)向避障當(dāng)中,系統(tǒng)會先將count的數(shù)值減1,然后return返回。這樣可以跳過后面對dist的判斷語句,避免機器人轉(zhuǎn)到一半,檢測到前方1.5米內(nèi)無障礙物后,馬上停止轉(zhuǎn)向恢復(fù)直行,這樣會有側(cè)面碰撞障礙物的風(fēng)險。因為這里我們判斷障礙物只用到了180°這一條射線的測距值,掃描的寬度特別窄,遠小于機器人的正面橫截面積,所以索性讓機器人檢測到障礙物后,直接轉(zhuǎn)一個大角度,徹底避開正前方的障礙物之后再恢復(fù)前進直行狀態(tài)。將count設(shè)置為50,也就是這個cbScan()函數(shù)回調(diào)50次之后,才重新判斷機器人前方的障礙物,在這之前讓機器人一直處于旋轉(zhuǎn)避障狀態(tài)。5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

(11)在回調(diào)函數(shù)cbScan()的最后,調(diào)用機器人運動速度發(fā)布對象vel_pub的publish()函數(shù),將賦值后的速度消息包vel_msg發(fā)布到速度控制話題中,讓機器人的核心節(jié)點接收到,并控制機器人底盤執(zhí)行這個速度指令。(12)調(diào)用rospy的init_node()函數(shù)進行該節(jié)點的初始化操作,參數(shù)是節(jié)點名稱。(13)調(diào)用rospy的Publisher()函數(shù)生成一個廣播對象vel_pub,調(diào)用的參數(shù)里指明了vel_pub將會在話題“/cmd_vel”里發(fā)布geometry_msgs::Twist類型的數(shù)據(jù)。我們對機器人的控制,就是通過這個發(fā)布消息實現(xiàn)的。(14)調(diào)用rospy的Subscriber()函數(shù)生成一個訂閱對象lidar_sub,在函數(shù)的參數(shù)中指明這個對象訂閱的是“scan”話題,數(shù)據(jù)類型為LaserScan,回調(diào)函數(shù)設(shè)置為之前定義的cbScan(),緩沖長度為10。通過這個訂閱行為,系統(tǒng)就可以在每次獲取新的激光雷達數(shù)據(jù)的時候,自動調(diào)用一次回調(diào)函數(shù)cbScan(),從而激活一次我們編寫的避障行為代碼。(15)調(diào)用rospy的spin()對這個主函數(shù)進行阻塞,保持這個節(jié)點程序不會結(jié)束退出。程序編寫完后,代碼并未馬上保存到文件里,此時會看到界面左上編輯區(qū)的文件名“behavior_node.py”右側(cè)有個白色小圓點(見圖5-25),這表示此文件并未保存。在按下“Ctrl+S”鍵進行保存后,白色小圓點會變成關(guān)閉按鈕“×”。5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

圖5-25文件未保存狀態(tài)5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

2.設(shè)置可執(zhí)行權(quán)限由于這個代碼文件是新創(chuàng)建的,其默認(rèn)不帶有可執(zhí)行屬性,所以我們需要為其添加一個可執(zhí)行屬性讓它能夠運行起來。啟動一個終端程序,輸入如下指令進入這個代碼文件所存放的目錄(見圖5-26)。cd~/catkin_ws/src/behavior_pkg/scripts/再輸入如下指令為代碼文件添加可執(zhí)行屬性。chmod+xbehavior_node.py設(shè)置文件權(quán)限,如圖5-27所示,按“Enter”鍵執(zhí)行后,這個代碼文件就獲得了可執(zhí)行屬性,可以在終端程序里運行了。圖5-26進入目錄圖5-27設(shè)置文件權(quán)限5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

3.編譯軟件包現(xiàn)在節(jié)點文件可以運行了,但是這個軟件包還沒有加入ROS的包管理系統(tǒng),無法通過ROS指令運行其中的節(jié)點,所以還需要對這個軟件包進行編譯。在終端程序中輸入如下指令進入ROS工作空間(見圖5-28)。cd~/catkin_ws/再輸入如下指令對軟件包進行編譯。catkin_make編譯完成如圖5-29所示,這時就可以測試此節(jié)點了。圖5-28進入ROS工作空間圖5-29編譯完成5.2.1在仿真環(huán)境中實現(xiàn)簡單避障

4.啟動仿真環(huán)境啟動開源項目“wpr_simulation”中的仿真場景,如圖5-30所示,打開終端程序,輸入如下指令。

roslaunchwpr_simulationwpb_simple.launch啟動后會彈出圖5-31所示的仿真場景,機器人位于柜子前方。圖5-30啟動仿真場景圖5-31仿真場景5.2

溫馨提示

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

評論

0/150

提交評論