項目要標定雷達和相機,這裏記錄下我標定過程,用的速騰 Robosense - 16 線雷達和 ZED 雙目相機。linux
我沒有安裝最新版本的 Autoware,由於新版本不帶雷達和相機的標定工具,我安裝的是 1.10.0 版本!git
不建議官方的 git check 安裝方式,由於不熟悉 git 可能會遇到問題,直接在GitLab 倉庫選擇 1.10.0 版本下載便可:github
編譯過程比較容易,我也沒遇到編譯錯誤,解壓下載的 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
首先仍是要進入 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 就安裝好了,後面咱們須要用它提供的標定工具包來進行內參和外參的標定,以及標定結果的融合效果測試。測試
內參標定須要準備標定板,我用的是咱們實驗室本身購買的 12x9,棋盤格爲 2.5cm 的專業標定板,比較精準,以下:ui
而後錄製一個相機左右話題的 Bag:搜索引擎
rosbag record -O zed_calibration.bag /camera/left/image_raw /camera/right/image_raw
爲了獲得好的標定結果,錄製過程當中須要在相機視野裏面移動標定板,建議位置以下:
而後我拷貝 Bag 到臺式機上回放,可是有問題提示須要 rogbag reindex
:
rosbag reindex zed_calibration.bag
執行修復下就 OK,速度很快,不事後面的數據會少一些,多是拷貝過程當中的錯誤致使的,無傷大雅。
內參標定比較簡單,基本都是自動執行,先 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,因此填 11x8image
:要標定的相機話題,左或者右啓動後就是一個黑窗口:
而後開始回放內參標定 Bag,默認暫停啓動,按空格繼續:
rosbag play --pause zed_calibration.bag
標定過程以下,標定工具會根據棋盤格位置自動檢測角點:
當右上角的 X、Y、Size、Skew 變爲綠色時,標定按鈕「CALIBRATE」可用,點擊便可計算內參矩陣:
結果在 Shell 中打印出來,點擊「SAVE」可保存到 home 目錄下:
注意這裏會多保存一個 Autoware 類型的 YAML 文件格式,也就是後面外參標定要導入的文件!內容以下:
下面開始標定雷達和相機的外參!
聯合標定也要準備標定板和錄製 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
工具標定雷達和相機。
首先啓動 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 的界面,點擊工具欄放大圖像,而後按照以下步驟手動選擇一個像素點和點雲進行單次標定:
重複以上步驟,選擇 9 個不一樣的像素-點雲對,由於須要足夠的數據才能計算外參矩陣,當第 9 個點選擇完後,該工具會自動計算外參標定矩陣:
最終的標定文件保存在 home 目錄下,如下是外參文件內容,第一個就是 4x4 的外參矩陣:
標定矩陣有了以後,咱們來利用 autoware 提供的融合工具來看下標定的效果如何,先來回放數據:
rosbag play --pause zed_lidar_calibration.bag /rslidar_points:=/points_raw
這裏要把雷達的話題換成 points_raw
,由於 autoware 訂閱的話題名是這個!而後啓動 Autoware 主界面,啓動方法跟前面同樣,切換到 Sensing 標籤頁,配置以下:
點擊 OK 關閉窗口(查看終端是否會輸出紅色錯誤信息,通常不會),而後再點擊 Points Image 選擇相機 ID 爲 left,點擊 OK 肯定(此時終端再輸出一些信息,但不會報紅色錯誤),若是你的終端出現紅色錯誤信息,就要查看配置是否正確了:
再點擊下面的 Rviz 啓動 rviz,注意不要單獨在終端中 rosrun 啓動 rviz,單獨啓動沒有 image-view2 的插件,在 autoware 中啓動提供融合的插件 ImageViewerPlugin:
進行以下選擇:
/camera/left
/points_image
而後切換到回放 Bag 終端,按空格繼續回放數據,便可出現融合效果,我這裏效果通常般,後面打算再從新標定:
個人編譯過程比較順利,若是你遇到的編譯錯誤,能夠先閱讀報錯信息,看看是不是缺乏某個依賴庫,而後在網上搜索安裝方法,最好用英文 + Google!若是是一些看不懂的錯誤,能夠直接複製報錯信息到搜索引擎,有時也能找到答案。
檢查 FixedFrame 是否設置爲雷達的 frame_id。
選點的時候仔細點,多標定幾回。
以上就是個人雷達相機內外參標定總結,但願能幫助要標定雷達和相機的朋友,後面我會再寫一篇用 Autoware 的 Calibration Tool Kit 工具來標定的博客,能夠持續關注我!