关键词:
之前博客《ROS学习笔记之——DAVIS346 calibration》已经实现了用dv-gui(Calibration [Tutorial] · DV)来标定event camera了。但是缺少了跟IMU的外参标定等等。本博文利用Kalibr库来对其进行标定。
Kalibr安装
先创建一个工作空间
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic
catkin config --merge-devel
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
可能会提示缺少libv4l,安装依赖包即可:
sudo apt-get install libv4l-dev
建立完之后需要source一下
source ~/kalibr_workspace/devel/setup.bash
还是没有办法。。。。还要把操蛋的opencv4安装了。。。。。
改为参考:melodic 安装 kalibr_matthewsyc的博客-CSDN博客
sudo apt-get install python-setuptools python-rosinstall ipython
sudo apt-get install libeigen3-dev libboost-all-dev doxygen
sudo apt-get install ros-melodic-cmake-modules python-software-properties
sudo apt-get install software-properties-common libpoco-dev python-matplotlib
sudo apt-get install python-scipy python-git python-pip ipython libtbb-dev
sudo apt-get install libblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo apt-get install python-igraph
安装完依赖后,编译好像就比较正常了~
每次运行前,记得加入
source ~/kalibr_workspace/devel/setup.bash
IMU标定
产生数据写入imu.yaml中,imu.yaml文件要用于联合标定。
imu_utils依赖code_utils,要先安装code_utils再安装imu_utils。
mkdir -p ~/imu_catkin_ws/src
cd ~/imu_catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
source ~/imu_catkin_ws/devel/setup.bash
cd ~/imu_catkin_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make
可能出现报错,试试运行
sudo apt-get install libdw-dev
catkin_make时出现backward.hpp没有找到
解决方法:将sumpixel_test.cpp中# include "backward.hpp"改为:#include “code_utils/backward.hpp”
即可安装成功!
然后下载imu_utils
cd ~/imu_catkin_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make
然后运行
roslaunch vins davis_testing.launch
rostopic list
rostopic echo /dvs/imu
记录imu信息,这个过程要保持imu静止不动至少2个小时(这个太夸张了吧。。。)
17.26开始
在imu_utils文件下的launch文件目录下添加一个launch文件,我这里添加的是 imu.launch,并把以下代码复制进文件,代码中的/IMU_data改成自己imu的topic。
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!--TOPIC名称-->
<param name="imu_topic" type="string" value= "/dvs/imu"/>
<!--imu_name 无所谓-->
<param name="imu_name" type="string" value= "imu_davis346"/>
<!--标定结果存放路径-->s
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<!--数据录制时间-min-->
<param name="max_time_min" type="int" value= "120"/>
<!--采样频率,即是IMU频率,采样频率可以使用rostopic hz /dvs/imu查看,设置为400,为后面的rosbag play播放频率-->
<param name="max_cluster" type="int" value= "400"/>
</node>
</launch>
运行之前要先source一下
source ~/imu_catkin_ws/devel/setup.bash
roslaunch imu_utils davis_imu.launch
rosbag play -r 400 /home/kwanwaipang/dataset/gwphku/hku_davis346_imu_2021-10-25-17-26-06.bag
rosbag play /home/kwanwaipang/dataset/gwphku/hku_davis346_imu_2021-10-25-17-26-06.bag
标定结束后在imu_catkin_ws/src/imu_utils/data中生成许多文件,其中(d435i_imu_param.yaml)imu_davis346_imu_param.yaml就是我们想要的结果,展示如下:
%YAML:1.0
---
type: IMU
name: imu_davis346
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 3.4207443164969696e-03
gyr_w: 5.0328372766535944e-05
x-axis:
gyr_n: 2.8679837408646372e-03
gyr_w: 5.2377301938209580e-05
y-axis:
gyr_n: 3.4204365908127145e-03
gyr_w: 5.9820318994959333e-05
z-axis:
gyr_n: 3.9738126178135566e-03
gyr_w: 3.8787497366438921e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 4.0577448874376872e-02
acc_w: 8.7349218314222493e-04
x-axis:
acc_n: 3.6370001351966601e-02
acc_w: 9.6556492723349487e-04
y-axis:
acc_n: 3.4926548351679493e-02
acc_w: 8.3124335009033201e-04
z-axis:
acc_n: 5.0435796919484514e-02
acc_w: 8.2366827210284801e-04
编写imu.yaml,格式参考https://github.com/ethz-asl/kalibr/wiki/yaml-formats中的imu.yaml,具体参数使用之前imu标定得到的参数,示例如下:
#Accelerometers
accelerometer_noise_density: 4.0577448874376872e-02 #Noise density (continuous-time)
accelerometer_random_walk: 8.7349218314222493e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 3.4207443164969696e-03 #Noise density (continuous-time)
gyroscope_random_walk: 5.0328372766535944e-05 #Bias random walk
rostopic: /dvs/imu #the IMU ROS topic
update_rate: 1000.0 #Hz (for discretization of the values above)
若不加速播放rosbag得到的结果如下:
%YAML:1.0
---
type: IMU
name: imu_davis346
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 3.4869979619824697e-03
gyr_w: 4.4740603706140853e-05
x-axis:
gyr_n: 2.9539477648808021e-03
gyr_w: 5.0580216740422281e-05
y-axis:
gyr_n: 3.5214141180930189e-03
gyr_w: 5.4806050604838655e-05
z-axis:
gyr_n: 3.9856320029735878e-03
gyr_w: 2.8835543773161611e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 4.2153479580575477e-02
acc_w: 8.5654389798364998e-04
x-axis:
acc_n: 3.7662088244236419e-02
acc_w: 8.9242080034822346e-04
y-axis:
acc_n: 3.8469169601091632e-02
acc_w: 8.9970652031743314e-04
z-axis:
acc_n: 5.0329180896398394e-02
acc_w: 7.7750437328529356e-04
还是有点差别的~按这个来把~~~
camera标定
产生数据文件也是用于联合标定
1.标定板,可在kalibr的wiki中下载,地址:https://github.com/ethz-asl/kalibr/wiki/downloads
选择
下载(然后发现根本下载不了。。。eth这群货真的是。。。。event camera的驱动弄得崩溃,连标定的扳子也搞???)链接: 百度网盘 请输入提取码 提取码: r4ts
然后缩放到40%,用A4纸就可以打印出来
原始pdf的格子参数是:
6*6的格子
大格子边长:5.5cm
小格子边长:1.65cm
小格子与大格子边长比例:0.3
调整后的格子参数是:
大格子边长:2.4cm
小格子边长:0.75cm
小格子与大格子边长比例:0.3125
但这只是理想情况,实际情况还得实际测量。
新建april_6x6_A4.yaml文件,格式参考上图的yaml,内容展示如下:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.024 #size of apriltag, edge to edge [m]
tagSpacing: 0.3125 #ratio of space between tags to tagSize
录制bag,录制bag 的同时,相机对准标定板,或是固定相机或是固定标定板,晃动另一个,动作不要太大,不要让相机看不清标定板(就争取把标定板晃动到过相机像素平面的每个地方)
注意:需要修改相机帧数(官方推荐是4Hz,尽管实际频率不完全准确,但是不影响结果)
kalibr在处理标定数据的时候要求频率不能太高,一般为4Hz,我们可以使用如下命令来更改topic的频率,实际上是将原来的topic以新的频率转成新的topic,实际测试infra1才是对应左目相机
roslaunch vins davis_testing.launch
rostopic list
rostopic hz /dvs/image_raw
rosrun topic_tools throttle messages /dvs/image_raw 4.0 /color
rostopic hz /color
roslaunch vins davis_raw_image_recording.launch
录制的topic就是转换频率后的topic
rosbag play /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag
然后就使用上面安装好的Kalibr进行标定
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --models pinhole-equi --topics /color --show-extraction
其中–target …/yaml/april_6x6_A4.yaml是标定板的配置文件,注意如果选择棋格盘,注意targetCols和targetRows表示的是内侧角点的数量,不是格子数量。–bag multicameras_calibration.bag是录制的数据包,models pinhole-equi pinhole-equi pinhole-equi表示三个摄像头的相机模型和畸变模型(解释参考https://github.com/ethz-asl/kalibr/wiki/supported-models,根据需要选取), --topics /infra_left /infra_right /color表示三个摄像头对应的拍摄的数据话题,–bag-from-to 10 100表示处理bag中10-100秒的数据。–show-extraction表示显示检测特征点的过程,这些参数可以相应的调整。
kalibr_calibrate_cameras --target ../yaml/april_6x6_A4.yaml --bag multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction
出来的标定结果如下图所示
得到的结果如下所示
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.023761891762741624, -0.6457616668645434, 2.070114304159524,
-2.4332476089446473]
distortion_model: equidistant
intrinsics: [333.6626192244177, 333.5395724565995, 162.74154656440015, 133.0594987830887]
resolution: [346, 260]
rostopic: /color
若改为降低速率前的topic效果如下:
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --models pinhole-equi --topics /dvs/image_raw --show-extraction
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.007145831923439896, -0.4460587583609059, 1.2828141357453273,
-1.3797467604219862]
distortion_model: equidistant
intrinsics: [333.649413082246, 333.5165283699802, 162.51929394284377, 132.6341713511583]
resolution: [346, 260]
rostopic: /dvs/image_raw
编写camchain.yaml,格式参考Kalibr官方教程https://github.com/ethz-asl/kalibr/wiki/yaml-formats中的chain.yaml,具体的参数参考上面得到的yaml文件,没有的参数可以删除,最终结果示例如下:
cam0:
camera_model: pinhole
intrinsics: [333.649413082246, 333.5165283699802, 162.51929394284377, 132.6341713511583]
distortion_model: equidistant
distortion_coeffs: [0.007145831923439896, -0.4460587583609059, 1.2828141357453273, -1.3797467604219862]
T_cam_imu:
- [0.01779318, 0.99967549,-0.01822936, 0.07008565]
- [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
- [0.00893160, 0.01807260, 0.99979678, 0.00399246]
- [0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: -8.121e-05
rostopic: /dvs/image_raw
resolution: [346, 260]
IMU与camera的联合标定
将之前矫正好的文件放好
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_imu_camera --bag [filename.bag] --cam [camchain.yaml] --imu [imu.yaml] --target [target.yaml] --bag-from-to 15 75 --show-extraction
kalibr_calibrate_imu_camera --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --cam /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/camchain.yaml --imu /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/imu.yaml --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --show-extraction
也有一种说法需要调整参数频率
注意选择的camera失真模型(https://github.com/ethz-asl/kalibr/wiki/supported-models)
roslaunch vins davis_testing.launch
rosrun topic_tools throttle messages /dvs/image_raw 20.0 /image_raw
rosrun topic_tools throttle messages /dvs/imu 200.0 /imu
roslaunch vins davis_raw_image_imu_recording.launch
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_imu_2021-10-26-16-14-23.bag --models pinhole-radtan --topics /image_raw --show-extraction
kalibr_calibrate_imu_camera --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_imu_2021-10-26-16-14-23.bag --cam /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/camchain_second.yaml --imu /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/imu_second.yaml --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --show-extraction
至此,矫正完成!测试一下这些参数。
出来的pdf report如下
camera校正的report
camera-imu校正的report
参考资料
GitHub - ethz-asl/kalibr: The Kalibr visual-inertial calibration toolbox
GitHub - gaowenliang/imu_utils: A ROS package tool to analyze the IMU performance.
联合标定双目相机和imu,使用工具Kalibr_甜甜圈吃不完的博客-CSDN博客
联合标定单目相机和imu,使用工具Kalibr_甜甜圈吃不完的博客-CSDN博客
realsenseD435i imu+双目标定_crazyfox的博客-CSDN博客_d435i imu标定
Installation · ethz-asl/kalibr Wiki · GitHubhttps://blog.csdn.net/Hanghang_/article/details/103546033Installation · ethz-asl/kalibr Wiki · GitHub
ros实验笔记之——基于dv-gui多次标定event与imu的实验记录
之前博客《ROS实验笔记之——基于dv-gui的camera与IMU校正(DAVIS346与DVXplorer)》已经实现了event与imu的标定,但是几次标定下来发现误差还挺大的。。。。本来打算用dvsrender获取图像,然后用原始版本的kalibr来标定... 查看详情
ros实验笔记之——基于allan_variance_ros标定imu(代码片段)
之前标定IMU都是采用imu_utils的,但是今天发现,在kalibr里面作者推荐用的是allan_variance_ros本博文就试试用此算法的标定结果,同时也可以跟之前imu_utils标定的结果对比一下~下载文件后,编译catkinbuildallan_variance_rosR... 查看详情
ros学习笔记之——基于dv-gui的多种事件相机标定的方法对比(代码片段)
之前博客《ROS学习笔记之——DAVIS346calibration》与《ROS实验笔记之——基于dv-gui的camera与IMU校正(DAVIS346与DVXplorer)》已经试过对事件相机的内参进行校正但是由于ETH组出了名的以造假、故意做出其他学者用不好的算法来... 查看详情
ros学习笔记之——davis346calibration(代码片段)
之前博客《ROS实验笔记之——DAVIS346测试》已经对davis346相机进行了测试。接下来正式开始gan,先看看如何做calibration官方给的标定在(rpg_dvs_ros/README.mdatmaster·uzh-rpg/rpg_dvs_ros·GitHub)这里面有关于dvs的校正。由于davis有... 查看详情
ros实验笔记之——基于dv-gui的camera与imu校正(davis346与dvxplorer)
参考资料Tutorials|iniVation 查看详情
ros实验笔记之——davis346测试(代码片段)
之前博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了dvs驱动的安装。本博文对到手的时间相机进行测试。运行命令roslaunchdvs_rendererdavis_mono.launch但是运行的时候出现报错[WARN][1632472696.858249337]:Cameracalibrationfile/home/kwanwaipang/.r... 查看详情
ros实验笔记之——evo(代码片段)
Errorwhileprocessing"dvs_trackingflyingroom"·Issue#4·uzh-rpg/rpg_dvs_evo_open·GitHub之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件... 查看详情
kalibr标定imu
步骤:1:如何标定2:标定的结果3:如何验证标定结果的正确性相机IMU标定的准备工作【1】环境配置:需要安装ROS,可根据http://wiki.ros.org/ROS/Installation选择安装版本(我安装的ubuntu版,http://wiki.ros.org/cn/jade/Installation/Ubuntu).ROS安装成功... 查看详情
ros实验笔记之——基于vscode的ros开发(代码片段)
在VSCODE中添加ROS的插件,可以使得其开发比较简单,但是有时候还是无法显示出一些ROS函数或者变量,修改.vscode文件夹下的c_cpp_properties.json文件如下:"configurations":["browse":"databaseFilename":"","li... 查看详情
ros实验笔记之——基于prometheus的无人机运动规划(代码片段)
...学习无人机的运动规划。关于该项目的配置可以参考《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》Demo演示基于2D-LiDAR的APF路径规划基于rgbdcamera的APF路径规划基于3D-LiDAR的Astar路径规划ego-planner对于ego-planner... 查看详情
ros学习笔记之——dvxplorer测试
继之前《ROS实验笔记之——DAVIS346测试》测试了DAVIS346后,最近团队又购买了dvxplorer。长相上跟davis346差不多。但是实际上对于噪声的敏感程度完全不是一个等级首先需要调镜头。如下图所示。中间为光圈,需要调到最大... 查看详情
ros实验笔记之——基于cartographer的多机器人slam地图融合(代码片段)
...图融合 》已经实现了基于gmapping的多机器人地图融合。实验和仿真都验证过了。本博文通过cartographer来实现SLAM,再做mapmerge先看视频效果two启动的文件#!/bin/bashgnome-terminal--tab-e'bash-c"roscore;execbash"'sl 查看详情
ros学习笔记之——esvo复现及davis346测试(代码片段)
之前博客《学习笔记之——EventCamera调研》已经介绍过事件相机。本博文对科大开源的ESVO以及本团队购买的DAVIS346进行测试分析。本博文仅供本人学习记录用,不做任何商业用途~目录原理学习代码运行事件相机的driver安... 查看详情
ros实验笔记之——eventcamera产生ts与em(代码片段)
本博文是本人用eventcamera实现timesurface以及eventmap的记录FeatureExtraction参考:事件相机整理角点检测与跟踪总结|码农家园ESVO之前博客《ROS学习笔记之——ESVO复现及DAVIS346测试》已经介绍过ESVO了安装1.driver的安装,之前已经安装过... 查看详情
ros实验笔记之——基于l515激光相机的flvis与mlmapping(代码片段)
之前博客《ROS实验笔记之——VINS-Mono在l515上的实现》在l515上实现了vins,博客《ROS实验笔记之——SLAM无人驾驶初入门》配置flvis并跑了对应的kitti数据集本博文在l515上先实现flvis然后再用mlmapping来建图。camera.launch<launch>&l... 查看详情
kalibr标定双目内外参数以及imu外参数(代码片段)
本文记录使用Kalibr标定双目相机内外参数以及和IMU之间外参数的标定过程.采用的硬件设备为小觅的双目VIO设备(MyntEYE),并且默认你已经有了ROS的知识基础.标定stereo-imu之前,需要知道双目的内外参数,所以先进行双目内外参数的标定... 查看详情
ros实验笔记之——基于cartographer方法的slam(代码片段)
之前做的2DLiDAR的实验中,大多采用gmapping,本博文试试采用cartographer。对于cartographer方法,相比起gmapping,其多了IMU以及回环检测。有了回环检测后,可以避免odom的累积误差首先安装依赖包sudoapt-getinstallros-melo... 查看详情
kalibr标定双目内外参数以及imu外参数(代码片段)
本文记录使用Kalibr标定双目相机内外参数以及和IMU之间外参数的标定过程.采用的硬件设备为小觅的双目VIO设备(MyntEYE),并且默认你已经有了ROS的知识基础.标定stereo-imu之前,需要知道双目的内外参数,所以先进行双目内外参数的标定... 查看详情