在本地運行多傳感器融合定位模塊

如何在本地運行多傳感器融合定位模塊

​ 定位技術橫跨好幾個專業,包括測繪、導航、計算機視覺知識、以及點雲處理的知識。業界所說的“多傳感器融合”,都是指對攝像頭、激光雷達、毫米波雷達、超聲波雷達等多種傳感器各自分別收集到的數據所做的數據融合。

​ 定位模塊依賴的硬件以及數據,包括慣性測量單元 IMU、車端天線、基站、LiDAR、以及定位地圖;

​ GNSS定位以及激光點雲定位模塊,GNSS定位(基站和車端天線輔助)輸出位置及速度信息,點雲定位(LiDAR和定位地圖)輸出位置及航向角信息;

​ 融合框架:慣性導航解算、Kalman濾波(卡爾曼濾波器/)是核心模塊);融合定位輸出是一個6-dof的位置和姿態,以及協方差矩陣,其結果會反過來用於GNSS定位和點雲定位的預測。

配置定位模塊

​ 爲了使定位模塊正確運行,需要對地圖路徑和傳感器外參進行配置。假設下載的定位數據的所在路徑爲DATA_PATH。在進行以下步驟前,首先確定你在docker容器中。

  1. 配置傳感器外參

將定位數據中的傳感器外參拷貝至指定文件夾下。

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相對地面的高度

  1. 設置地圖路徑
在/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左右。

記錄可視化定位結果

  1. 記錄定位結果

該腳本會在後臺運行錄包程序,並將存放路徑輸出到終端上。

./scripts/record_bag.sh
  1. 可視化定位結果
./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
  1. 可視化效果如下: [外鏈圖片轉存失敗(img-3p9BaRn1-1568096776319)(/home/zx/文檔/o4YBAFwRxPyAbFd8AAU50JUQQEU029.png)]

  2. 如果發現可視化工具運行時卡頓,可使用如下命令重新編譯可視化工具:

    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

  1. 運行腳本:

./scripts/msf_local_evaluation.sh OUTPUT_PATH ANT_IMU_PATH

該腳本會以RTK定位模式爲基準,將多傳感器融合模式的定位結果進行對比。注意只有在GNSS信號良好,RTK定位模式運行良好的區域,這樣的對比才是有意義的。

  1. 獲得如下統計結果:

    [外鏈圖片轉存失敗(img-bDyH4HBG-1568096776319)(/home/zx/文檔/o4YBAFwRxP-AJ5KKAAKBgsAJhGY865.png)]

  2. 可以看到三組統計結果,第一組是組合導航(輸出頻率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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章