【專案實戰】自備相機+IMU跑通Vins-Mono記錄

2022-09-23 15:00:49

前言

初次接觸SLAM,公司要求用自己的裝置來跑通vinsmono這個程式,雖然已經跑通了別人的封包,但是真正自己上手來執行這個程式,發現真的是困難重重,特意在此記載下來整個過程,以供大家參考。
我這邊使用的裝置如下:

  • 相機:公司給的傑銳微通的一款HF890
  • IMU: 公司給的LPMS-IG1
  • 系統:ubuntu18.04
  • 電腦:暗夜精靈5

相機標定

啟動相機、安裝標定軟體

首先我們要對手上的攝像頭進行標定,這個就無關無牌子了,除非你是D345i這樣的大牌子。
首先usb接上電腦,我們使用官方的 uvc_camera 包讀取相機。

rosdep install camera_calibration

為了單目相機通過ROS釋出影象。讓我們列出主題以檢查影象是否已釋出:

rostopic list

然後開始注意了,這裡是我踩的第一個坑!一定要看自己的rostopic list對應的話題是什麼,不然後面指令是找不到的
/相機名稱/info
/相機名稱/image_raw
然後執行

###對相機進行標定
rosrun camera_calibration cameracalibrator.py --size 8x6(填你標定布的大小) --square 0.108(填你標定布格子 的長度,以米為單位) image:=/camera/image_raw(注意,這裡要填你的相機話題!) camera(這裡也是!):=/camera

需要注意我這裡使用的標定板為 GP400-12x9 的,所以這裡的 size 為 11x8, (為什麼不是 12x9 參考官網連結),square 為 0.03
然後就開始標定了,如果你的引數輸入沒有問題的話,是可以讀到你的標定板每個方格的小點的

具體標定方法就是拿著標定板放在相機視野內,標定板上出現彩色線條則為有效影象,反之無效,需要調整標定板位置。
分別在左右移動(X),直到標定介面上X下方的精度條為綠色,然後依次在上下(Y),遠近(Size),傾斜(Skew)方向移動,移動過程儘量緩慢,避免大幅度的移動使相機成像產生拖影。持續移動直到所有的進度條都為綠色
當所有進度條都變成綠色後,CALIBRATE按鈕由灰色變成深綠色,點選CALIBRATE,點選一下後,介面會卡住,此時不要做任何操作,直到執行標定程式的終端輸出標定的結果,大概是這樣的。
這個時候你可能會卡住,就是程式突然無響應了,我找了好久才找到一個辦法,就是

$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 --approximate=0.01 right:=/my_stereo/right/image_raw left:=/my_stereo/left/image_raw right_camera:=/my_stereo/right left_camera:=/my_stereo/left

加入了一行這個--approximate=0.01引數,我也不知道是不是這個東西起的作用,畢竟我還重啟了一遍電腦
至此相機就標定完畢了
點選標定介面的SAVE按鈕,標定結果儲存在/tmp/calibrationdata.tar.gz這個壓縮包中,開啟標定結果的壓縮包,裡面大概是這些內容,最後一個yaml檔案就是我們需要的標定結果。

IMU標定

安裝imu_utils

這是最讓我裂開的一個地方,因為他所需要的code_utils這個包和我用的感測器驅動下載都花了好大力氣才搞好
1: 安裝ceres庫

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev 
sudo apt-get install libgoogle-glog-dev libgtest-dev

下載編譯 ceres-solver

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make 
sudo make install
  1. 安裝 code_utils
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
catkin_make

然後

sudo apt-get install libdw-dev
cd src
git clone https://github.com/gaowenliang/code_utils.git

這裡有兩個大坑
首先是要把src/code_utils/src/sumpixel_test.cpp中的#include "backward.hpp"改為#include 「code_utils/backward.hpp」
然後我照著這個做了,catkin_make給我報錯

In file included from /home/lugendary/kalibr_workspace/src/code_utils/src/cv_utils/dlt/dlt.cpp:1:0:
/home/lugendary/kalibr_workspace/src/code_utils/include/code_utils/cv_utils/dlt/dlt.h:15:21: error: ‘vector’ in namespace ‘std’ does not name a template type
DLT( const std::vector< Eigen::Vector3d >& pts_2, const std::vector< Eigen::Vector3d >& pts_3 );

一大串,我找遍全網也沒有老哥告訴我解決辦法,最後我開啟了clion裡面,在哪個檔案裡用糾錯功能一鍵參照了缺少的庫,解決問題,編譯成功

cd ..
catkin_make

這個時候就可以在src下面安裝imu_utils

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make

標定的工具搞完了,現在就要啟動我們的IMU了

啟動IMU

首先建立一個工作空間openzen_ws/src

mkdir -p openzen_ws/src

然後就是坑了,我按照要求進入工作空間,通過git獲取安裝包

cd openzen/src
git clone --recurse-submodules https://bitbucket.org/lpresearch/openzenros.git

但是openzenros檔案裡面的東西我死活下載不到,不管是zip下載還是克隆都沒辦法
最後我直接在wiki上面

apt install ros-melodic-openzen-sensor

安裝了,然後IMU通過USB 和電腦連線,給串列埠許可權(你的感測器叫什麼你可以通過dev下面的檔案中,插拔一下imu看tty那個檔案變換了)

sudo chmod 777 /dev/ttyUSB0

在新的命令列視窗執行roscore後,在工作空間下執行驅動

source devel/setup.bash
rosrun openzen_sensor openzen_sensor_node

釋出的話題節點為/imu/data,通過以下命令檢視話題訊息

rostopic echo /imu/data

如果一直出資料,就沒問題了

錄製IMU資料集

接著錄製IMU資料集
靜止情況下采集IMU的資料,並錄製為ROS包,我採集的時間為2小時20分鐘。

rosbag record /imu/data -O imu_xsens.bag

標定IMU

修改你之前下載標定工具那個東西的src/imu_utils/launch/資料夾下的A3.launch檔案中的話題,改成名為/imu/data
執行標定工具

cd 你的標定工具的工作空間
source devel/setup.bash
roslaunch imu_utils A3.launch

然後倍速回放bag包,我的bag包名字直接搜尋.bag定位到資料夾然後找到的

rosbag play -r 200 imu.bag

標定完退出,搜尋A3_imu,就找到yaml在哪裡了,這裡我用的是xsens_imu_param.yaml

設定YAML檔案

然後接下來就是所使用我們的標定資料了,首先要改vins程式碼中的yaml資料,為了防止填寫格式出問題導致bug,我就直接在config下面的realsense裡面修改realsense_color_config.yaml檔案了

填寫相機標定引數

啟動相機和IMU節點,用rostopic來檢視話題,
先修改這些引數

然後把相機的yaml檔案裡面的相機的內參矩陣

按照

填入projection_parameters:這個引數
然後把

填入distortion_parameters。

填寫IMU標定引數

然後開啟 IMU的標定yaml,

把所有的avg專案按需填入

其他引數的填寫

至於這個yaml其他的引數填什麼就看你自己的需求了,可以配合這篇文章學習修改
https://zhuanlan.zhihu.com/p/533106355
因為大多數內容無需太多修改(注意個別檔案輸出位置),這裡就不多加贅述了

執行Vins-mono

至此我們的工作就全部做完了,現在我們來執行我們的vins-mono!
首先在ros要開啟你的相機和imu,開啟rostopic list確保他們都在執行(方法上面已經給過了)
然後進入工作空間啟動ros

source ./devel/setup.bash
roslaunch vins_estimator realsense_color.launch
roslaunch vins_estimator vins_rviz.launch //開啟rviz檢視


大功告成!

參考連結