移動機(jī)器人的自主定位導(dǎo)航過程如下:
1)采用激光掃描儀或深度相機(jī)創(chuàng)建地圖;
2)定位:機(jī)器人根據(jù)傳感器的信息并采用自適應(yīng)蒙特卡羅定位算法計(jì)算機(jī)器人在地圖中的當(dāng)前位置。
3)全局路徑規(guī)劃:采用Dijkstra(迪杰斯特拉)算法規(guī)劃出機(jī)器人從當(dāng)前位置到目標(biāo)位置的全局最優(yōu)路徑,該算法以起始點(diǎn)為中心向外層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。
4)控制機(jī)器人運(yùn)動:采用動態(tài)窗口法計(jì)算出控制命令并發(fā)送給移動平臺,使其沿規(guī)劃的路徑前進(jìn),如圖1所示。
圖1移動機(jī)器人的導(dǎo)航定位
下面將以TurtleBot機(jī)器人為例,介紹實(shí)現(xiàn)自主定位導(dǎo)航的方法。
1導(dǎo)航仿真
為了簡單,我們使用采用rbx1_nav/maps中的地圖進(jìn)行定位導(dǎo)航仿真實(shí)驗(yàn)。
在終端窗口中,分別運(yùn)行下面的命令:
$ roslaunch rbx1_bringup fake_turtlebot.launch
$ roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
$ rosrun rviz rviz -d `rospack find rbx1_nav`/amcl.rviz
其中fake_amcl.launch文件位于rbx1_nav/launch目錄下,它的作用是加載地圖、啟動并配置move_base節(jié)點(diǎn)、運(yùn)行fake_location節(jié)點(diǎn)。
運(yùn)行結(jié)果如圖2所示:
圖2啟動定位導(dǎo)航
使用rviz工具欄上的2DNav Goal,為機(jī)器人設(shè)置目標(biāo)位姿(綠色箭頭),運(yùn)行效果如圖3所示。