1. 程式人生 > >(六)turtlebot3中slam程式碼位置和理論參考書籍論文

(六)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