一、cartographer安裝測試
基本配置:ubuntu 16.04 (x64),ROS Kinetic
1、按順序安裝ceres-solver 1.14.0、protobuf 3.5.0、cartographer 1.0.0、cartographer_ros 1.0.0;
1)ceres-solver在ubuntu 16.04下有預編譯包,可以通過apt-get安裝;
2)protobuf在ubuntu 16.04下有預編譯包,但版本不匹配,需要從源碼安裝;
3)cartographer需要源碼安裝,安裝命令參考官方文檔:https://google-cartographer.readthedocs.io/en/latest/index.html
4)安裝依賴時可以通過dpkg –l | grep <software_name>查看依賴是否已經安裝;
5)cartographer_ros可以通過catkin_make直接編譯;
2、參考 https://google-cartographer-ros.readthedocs.io/en/latest/index.html 測試Demo;
1)此處僅測試了2D Demo;
二、cartographer測試問題
測試問題:在上述測試過程中,cartographer出現了極大的延遲(rosbag play約30min,而在rosbag play結束后,建圖仍然需要大約1h),如何解決?
1、首先檢查硬件配置(i7-4500U(1.8GHz,雙核四線程),8G RAM),滿足cartographer的硬件需求(官方文檔所述16G RAM在上述測試中限制不大,通過top命令可知上述測試的RAM使用最大30%左右);
2、對比cartographer論文(Real-Time Loop Closure in 2D LIDAR SLAM)中的硬件配置(Intel Xeon E5-1650(3.2GHz,六核十二線程));
(╯‵□′)╯︵┻━┻
3、所以解決方法分為兩種:
1)分離法:將cartographer運行在高性能機器上,運動終端將傳感器信息通過無線網絡上傳,從技術上來說,ROS作為分布式控制系統可以輕松實現這種功能分離,但是存在兩個問題:穩定的無線網絡和成本;
2)妥協法:通過調整參數,降低建圖質量和魯棒性,提高實時性,適合計算資源不足的小型工控機以及中小范圍建圖應用;
三、cartographer參數調整
cartographer的配置文件在/usr/local/share/cartographer/configuration_files/目錄下
參數調整主要參考cartographer_ros官方文檔中的Low Latency:https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html
以下參數調整根據上述測試過程中使用的硬件配置進行
1、MAP_BUILDER.num_background_threads=2(=核數(雙核四線程=2));
2、POSE_GRAPH.constraint_builder.sampling_ratio=0.10,對應於約束的數量上限;
3、POSE_GRAPH.min_score=0.60,成為約束的最低分數,這個值越大,計算速度相對越快,約束數量相對越少,在sampling_ratio較小的情況下,很可能會造成約束過少而導致建圖失敗,這個值越小,則效果相反,因此這個值可能需要多次調整;
4、POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.linear_search_window=5.
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.angular_search_window=math.rad(20.),對應於閉環檢測(約束檢測)時的搜索范圍;
備注:上述各參數調整核心是閉環檢測(約束檢測),閉環檢測是圖優化過程中最為重要的部分,也是最為耗時的部分,因此減少約束總數和搜索范圍可以有效提高實時性。
四、cartographer_ros
cartographer_ros配置文件在cartographer_ros/configuration_files/目錄下
cartographer_ros實際應用時需要進行一些參數調整以適配實際情況,以2D建圖為例,其配置文件為backpack_2d.lua
1、一個慣導,發布慣導數據/imu (Imu),慣導坐標系為base_link;
2、一個普通2D激光雷達,發布雷達數據/scan (LaserScan),tf: base_link->base_laser,
修改options.num_laser_scans=1,options.num_multi_echo_laser_scans=0;
3、roslaunch cartographer_ros demo_backpack_2d.launch;
如果需要使用odom
4、一個輪速計,發布/odom (Odometry),tf: odom->base_link,
修改options.published_frame=”odom”,options.use_odometry=true;
如果沒有慣導或不相信其他傳感器,而只使用激光雷達數據:
5、修改cartographer配置文件:
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching=true;
以上。