Autoware 進行 Robosense-16 線雷達與 ZED 雙目相機聯合標定!

項目要標定雷達和相機,這裏記錄下我標定過程,用的速騰 Robosense - 16 線雷達和 ZED 雙目相機。linux

1、編譯安裝 Autoware-1.10.0

我沒有安裝最新版本的 Autoware,由於新版本不帶雷達和相機的標定工具,我安裝的是 1.10.0 版本!git

1.1 下載 Autoware-1.10.0 源碼

不建議官方的 git check 安裝方式,由於不熟悉 git 可能會遇到問題,直接在GitLab 倉庫選擇 1.10.0 版本下載便可:github

1.2 編譯 Autoware-1.10.0

編譯過程比較容易,我也沒遇到編譯錯誤,解壓下載的 autoware-1.10.0,在該目錄下執行如下命令:shell

# 1. 進入 autoware 的 ros 目錄下
cd autoware-1.10.0/ros

# 2. rosdep 安裝依賴
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO


# 3. 編譯
./catkin_make_release

個人臺式機配置比較低,大概編譯了 1 個小時,好的配置應該編譯的更快。bash

1.3 啓動 Autoware-1.10.0

首先仍是要進入 ros 目錄下,而後 source 環境,以後執行 run 程序便可啓動主界面:工具

# 1. 進入 autoware 的 ros 目錄下
cd autoware-1.10.0/ros

# 2. source 環境,zsh 或 bash
source devel/setup.zsh[.bash]

# 3. 啓動主界面
./run

可能須要輸入 root 密碼,而後啓動的主界面以下:gitlab

至此 Autoware 就安裝好了,後面咱們須要用它提供的標定工具包來進行內參和外參的標定,以及標定結果的融合效果測試。測試

2、標定 ZED 相機內參

2.1 內參標定準備

內參標定須要準備標定板,我用的是咱們實驗室本身購買的 12x9,棋盤格爲 2.5cm 的專業標定板,比較精準,以下:ui

checkboard

而後錄製一個相機左右話題的 Bag:搜索引擎

rosbag record -O zed_calibration.bag /camera/left/image_raw /camera/right/image_raw

爲了獲得好的標定結果,錄製過程當中須要在相機視野裏面移動標定板,建議位置以下:

  • X 軸標定:移動到視野的最左邊,最右邊
  • Y 軸標定:移動到視野的最上方,最底部
  • 傾斜標定:改變標定板的角度,斜着拿
  • Size 標定:移動標定板充滿整個相機視野
  • X,Y 和 Size 一塊兒標定:保持標定板傾斜啓動到視野的最左,最右,最上,最下

而後我拷貝 Bag 到臺式機上回放,可是有問題提示須要 rogbag reindex

rosbag reindex zed_calibration.bag

執行修復下就 OK,速度很快,不事後面的數據會少一些,多是拷貝過程當中的錯誤致使的,無傷大雅。

1.2 內參標定過程

內參標定比較簡單,基本都是自動執行,先 source Autoware 環境以使用標定工具:

cd autoware-1.10.0/ros/

source devel/setup.zsh

啓動 roscore:

roscore

啓動標定工具 autoware_camera_lidar_calibrator,可是這個工具同時標定雙目獲得的標定 YAML 文件不能直接做爲後面外參標定的輸入,由於文件格式有些不一樣,我也是作實驗發現的,所以我單獨標定左右相機,這樣就會生成可用的 Autoware 格式的 YAML 文件:

rosrun autoware_camera_lidar_calibrator cameracalibrator.py --square 0.025  --size 11x8  image:=/camera/left/image_raw

參數以下:

  • --square:標定板單元格的邊長(m),個人標定板是 2.5cm,也就是 0.025m
  • --size:標定板長x寬的格子數減一,個人標定板是 12x9,因此填 11x8
  • image:要標定的相機話題,左或者右

啓動後就是一個黑窗口:

而後開始回放內參標定 Bag,默認暫停啓動,按空格繼續:

rosbag play --pause zed_calibration.bag

標定過程以下,標定工具會根據棋盤格位置自動檢測角點:

當右上角的 X、Y、Size、Skew 變爲綠色時,標定按鈕「CALIBRATE」可用,點擊便可計算內參矩陣:

結果在 Shell 中打印出來,點擊「SAVE」可保存到 home 目錄下:

注意這裏會多保存一個 Autoware 類型的 YAML 文件格式,也就是後面外參標定要導入的文件!內容以下:

下面開始標定雷達和相機的外參!

3、ZED 相機和 Robosense-16 線雷達聯合標定外參

3.1 聯合標定準備

聯合標定也要準備標定板和錄製 bag 包,標定板用的也是內參標定的棋盤格,另外由於我是在電腦上安裝的 Autoware,因此須要在小車上錄製雷達和相機的 Bag 數據包,而後再拷貝到個人電腦上回放用於標定工具的話題輸入。

我錄製 bag 包的命令以下,錄製的是ZED 左右相機話題、雷達話題:

rosbag record -O zed_lidar_calibration.bag /camera/left/image_raw /camera/right/image_raw /rslidar_point

可是錄製完後,我拷貝到臺式機上,仍是提示我要 reindex 一下,我估計是小車系統的問題:

rosbag reindex zed_lidar_calibration.bag

修復完查看下 info,沒有問題:

rosbag info

回放 Bag 使用以下命令,加上 --pause 意思是啓動即暫停,防止跑掉數據,按空格繼續回放:

rosbag play --pause zed_lidar_calibration.bag

下面咱們開始使用 autoware_camera_lidar_calibrator 工具標定雷達和相機。

3.2 標定過程

首先啓動 roscore,也能夠不用啓動,後面 roslaunch 會自動啓動:

roscore

接着初始化 Autoware 環境:

cd autoware-1.10.0/ros/

source devel/setup.zsh

而後啓動標定工具,這裏我標定 ZED 左相機圖像和雷達,使用右相機同理:

roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch intrinsics_file:=xxx.yaml image_src:=/camera/left/image_raw
  • intrinsics_file:前面標定 ZED 的 YAML 內參文件路徑
  • image_src:要標定的相機話題,這裏用的 left image,有須要也能夠用 right image

遇到的第一個錯誤,啓動失敗提示找不到 image-view2

直接 apt 安裝便可:

sudo apt-get install ros-kinetic-jsk-common

遇到的第二個錯誤,提示找不到 libopencv_core3.so.3.3

我在系統中查找 libopencv_core3.so 這個庫:

locate libopencv_core3.so

發現它在以下位置:

/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so

而後我這個目錄下的全部 opencv 庫複製一份到上一級 lib 目錄下,解決了這個問題:

sudo cp /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_* /opt/ros/kinetic/lib

以後我就能夠啓動這個標定工具了,界面以下就是一個圖片查看器:

而後開始回放 Bag 數據,記得按空格開始回放:

rosbag play --pause zed_lidar_calibration.bag

上面的 image-view2 就會出現相機畫面,而後咱們按空格暫停回放,準備標定:

標定還須要啓動 rviz:

rosrun rviz rviz

點擊 Add 添加要訂閱的 Image 和 PontCloud2 話題:

分別設置每一個訂閱話題的 topic、FixedFrame 設置爲 rslidar 否則會沒有點雲顯示、切換點雲查看視角,用鼠標滑輪調整點雲距離,確保能看到我這樣的標定板:

而後咱們同時切換出 image-view2 的界面,點擊工具欄放大圖像,而後按照以下步驟手動選擇一個像素點和點雲進行單次標定:

  1. 觀察圖像和點雲,並在 image-view2 中用鼠標選擇一個像素點
  2. 點擊 rviz 工具欄的 Publish Point
  3. 而後在 rviz 中選擇一個對應的點雲數據點(要儘可能選擇準確),當你的鼠標右下角出現一個淺紅色的路標記號時便可點擊該數據點
  4. 觀察 image-view2 的窗口是否出現 points 的提示信息

重複以上步驟,選擇 9 個不一樣的像素-點雲對,由於須要足夠的數據才能計算外參矩陣,當第 9 個點選擇完後,該工具會自動計算外參標定矩陣:

最終的標定文件保存在 home 目錄下,如下是外參文件內容,第一個就是 4x4 的外參矩陣:

4、標定結果測試

標定矩陣有了以後,咱們來利用 autoware 提供的融合工具來看下標定的效果如何,先來回放數據:

rosbag play --pause zed_lidar_calibration.bag /rslidar_points:=/points_raw

這裏要把雷達的話題換成 points_raw,由於 autoware 訂閱的話題名是這個!而後啓動 Autoware 主界面,啓動方法跟前面同樣,切換到 Sensing 標籤頁,配置以下:

  • Camera ID:我選擇的是 left 圖像
  • target_frame:默認 velodyne 便可,由於咱們已經將雷達話題名改成 velodyne 訂閱的名字
  • Ref:選擇上一步的外參標定文件
  • image topic source:由於 Camera ID 已經指定了,因此這裏只須要填 topic 名便可

點擊 OK 關閉窗口(查看終端是否會輸出紅色錯誤信息,通常不會),而後再點擊 Points Image 選擇相機 ID 爲 left,點擊 OK 肯定(此時終端再輸出一些信息,但不會報紅色錯誤),若是你的終端出現紅色錯誤信息,就要查看配置是否正確了:

再點擊下面的 Rviz 啓動 rviz,注意不要單獨在終端中 rosrun 啓動 rviz,單獨啓動沒有 image-view2 的插件,在 autoware 中啓動提供融合的插件 ImageViewerPlugin:

進行以下選擇:

  • Image Topic:/camera/left
  • Point Topic:/points_image

而後切換到回放 Bag 終端,按空格繼續回放數據,便可出現融合效果,我這裏效果通常般,後面打算再從新標定:

5、可能遇到的問題

5.1 Autoware 編譯失敗

個人編譯過程比較順利,若是你遇到的編譯錯誤,能夠先閱讀報錯信息,看看是不是缺乏某個依賴庫,而後在網上搜索安裝方法,最好用英文 + Google!若是是一些看不懂的錯誤,能夠直接複製報錯信息到搜索引擎,有時也能找到答案。

5.2 Rviz 不顯示點雲

檢查 FixedFrame 是否設置爲雷達的 frame_id。

5.3 標定結果不許

選點的時候仔細點,多標定幾回。

以上就是個人雷達相機內外參標定總結,但願能幫助要標定雷達和相機的朋友,後面我會再寫一篇用 Autoware 的 Calibration Tool Kit 工具來標定的博客,能夠持續關注我!

相關文章
相關標籤/搜索