相机与IMU联合标定

news/2024/11/29 10:47:20/

相机与IMU联合标定

  • 1 imu_utils 标定IMU的内参
    • 1.1 安装环境
    • 1.2 录制IMU数据集
  • 2 kalibr 标定工具
    • 2.1 安装
    • 2.2 校准相机的内外参
    • 2.3 校准相机与IMU外参
  • 总结
  • 参考资料

1、 imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声

2、kalibr包标定相机的内外参数,相机与IMU之间的外参

这里我所使用的相机是ZED相机,IMU使用的是Xsens的IMU
在这里插入图片描述

1 imu_utils 标定IMU的内参

1.1 安装环境

这里使用的包是 imu_utils [1],使用这个包可以校准IMU的噪声密度和随机游走噪声

step1: 安装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

step2: 安装 code_utils
构建工作空间

mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
catkin_make

注意,这里需要修改 code_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14 并在添加 include_directories(include/code_utils)

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

step3: 安装 imu_utils
注意,这里需要t同样修改 imu_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14

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

1.2 录制IMU数据集

step4: 静止情况下采集IMU的数据,并录制为ROS包,我采集的时间为2小时20分钟。

rosbag record /imu/data -O imu_xsens.bag

step5: 标定 配置xsens.launch文件为如下内容:(指定IMU的topic)

<launch><node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"><param name="imu_topic" type="string" value= "/imu/data"/><param name="imu_name" type="string" value= "xsens"/><param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/><param name="max_time_min" type="int" value= "120"/><param name="max_cluster" type="int" value= "100"/></node>
</launch>

其中, max_time_min 表示从ros bag包中加载多长时间的数据
随后,启动 imu_utils 标定IMU

rosbag play -r 200 imu_xsens.bag
roslaunch imu_utils xsens.launch

可得到如下输出结果:

%YAML:1.0
---
type: IMU
name: xsens
Gyr:unit: " rad/s"avg-axis:gyr_n: 4.9700389767894345e-03gyr_w: 6.8522312307501954e-05x-axis:gyr_n: 4.9016990946736316e-03gyr_w: 7.4721244172569240e-05y-axis:gyr_n: 4.9561825133283884e-03gyr_w: 6.7372212440839068e-05z-axis:gyr_n: 5.0522353223662842e-03gyr_w: 6.3473480309097542e-05
Acc:unit: " m/s^2"avg-axis:acc_n: 5.4303615468688114e-03acc_w: 1.4459759280127568e-04x-axis:acc_n: 5.7602300667994426e-03acc_w: 1.5064216759502606e-04y-axis:acc_n: 5.6378382747581945e-03acc_w: 1.4458085233539733e-04z-axis:acc_n: 4.8930162990487953e-03acc_w: 1.3856975847340367e-04

2 kalibr 标定工具

2.1 安装

安装依赖项:

sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev
sudo apt-get install libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev

编译kalibr,这里要确保电脑联网,编译时间有点长.

cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
source ~/kalibr_workspace/devel/setup.bash

2.2 校准相机的内外参

step1: 改变ZED相机发布的频率

rosrun topic_tools throttle messages /camera/left/image_raw 4.0 /stereo/left/image_raw
rosrun topic_tools throttle messages /camera/right/image_raw 4.0 /stereo/right/image_raw

录制ROS bag 包

rosbag record /stereo/left/image_raw /stereo/right/image_raw -O zed_images.bag

step2: 标定

kalibr_calibrate_cameras --target april_6x6_24x24mm.yaml --bag images.bag --bag-from-to 5 30 \--models pinhole-radtan pinhole-radtan --topics /stereo/left/image_raw /stereo/right/image_raw

在这里插入图片描述

这里还有其他的工具包也可以用 ROS camera_calibration 包。标定成功以后会在目录下生成一个 yaml文件(用于后续校准相机和IMU外参) 和 一个pdf校准日志,如果校准的重投影误差在1个像素内就是比较好的结果了.
在这里插入图片描述

2.3 校准相机与IMU外参

step1: 把IMU和相机固定在一起录制ROS bag包, 录制的时候要注意按照官方的说法-充分激励IMU- 绕3个轴旋转和3个方向的平移,这里有个官方视频[3] 可以参考

rosbag record /imu/data_raw /stereo/left/image_raw /stereo/right/image_raw -O images_imu.bag

step2: 启动校准包开始校准

kalibr_calibrate_imu_camera --target april_6x6_55x55mm.yaml --bag ~/bagfiles/zed_xsens.bag --bag-from-to 5 50 --cam camchain_images_zed_3495.yaml  --imu xsens_imu.yaml --imu-models scale-misalignment --timeoffset-padding 0.1

其中 参数:
1) –target april_6x6_24x24mm.yaml 描述标定板的信息
2) –bag images_imu.bag 指定数据包
3) –bag-from-to 5 50 设定bag包开始时间和结束时间,避开拿起和放下IMU的时间段内的数据
4)–cam camchain_images_zed_3495.yaml 相机参数文件
5)–imu xsens_imu.yaml 设定IMU的信息
6)–imu-models scale-misalignment IMU的参数模型

camchain_images_zed_3495.yaml 文件内容如下:

cam0:cam_overlaps: [1]camera_model: pinholedistortion_coeffs: [-0.1734857772863602, 0.026545178121976657, 0.0004291887376674085,-3.4873170616746686e-05]distortion_model: radtanintrinsics: [693.131838769146, 692.5498277671763, 616.3486206381017, 379.6677572220899]resolution: [1280, 720]rostopic: /stereo/left/image_raw
cam1:T_cn_cnm1:- [0.9999658061828064, 0.0005632950824424241, 0.0082504038578218, -0.11947602055948268]- [-0.0006621128372211408, 0.9999280240823567, 0.011979493367486592, 0.0004870068672051519]- [-0.008243062037729159, -0.011984546441186855, 0.9998942056912012, -0.0028910358303400464]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [0]camera_model: pinholedistortion_coeffs: [-0.17456713089475154, 0.027410444232267236, 0.0006360696559962682,-0.0002450168896166665]distortion_model: radtanintrinsics: [694.2107729740508, 693.480347118504, 617.3114354961933, 380.800130116761]resolution: [1280, 720]rostopic: /stereo/right/image_raw

xsens_imu.yaml 文件内容:

#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 walkrostopic:                    /imu/data      #the IMU ROS topic
update_rate:                 100.0      #Hz (for discretization of the values above)

标定完成以后同样会生成一个报表和在终端里面打印校准信息;

在这里插入图片描述

标定结果的重投影误差应该在零点几个像素
标定出来的位移和实际测量或估计的IMU 和相机中心位移比较一致

总结

  1. 相机和IMU标定流程比较简单
  2. 校准时候要注意限制相机的频率为4HZ,校准IMU时候采集数据的时间在2小时左右
  3. 利用kalibr标定的精度看起来还是OK的

参考资料

[1] https://github.com/gaowenliang/imu_utils
[2] https://blog.csdn.net/u011178262/article/details/83316968?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
[3] https://www.bilibili.com/video/av795841344/


http://www.ppmy.cn/news/726145.html

相关文章

温暖人像LR预设(含lr预设导入教程)

这是一套专业的温暖人像LR预设&#xff0c;专为艺术肖像编辑器而设计。此套温暖人像LR预设包含ACR预设&#xff0c;PS动作以及多种不同效果类型的Lightroom预设&#xff0c;经过精心校准以保留自然肤色的美丽温暖色彩来增强它们&#xff0c;让您可以轻松调整您喜欢的色彩&#…

二叉树 — 给定二叉树中某个节点,返回该节点的后继节点

后继节点定义&#xff1a; 二叉树以中序的方式进行遍历打印&#xff0c;节点X的下一个节点&#xff0c;就是X的后继节点。 假设二叉树如下图所示&#xff1a;则中序遍历的后打印出来的就是 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7。如果X 3&#xff0c;则X的后继节…

安全 --- http报文包详解及burp简单使用

HTTP HTTP&#xff08;超文本传输协议&#xff09;是今天所有web应用程序使用的通信协议。最初HTTP只是一个为了获取基本文本的静态资源而开发的简单协议&#xff0c;后来对其进行扩展和利用&#xff0c;使其发展为能够支持如今常见的复杂分布式应用程序。 &#xff08;1&…

镁客网每周硬科技领域投融资汇总(1.27-1.31),英特尔拟大手笔收购以色列芯片制造商...

1月份&#xff0c;国内航空航天已知融资事件达到了3起。 本周硬科技领域投融资事件一共29起&#xff0c;人工智能领域发生12起融资事件&#xff0c;占比42%&#xff1b;生物医药领域发生9起融资事件&#xff0c;占比32%&#xff1b;区块链领域发生3起融资事件&#xff0c;分别…

Java Web(2)-jQuery下

一、jQuery的属性操作 html() 它可以设置和获取起始标签和结束标签中的内容&#xff0c;跟 dom 属性 innerHTML 一样。text() 它可以设置和获取起始标签和结束标签中的文本&#xff0c; 跟 dom 属性 innerText 一样。val() 它可以设置和获取表单项的 value 属性值&#xff0c; …

计算机图形学 相机_如何将照片从相机无线传输到计算机

计算机图形学 相机 If you’re a prolific shutterbug, you know what a hassle it is to constantly pull the SD card from your camera, plug it into your computer, and transfer the files to get to the snapshots you just took. Here’s how to add Wi-Fi based photo…

jQuery笔记

1.jQuery语法 1.$是jQuery核心函数 1.1当传入参数为函数时 表示页面加载完成后&#xff0c;相当于window.οnlοadfunction&#xff08;&#xff09;{} <script type"text/javascript" src"../script/jquery-1.7.2.js"></script> <scri…

JQuery②

JQuery② 1、jQuery的属性操作2、JQuery练习2、全选、全不选、反选 4、DOM的增删改从左到右&#xff0c;从右到左.html 5、JQuery 练习2动态添加、删除表格记录 6、CSs样式操作。7、jQuery动画基本动画淡入淡出动画 六、练习品牌展示8、jQuery事件操作jQuery中其他的事件处理方…