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

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

一、編譯安裝 Autoware-1.10.0

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

1.1 下載 Autoware-1.10.0 源碼

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

1.2 編譯 Autoware-1.10.0

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

# 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 個小時,好的配置應該編譯的更快。

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 密碼,然後啓動的主界面如下:

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

二、標定 ZED 相機內參

2.1 內參標定準備

內參標定需要準備標定板,我用的是我們實驗室自己購買的 12x9,棋盤格爲 2.5cm 的專業標定板,比較精準,如下:

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 文件格式,也就是後面外參標定要導入的文件!內容如下:

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

三、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

錄製的時候,因爲我是 16 線雷達,所以我拿標定板的時候離雷達不能太遠,不然就不能清楚地看到標定板了,錄製時建議的站位如下:

  • 近處左邊,近處中間,近處右邊
  • 中間左邊,中間中間,中間右邊
  • 遠處左邊,遠處中間,遠處右邊

在這裏插入圖片描述

每個位置移動改變標定板的姿態,每個姿勢停留 1 - 2 秒左右,防止模糊:

  • 上仰,下俯
  • 左偏,中間不動,右偏

在這裏插入圖片描述

我錄了挺多次的,也是自己摸索的,因爲有的錄製的不好,我也沒有每個位置都錄很久,有時候覺得差不多夠了就停了,建議你第一次可以錄久些,每個位置停留久一點,保證標定板不會因爲移動而模糊!我總結的錄製標定包的關鍵就是:

  • 錄製多個位置
  • 改變拿標定板的姿勢
  • 必須保證能清楚的看到標定板!

錄製完後,我拷貝到臺式機上,還是提示我要 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 的外參矩陣:

四、標定結果測試

標定矩陣有了之後,我們來利用 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.1 Autoware 編譯失敗

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

5.2 Rviz 不顯示點雲

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

5.3 標定結果不準

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

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

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