(六)turtlebot3中slam程式碼位置和理論參考書籍論文
1.建圖
1.1程式碼
建圖啟動按照如下命令
roslaunch turtlebot3_slam turtlebot3_slam.launch
啟動的為turtlebot3_gmapping.launch檔案
發現
啟動的是gmapping建圖
gmapping原始碼為
slam_gmapping
https://github.com/ros-perception/slam_gmapping
openslam_gmapping包
https://github.com/ros-perception/openslam_gmapping
其中openslam_gmapping包才是真正的演算法原始碼包,slam_gmapping呼叫openslam_gmapping中的類
1.2參考書籍及論文
gmapping論文名為Improved_Techniques_for_Grid_Mapping_With_Rao-Blac
書籍參考Probabilistic Robot的P107頁 ,里程計運動模型
掃描匹配
通過匹配選取最優的粒子,如果匹配失敗,則返回一個預設的似然估計
原理就參考 《Probabilistic Robot》 一書的P143 頁
2.導航
2.1程式碼
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
發現啟動的為amcl.launch和move_base.launch
amcl.launch中啟動 的為amcl節點,move_base.launch啟動move_base節點
導航的原始碼為
https://github.com/ros-planning/navigation
move_base導航採用的是區域性避障的動態視窗法
在dwa_local_planner資料夾下有原始碼
2.2參考資料
路徑規劃包括全域性路徑規劃和區域性路徑規劃
(1)全域性路徑規劃
turtlebot3全域性路徑規劃採用astar或者Dijkstra演算法。
首先計算潛在的路徑
bool found_legal = planner_->calculatePotentials(costmap_->getCharMap(), start_x, start_y, goal_x, goal_y,
nx * ny * 2 , potential_array_);
然後根據GradientPath類中的getPath(梯度法?)或者GridPath類中的getPath從潛在的地圖中提取路徑。
getPlanFromPotential(start_x, start_y, goal_x, goal_y, goal, plan)
path_maker_->getPath(potential_array_, start_x, start_y, goal_x, goal_y, path)
(2)區域性路徑規劃
turtlebot3區域性路徑規劃採用動態視窗法dwa進行路徑規劃
其中a* 演算法學習參考
https://www.redblobgames.com/pathfinding/a-star/introduction.html
https://blog.csdn.net/denghecsdn/article/details/78778769
其中Dijkstra演算法參考
https://blog.csdn.net/qq_35644234/article/details/60870719
及演算法導論書中相關章節
導航採用的是區域性避障的動態視窗法(dynamic window approach),論文名字為
dynamic window based approach tomobile robot motion control in the presence of moving obstacles
3.控制
3.1程式碼
3.2參考書籍
參考文獻
https://blog.csdn.net/roadseek_zw/article/details/53316177