本文使用的相機(jī)是 Realsense D435i,imu是輪趣科技的 N100。
基于 ubuntu20.04+kalibr+imu_utils標(biāo)定相機(jī)和imu以及聯(lián)合標(biāo)定。
1、安裝kalibr
安裝依賴
sudo apt-get install -y \
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
sudo apt-get install -y python3-dev python3-pip python3-scipy \
python3-matplotlib ipython3 python3-wxgtk4.0 python3-tk python3-igraph
建立工作空間
mkdir kalibr_workspace
cd kalibr_workspace
mkdir src
cd src
下載kalibr并編譯
git clone https://github.com/ethz-asl/kalibr.git
catkin_make
source devel/setup.bash
或者直接把setup.bash加到~/.bashrc
2、相機(jī)標(biāo)定
2.1 制作標(biāo)定版
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.025 --tspace 0.3 --eps
- –type apriltag 標(biāo)定板類(lèi)型
- –nx [NUM_COLS] 列個(gè)數(shù) 6
- –ny [NUM_ROWS] 行個(gè)數(shù) 6
- –tsize [TAG_WIDTH_M] 二維碼方格長(zhǎng)度,單位m 0.025
- –tspace [TAG_SPACING_PERCENT] 小方格與二維碼方格長(zhǎng)度比例 0.3
- –eps 生成eps文件
最終會(huì)在kalibr的工作空間下生成target.pdf
文件。
2.2 使用ROS啟動(dòng)相機(jī)節(jié)點(diǎn)
安裝相機(jī)節(jié)點(diǎn)
sudo apt-get install ros-noetic-usb-cam
修改配置文件(主要是相機(jī)編號(hào)video_device
和分辨率,有時(shí)也需要修改圖像編碼pixel_format
)
roscd usb_cam
sudo gedit launch/usb_cam-test.launch
可以查詢所有相機(jī)編號(hào),我用的realsense D435i,RGB相機(jī)是video6(一個(gè)一個(gè)試出來(lái)的QAQ)
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video6" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>
啟動(dòng)相機(jī)節(jié)點(diǎn)
roslaunch usb_cam usb_cam-test.launch
此時(shí)的ros節(jié)點(diǎn)如下圖所是,后面需要用到的topic是圖中紅框圈起來(lái)的。
降低相機(jī)輸出頻率為4Hz
# rosrun topic_tools throttle messages [相機(jī)話題] 4.0 [自定義改變頻率的相機(jī)話題名字]
# 此時(shí)要保證相機(jī)節(jié)點(diǎn)是啟動(dòng)的
rosrun topic_tools throttle messages /usb_cam/image_raw 4.0 /usb_cam/image_raw_throttle
此時(shí)的ros節(jié)點(diǎn)
錄制bag
# rosbag record [相機(jī)話題] -O [保存的bag名字]
rosbag record /usb_cam/image_raw_throttle -O cam_calib.bag
2.3 用kalibr標(biāo)定相機(jī)
設(shè)置標(biāo)定板配置文件,保存為.yaml文件
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.025 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
相機(jī)標(biāo)定
支持的相機(jī)模型
rosrun kalibr kalibr_calibrate_cameras \
--bag bag/cam_calib.bag \
--topics /usb_cam/image_raw_throttle \
--models pinhole-radtan \
--target config/apriltag.yaml \
--show-extraction
- –bag [錄制的包]
- –topics [(降頻后的)相機(jī)話題]
- –models [相機(jī)模型-畸變模型,可以參考上面的連接]
- –target [標(biāo)定板配置文件]
- –show-extraction(設(shè)置表示展示角點(diǎn)提取過(guò)程)
- –bag-from-to 選擇bag的時(shí)間段
標(biāo)定結(jié)果一般與bag文件保存在一起,以YAML格式儲(chǔ)存的標(biāo)定結(jié)果,它可以直接用來(lái)作為相機(jī)-IMU校正的輸入;txt文件是相機(jī)標(biāo)定的詳細(xì)參數(shù),重投影誤差小于1個(gè)像素,該結(jié)果可用。
如果生成reporter報(bào)錯(cuò),那么需要修改~/.config/qt5ct/qt5ct.conf
配置文件,將style=Fusion
改為 style=gtk3
3、imu標(biāo)定
3.1 使用ROS啟動(dòng)imu節(jié)點(diǎn)
**安裝imu串口通信 **
sudo apt install ros-noetic-serial
獲取imu串口號(hào),圖中是ttyACM0
,有些教程顯示的是ttyUSB0
,是一樣的。
使用輪趣科技N100_imu,下載官方的ROS_SDK,百度網(wǎng)盤(pán)鏈接:https://pan.baidu.com/s/1TLguF28svpFfcGHnBRzLgQ?pwd=q9dp,提取碼:q9dp
建立新的工作空間,把/fdilink_ahrs_ROS1/fdilink_ahrs
復(fù)制到工作空間/src
下,然后catkin_make
編譯,編譯成功后記得把/devel/setup.bash
文件source
一下,或者加到~/.bashrc
中。
修改/home/zxc/imu_workspace/src/fdilink_ahrs/launch
目錄下的ahrs_data.launch
文件,主要修改端口號(hào),與上一步的串口號(hào)對(duì)應(yīng)。
<param name="port" value="/dev/ttyACM0"/>
注意:每次重新接IMU時(shí)要設(shè)置一下權(quán)限
sudo chmod 666 /dev/ttyACM0
啟動(dòng)imu節(jié)點(diǎn)
roslaunch fdilink_ahrs ahrs_data.launch
可以用rostopic echo /imu
打印信息
rviz可視化
打開(kāi)rviz,添加imu,設(shè)置話題,Global Options
固定坐標(biāo)系設(shè)置為gyro_link
靜置imu,錄制bag,盡量時(shí)間長(zhǎng)一點(diǎn),錄制2h左右。
rosbag record /imu -O imu.bag
3.2 安裝imu_utils
由于imu_utils
依賴code_utils
,所以必須先編譯code_utils
,后編譯imu_utils
,此外code_utils
依賴ceres
,需要先全局安裝ceres
3.2.1 安裝ceres-solver
安裝依賴
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
下載編譯
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
make -j8
sudo make install
3.2.2 安裝code_utils
安裝依賴
sudo apt-get install libdw-dev
下載code_utils
git clone https://github.com/gaowenliang/code_utils.git
編譯code_utils
需要修改部分文件
CMakeLists.txt
修改set(CMAKE_CXX_FLAGS “-std=c++11”)為set(CMAKE_CXX_FLAGS “-std=c++14”)
src/sumpixel_test.cpp
修改頭文件
#include "backward.hpp"
為#include “code_utils/backward.hpp”
添加頭文件:
#include"opencv2/imgcodecs/legacy/constants_c.h"
CV_MINMAX
改為NORM_MINMAX
src/mat_io_test.cpp
CV_LOAD_IMAGE_UNCHANGED
改為cv::IMREAD_UNCHANGED
CV_LOAD_IMAGE_GRAYSCALE
改為cv::IMREAD_GRAYSCALE
由于我把這個(gè)包放在之前imu的工作空間下了,所以單獨(dú)編譯
catkin_make -DCATKIN_WHITELIST_PACKAGES="code_utils"
3.2.3 安裝imu_utils
下載imu_utils
git clone https://github.com/gaowenliang/imu_utils.git
編譯imu_utils
需要修改2個(gè)文件
CMakeLists.txt
修改
set(CMAKE_CXX_FLAGS "-std=c++11")
為set(CMAKE_CXX_FLAGS "-std=c++14")
src/imu_an.cpp
添加頭文件:
#include <fstream>
也單獨(dú)編譯
catkin_make -DCATKIN_WHITELIST_PACKAGES="imu_utils"
3.3 用imu_utils標(biāo)定imu
新建一個(gè)launch文件
按照如下設(shè)置,主要修改IMU話題名稱和標(biāo)定文件保存的位置。
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/imu"/> <!--IMU話題名-->
<param name="imu_name" type="string" value= "N100"/> <!--相應(yīng)名字-->
<param name="data_save_path" type="string" value= "$(find imu_utils)/bag/"/> <!--存放數(shù)據(jù)的文件路徑可以根據(jù)自己需要修改-->
<param name="max_time_min" type="int" value= "120"/> <!--設(shè)置bag最大時(shí)間為120min-->
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
啟動(dòng)標(biāo)定
roslaunch imu_utils calibrate.launch
出現(xiàn)上述界面后,播放錄制的imu包
rosbag play -r 200 imu.bag // 200 倍速播放rosbag
標(biāo)定完結(jié)果會(huì)保存在launch文件設(shè)置的存儲(chǔ)位置,一堆txt文件和一個(gè)yaml文件。
- IMU標(biāo)定這部分參考博主學(xué)無(wú)止境的小龜,寫(xiě)的很細(xì),參考鏈接放在最后面了。
4、imu和相機(jī)聯(lián)合標(biāo)定
啟動(dòng)相機(jī)、imu節(jié)點(diǎn)
roslaunch usb_cam usb_cam-test.launch
rosrun topic_tools throttle messages /usb_cam/image_raw 4.0 /cam
roslaunch fdilink_ahrs ahrs_data.launch
錄制bag
rosbag record /imu /cam -O cam_imu.bag
充分激勵(lì)imu六個(gè)軸的運(yùn)動(dòng),參考B站搬運(yùn)視頻,俯仰角、偏航角、橫滾角、上下平移、左右平移、前后平移,各弄三次,幅度盡量大一點(diǎn),之后再混合運(yùn)動(dòng)三次,錄制時(shí)間大概一兩分鐘。
Kalibr標(biāo)定
需要三個(gè)配置文件:標(biāo)定板配置文件、imu內(nèi)參文件、相機(jī)內(nèi)參文件;
一個(gè)bag文件:imu和相機(jī)聯(lián)合錄制的bag
rosrun kalibr kalibr_calibrate_imu_camera \
--imu /home/zxc/kalibr_workspace/config/imu.yaml \
--cam /home/zxc/kalibr_workspace/config/cam_calib-camchain.yaml \
--target /home/zxc/kalibr_workspace/config/apriltag.yaml \
--bag /home/zxc/kalibr_workspace/bag/cam_imu.bag --show-extraction
注意:
(1)imu和相機(jī)內(nèi)參文件包含了imu和相機(jī)節(jié)點(diǎn)話題,要和錄制bag時(shí)候的話題對(duì)應(yīng)
(2)相機(jī)的配置文件可以直接用相機(jī)標(biāo)定生成的.yaml文件,imu的配置文件需要修改成如下格式??
#Accelerometers
accelerometer_noise_density: 5.43036e-03 #Noise density (continuous-time)
accelerometer_random_walk: 1.44598e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 4.9700e-03 #Noise density (continuous-time)
gyroscope_random_walk: 6.8522e-05 #Bias random walk
rostopic: /imu #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
標(biāo)定完成出現(xiàn)上圖界面。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-779185.html
參考鏈接
相機(jī)標(biāo)定https://blog.csdn.net/yangjinghui2019/article/details/130727459
N100在ROS下通信 http://www.jnnr.cn/a/605589.html
ubuntu安裝ceres庫(kù)https://blog.csdn.net/szylight2022/article/details/127313907
IMU標(biāo)定https://blog.csdn.net/qq_39607707/article/details/125061020#t7
IMU和相機(jī)聯(lián)合標(biāo)定https://rupingcen.blog.csdn.net/article/details/109592631文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-779185.html
到了這里,關(guān)于ubuntu20.04+kalibr_相機(jī)與imu聯(lián)合標(biāo)定的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!