如何在本地運行多傳感器融合定位模塊
定位技術橫跨好幾個專業,包括測繪、導航、計算機視覺知識、以及點雲處理的知識。業界所說的“多傳感器融合”,都是指對攝像頭、激光雷達、毫米波雷達、超聲波雷達等多種傳感器各自分別收集到的數據所做的數據融合。
定位模塊依賴的硬件以及數據,包括慣性測量單元 IMU、車端天線、基站、LiDAR、以及定位地圖;
GNSS定位以及激光點雲定位模塊,GNSS定位(基站和車端天線輔助)輸出位置及速度信息,點雲定位(LiDAR和定位地圖)輸出位置及航向角信息;
融合框架:慣性導航解算、Kalman濾波(卡爾曼濾波器/)是核心模塊);融合定位輸出是一個6-dof的位置和姿態,以及協方差矩陣,其結果會反過來用於GNSS定位和點雲定位的預測。
配置定位模塊
爲了使定位模塊正確運行,需要對地圖路徑和傳感器外參進行配置。假設下載的定位數據的所在路徑爲DATA_PATH。在進行以下步驟前,首先確定你在docker容器中。
- 配置傳感器外參
將定位數據中的傳感器外參拷貝至指定文件夾下。
cp DATA_PATH/params/ant_imu_leverarm.yaml /apollo/modules/localization/msf/params/gnss_params/
cp DATA_PATH/params/velodyne64_novatel_extrinsics_example.yaml /apollo/modules/localization/msf/params/velodyne_params/
cp DATA_PATH/params/velodyne64_height.yaml /apollo/modules/localization/msf/params/velodyne_params/
各個外參的意義:
ant_imu_leverarm.yaml: 杆臂值參數,GNSS天線相對Imu的距離
velodyne64_novatel_extrinsics_example.yaml:Lidar相對Imu的外參
velodyne64_height.yaml: Lidar相對地面的高度
- 設置地圖路徑
在/apollo/modules/localization/conf/localization.conf中添加關於地圖路徑的配置:
# Redefine the map_dir in global_flagfile.txt--map_dir=DATA_PATH
這將會覆蓋global_flagfile.txt中的默認值。
運行多傳感容和定位模塊
./scripts/localization.sh
定位程序將在後臺運行,可以通過以下命令進行查看。
ps -e | grep localization
在/apollo/data/log目錄下,可以看到定位模塊輸出的相關文件。
localization.INFO : INFO級別的log信息
localization.WARNING : WARNING級別的log信息
localization.ERROR : ERROR級別的log信息
localization.out : 標準輸出重定向文件
localizaiton.flags : 啓動localization模塊使用的配置
播放演示rosbag
cd DATA_PATH/bag
rosbag play *.bag
從播放數據到定位模塊開始輸出定位消息,大約需要30s左右。
記錄可視化定位結果
- 記錄定位結果
該腳本會在後臺運行錄包程序,並將存放路徑輸出到終端上。
./scripts/record_bag.sh
- 可視化定位結果
./scripts/localization_online_visualizer.sh
該可視化工具首先根據定位地圖生成用於可視化的緩存文件,存放在/apollo/data/map_visual目錄下。
然後接收以下topic並進行可視化繪製。
/apollo/sensor/velodyne64/compensator/PointCloud2
/apollo/localization/msf_lidar
/apollo/localization/msf_gnss
/apollo/localization/pose
-
可視化效果如下: [外鏈圖片轉存失敗(img-3p9BaRn1-1568096776319)(/home/zx/文檔/o4YBAFwRxPyAbFd8AAU50JUQQEU029.png)]
-
如果發現可視化工具運行時卡頓,可使用如下命令重新編譯可視化工具:
cd /apollo bazel build -c opt //modules/localization/msf/local_tool/local_visualization/online_visual:online_local_visualizer
編譯選項-c opt優化程序性能,從而使可視化工具可以實時運行。
結束定位模塊
./scripts/localization.sh stop
如果之前有運行步驟5的錄包腳本,還需執行
./scripts/record_bag.sh stop
驗證定位結果
假設步驟5中錄取的數據存放路徑爲OUTPUT_PATH,杆臂值外參的路徑爲ANT_IMU_PATH
- 運行腳本:
./scripts/msf_local_evaluation.sh OUTPUT_PATH ANT_IMU_PATH
該腳本會以RTK定位模式爲基準,將多傳感器融合模式的定位結果進行對比。注意只有在GNSS信號良好,RTK定位模式運行良好的區域,這樣的對比才是有意義的。
-
獲得如下統計結果:
[外鏈圖片轉存失敗(img-bDyH4HBG-1568096776319)(/home/zx/文檔/o4YBAFwRxP-AJ5KKAAKBgsAJhGY865.png)]
-
可以看到三組統計結果,第一組是組合導航(輸出頻率200hz)的統計結果,第二組是點雲定位(輸出頻率5hz)的統計結果,第三組是GNSS定位(輸出頻率約1hz)的統計結果。
表格中各項的意義:
error: 平面誤差,單位爲米
error lon: 車前進方向的誤差,單位爲米
error lat: 車橫向方向的誤差,單位爲米
error roll: 翻滾角誤差,單位爲度
error pit: 俯仰角誤差,單位爲度
error yaw: 偏航角誤差,單位爲度
mean: 誤差的平均值
std: 誤差的標準差
max: 誤差的最大值
<30cm: 距離誤差少於30cm的幀所佔的百分比
<1.0d: 角度誤差小於1.0d的幀所佔的百分比
con_frame(): 滿足括號內條件的最大連續幀數
2019年09月10日14:23:06