當前位置:編程學習大全網 - 編程語言 - ROS機器人仿真(六)- 航行,路徑規劃和SLAM

ROS機器人仿真(六)- 航行,路徑規劃和SLAM

實時建立環境地圖並定位,要依靠於昂貴的激光雷達,不過現在有了可替代的工具,可以偽造出激光雷達的效果,算是偽造吧。

可替代的工具是微軟的Kinect和Asus Xtion相機。可以看depthimage_to_laserscan和kinect_2d_scanner 兩個包的內容。

這壹章主要以3個包的內容展開航行的設計:

move_base使用 MoveBaseActionGoal message ,看壹下消息的定義:

rosmsg show MoveBaseActionGoal

會顯示以下信息:

這個看起來有點復雜,我們下面會使用簡單壹點的東西來指定目標。

move_base運行之前需要設置四個文件。這些文件定義了障礙,機器人半徑,路徑需要規劃多遠,機器人運行多快等。

這四個設置文件可以在config文件夾下找到:

move base節點需要壹個環境地圖才能運行,不過使用壹個空地圖也是可以的。我們後面會使用真正的地圖。 rbx1_nav package包含了壹個空地圖叫做 blank_map.pgm ,它在maps的子目錄下。描述文件叫blank_map.yaml。啟動move_base節點和空地圖的啟動文件叫fake_move_base_blank_map.launch,它在launch的子目錄下。

現在來看壹下啟動文件。

首先在壹個空白地圖上啟動了mao_server node.地圖的描述文件就是那個.yaml文件.

然後加載了fake_move_base.launch文件,它啟動了move_base node並且加載了必要的參數.

最後,因為我們使用了空白的地圖並且我們的仿真機器人沒有傳感器,機器人不能使用掃描數據定位.我們對機器人量程框架和地圖框架,或者說坐標系,做壹個靜態的簡單對應,換句話說,就是假設機器人的編碼器能夠獲得理想的數據.

然後我們再看壹下fake_move_base.launch文件:

這個啟動文件運行了move_base node和五個rosparam來導入參數.costmap_common_params.yaml導入了兩次,是為了把這些參數同時設置在global_costmap namespace 和 local_costmap namespace.使用後面的ns來指定.

要在仿真中嘗試,首先啟動ArbotiX仿真器:

這裏可以換成別的機器人.

然後在空白地圖上啟動move_base node:

如果妳還沒有運行過RViz,可以使用配置好的參數文件啟動:

現在我們已經準備好了使用move_base控制機器人,而不是簡單的使用Twist消息.

為了測試壹下.首先我們讓機器人前進1米.現在我們的機器人位於(0,0,0)在/map坐標系和/base_link坐標系.我們可以使用任意壹個坐標系指定這次移動.

然而,第壹次移動並不能讓機器人到達準確的位置,隨後的誤差要靠/base_link坐標系去比較消除.所以我們最好在/map上面設定目標.指令如下:

把機器人移動回原點,只要停止剛才的命令,然後按照相同的格式輸入原點坐標就可以了,像下面這樣:

妳可以看到壹個細細的綠線,那個是全局路徑規劃,還可以看到壹個紅線,是實時更新的本地路徑規劃.想要更為清晰的看到這兩條線,可以在RViz上面關掉Odometry, Goal

Pose and Mouse Pose,然後重新運行上面的命令.

綠色的路徑比較平坦,是因為這中間沒有任何的障礙,另外,它還跟我們的壹些參數設置有關.比如,pdist_scale (0.4) and gdist_scale (0.8),還有最大線速度( max_vel_x ).我們的局部路徑,跟我們的全局規劃路徑相差很大,想要讓我們的機器人更加貼近我們的全局規劃路徑,我們可以使用rqt_reconfigure增大pdist_scale參數或者減小max_vel_x.

再打開壹個新窗口,啟動rqt_reconfigure:

然後,打開move_base->TrajectoryPlannerROS,把pdist_scale設置的大壹點,比如0.8,然後把gdist_scale設置的小壹點,比如0.4.然後重新運行運動指令,看看有什麽變化.

好像是好了很多.

我們剛剛是使用nav.rviz文件啟動RViz的,這樣我們可以直接點擊2D Nav Goal在地圖上指定目標.點擊時不要放開,可以旋轉改變設定目標的方向.

我們可以再RViz的窗口上看到設置信息:

我們最好重新開始,關掉之前所有的node,然後:

然後執行命令:

程序裏面有很多註釋,可以自己打開看壹下.

move_base最厲害的壹點是,它可以在到達指定位置的同時躲避障礙.局部路徑規劃會重新計算路徑.

我們將會打開壹個帶有障礙的地圖,然後仍然使用move_base_square.py運行機器人,看它是否會避開障礙,並且到達目標.

首先打開地圖:

然後清理到move_base節點的資源:

這個命令會清理掉所有move_base已經退出的參數,它的清理程度僅次於重啟roscore.

然後運行加載地圖和move_base:

然後運行RViz:

黃色的部分就是障礙,其他顏色代表壹個擴大的安全距離的緩沖.

也可以使用點擊,像之前那樣,設定目標.

  • 上一篇:編程111
  • 下一篇:作為壹個程序員,妳接到過哪些奇葩的甲方要求?
  • copyright 2024編程學習大全網