引言
Livox Lidar + HIKROBOT Camera 聯(lián)合標(biāo)定
參考鏈接:相機(jī)雷達(dá)標(biāo)定文檔
安裝ROS環(huán)境,參考筆者的博客:【ROS】Ubuntu18.04安裝Ros
1 ??禉C(jī)器人HIKROBOT SDK二次開發(fā)并封裝ROS
1.1 介紹
參考鏈接:??礐amera MVS Linux SDK二次開發(fā)封裝ROS packge過程記錄(c++)
海康的相機(jī)沒有ros驅(qū)動(dòng),且對(duì)linux開發(fā)不太友好(但支持windows),因此需要重寫了sdk接口,并創(chuàng)建了ros節(jié)點(diǎn)封裝成ros包,方便linux環(huán)境下ros的調(diào)用
完整版ros驅(qū)動(dòng):https://github.com/luckyluckydadada/HIKROBOT-MVS-ROS-package
- 即使??档南鄼C(jī)是usb傳輸數(shù)據(jù),但是不同于其他usb設(shè)備的調(diào)用,??档南鄼C(jī)并不會(huì)在/dev/目錄下映射ttyUSB或video1這樣的設(shè)備,所以不能用open/read/write這樣的system call的方式打開設(shè)備,所以https://github.com/ros-drivers/usb_cam這樣的usb ros驅(qū)動(dòng)無法支持。因此只能自己開發(fā)ros驅(qū)動(dòng)包。
- ??档拇蜷_設(shè)備的方式在MvUsb3VDevice.h和MvGigEDevice.h中實(shí)現(xiàn)(分別對(duì)應(yīng)usb3.0相機(jī)和以太網(wǎng)相機(jī)),具體過程并沒有開源,只提供了相應(yīng)的so文件,海康提供了統(tǒng)一的接口MV_CC_EnumDevices實(shí)現(xiàn)對(duì)兩種設(shè)備(usb3.0接口和以太網(wǎng)接口)的調(diào)用,因此開發(fā)一個(gè)ros驅(qū)動(dòng)包是兩種相機(jī)都適用的。??档南鄼C(jī)sdk雖然不開源,但是提供了armhf和aarch64架構(gòu)編譯的so文件。
1.2 安裝MVS SDK
參考筆者的博客:
【HIKROBOT】??禉C(jī)器人:工業(yè)相機(jī)SDK二次開發(fā)
1.3 封裝ROS packge
海康威視工業(yè)相機(jī)sdk的ros驅(qū)動(dòng)包的安裝步驟:
step1:安裝
# 創(chuàng)建catkin工作空間
mkdir ws_hk_mvs_ros
# 克隆源碼到工作空間(??禉C(jī)器人的ROS軟件包)
git clone https://github.com/luckyluckydadada/HIKROBOT-MVS-ROS-package.git ws_hk_mvs_ros/src
cd ws_hk_mvs_ros
# 編譯Catkin工作空間中的ROS包
catkin_make
step2:直接運(yùn)行node需要先啟動(dòng)roscore
source ./devel/setup.bash
rosrun hk_camera hk_camera_node
step3:launch啟動(dòng)node
source ./devel/setup.bash
roslaunch hk_camera hk_camera.launch
step4:launch啟動(dòng)node和rviz node
用 rviz 訂閱 /hk_camera_node/image_raw 查看照片
source ./devel/setup.bash
roslaunch hk_camera hk_camera_rviz.launch
2 覽沃Livox SDK二次開發(fā)并封裝ROS
參考筆者博客:【Ubuntu18.04】Livox Tele-15使用教程
安裝Livox環(huán)境和驅(qū)動(dòng)
# 安裝Livox_SDK
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
# 安裝livox_ros_driver
cd Livox-SDK # 進(jìn)入Livox-SDK目錄
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox # 進(jìn)入工作空間
catkin_make
3 相機(jī)雷達(dá)聯(lián)合標(biāo)定——相機(jī)內(nèi)參標(biāo)定
3.1 環(huán)境配置
3.1.1 安裝依賴——PCL 安裝
參考鏈接:Ubuntu18.04安裝PCL 1.9.1(圖文詳解,附踩坑和測(cè)試)
step1:安裝依賴
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
step2:下載源碼
建議安裝1.9.1
git clone https://github.com/PointCloudLibrary/pcl.git
step3:編譯源碼
cd pcl-pcl-1.9.1
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
make
step4:安裝
sudo make install
step5:PCLVisualizer(需要可以安裝)
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
3.1.2 安裝依賴——Eigen 安裝
簡(jiǎn)單命令安裝
sudo apt-get install libeigen3-dev
3.1.3 安裝依賴——Ceres-solver 安裝
下載ceres-solver-1.14.0
git clone https://github.com/ceres-solver/ceres-solver
依賴安裝
sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
sudo apt-get update
sudo apt-get install libsuitesparse-dev
安裝 ceres-solver
tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin && cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j3
make install
至此需要的庫(kù)安裝完畢
3.1.4 下載源碼,編譯準(zhǔn)備
# 進(jìn)入工作空間
cd ws_livox/src
git clone https://github.com/Livox-SDK/livox_camera_lidar_calibration.git
cd .. # 返回上一級(jí)目錄
catkin_make
source devel/setup.bash
- 此時(shí)工作空間的目錄結(jié)構(gòu)為:
3.1.5 程序節(jié)點(diǎn)概括
此項(xiàng)目包括如下節(jié)點(diǎn):
- cameraCalib - 標(biāo)定相機(jī)內(nèi)參
- pcdTransfer - 將雷達(dá)點(diǎn)云rosbag轉(zhuǎn)換成PCD文件
- cornerPhoto -獲得照片角點(diǎn)
- getExt1 - 計(jì)算外參節(jié)點(diǎn)1,只優(yōu)化外參
- getExt2 - 計(jì)算外參節(jié)點(diǎn)2,同時(shí)優(yōu)化內(nèi)參和外參
- projectCloud - 把雷達(dá)點(diǎn)云投影到照片上 colorLidar - 雷達(dá)點(diǎn)云著色
以下程序節(jié)點(diǎn)中如果想修改launch文件,需要到src/calibration/launch
文件夾中找對(duì)應(yīng)的launch文件。
3.2 相機(jī)內(nèi)參標(biāo)定
3.2.1 前期準(zhǔn)備
- 準(zhǔn)備一塊有黑白棋盤格的標(biāo)定板(如下所示,可以打印出來)
- 筆者實(shí)際用的標(biāo)定版規(guī)格是:
3.2.2 cameraCalib標(biāo)定
- 要準(zhǔn)備20張以上的照片數(shù)據(jù),各個(gè)角度和位置都要覆蓋,拍攝的時(shí)候不要距離太近(3米左右),如下圖所示。
采集棋盤格圖像:
方法1:直接使用HIKROBOT的上位機(jī)來抓取并保存圖片
選擇指定的保存路徑
抓取圖片
方法2:使用 ROS可視化工具rqt_image_view查看并保存圖片
- 終端1:?jiǎn)?dòng)相機(jī)的ROS驅(qū)動(dòng)(以HIKROBOT為例)
# 進(jìn)入工作空間
source devel/setup.bash # 加載環(huán)境
# roslaunch [軟件包] 啟動(dòng)文件.launch
roslaunch hk_camera hk_camera.launch
- 終端2:保存好標(biāo)定要用的圖片
# 加載環(huán)境
source devel/setup.bash
# 打開相機(jī)畫面
rqt_image_view
-
說明
: 筆者以下數(shù)據(jù)使用官網(wǎng)下載的數(shù)據(jù)集來測(cè)試:
測(cè)試數(shù)據(jù)下載:data.zip
- 獲得照片數(shù)據(jù)后,配置
cameraCalib.launch
中對(duì)應(yīng)的路徑和參數(shù),默認(rèn)是把照片數(shù)據(jù)放在data/camera/photos
下,然后在data/camera/in.txt
中寫入所有需要使用的照片名稱,如下圖所示
輸入指令開始標(biāo)定
#進(jìn)入工作空間
cd ws_livox/
source devel/setup.bash
roslaunch camera_lidar_calibration cameraCalib.launch
- 成功運(yùn)行顯示如下:
- 標(biāo)定結(jié)果中會(huì)保存在data/camera/result.txt中,包括重投影誤差,內(nèi)參矩陣和畸變糾正參數(shù)。
內(nèi)參結(jié)果
- 一個(gè)3x3的內(nèi)參矩陣(IntrinsicMatrix)
- 5個(gè)畸變糾正參數(shù) k1, k2, p1, p2, k3
報(bào)錯(cuò)
(若無報(bào)錯(cuò)則跳過此步驟)
解決方法:
參考鏈接:
解決 cv_bridge 與 opencv4 版本沖突問題
- 下載 cv_bridge
下載 noetic 版本的 cv_bridge。(noetic 版本的 cv_bridge 在 melodic 下也能使用,不過要做一些修改,后續(xù)會(huì)說明)
下載地址:https://github.com/ros-perception/vision_opencv/tree/noetic
下載完成后,將 cv_bridge 拷貝到 ros 工作空間的 src 文件夾下。
此時(shí)工作空間的目錄結(jié)構(gòu)為:
為了不影響原來的包,將該文件夾重命名為 cv_bridge_new
,并且將cv_bridge_new
文件夾下 CMakeLists.txt 文件中 project 名稱修改為 cv_bridge_new:
-
在 CMakeLists.txt 文件中指定我們自己的功能包中所用的 opencv4:
-
并且修改 package.xml 中包的名稱:
- 報(bào)錯(cuò)1:
- 解決方法:
直接修改 cv_bridge_new
的CMakeLists.txt
文件:
...
if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
# Debian Buster
find_package(Boost REQUIRED python3)
...
- 報(bào)錯(cuò)2:
- 解決方法:
修改 cv_bridge_new/src/module.hpp 文件下 void* do_numpy_import()函數(shù)為 (注意*要?jiǎng)h除)
static void do_numpy_import( )
{
import_array( );
}
再次編譯:文章來源:http://www.zghlxwxcb.cn/news/detail-765370.html
catkin_make
再次輸入指令開始標(biāo)定文章來源地址http://www.zghlxwxcb.cn/news/detail-765370.html
#進(jìn)入工作空間
cd ws_livox/
source devel/setup.bash
roslaunch camera_lidar_calibration cameraCalib.launch
到了這里,關(guān)于【Ubuntu18.04】激光雷達(dá)與相機(jī)聯(lián)合標(biāo)定(Livox+HIKROBOT)(一)相機(jī)內(nèi)參標(biāo)定的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!