IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 双目相机 -- IMU联合标定 -> 正文阅读

[人工智能]双目相机 -- IMU联合标定

声明:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅!!!

写在前面:其实联合标定用的 kalibr 可以直接完成相机标定、IMU标定、相机+IMU联合标定整个流程。这里只写了联合标定,另外两种之前不是用kalibr 做的,所以没有kalibr 的部分,感兴趣的同学可以去官网自己研究

1、 IMU的标定

1.1 IMU数据读取

首先要读取IMU数据,之前写过一篇,如果你的IMU也和我的一样没有官方ros历程的话,可以参考

1.2 IMU数据滤波

关于IMU滤波,不同IMU应该不一样,流程可以参考博客

1.3 录制rosbag包

将滤波后的imu信息录制为rosbag
先查看 topic 列表

rostopic list

在这里插入图片描述

命令行查看 topic内容:

rostopic echo /topic

在这里插入图片描述
静置IMU,录制imu话题 (一般为两个小时左右)

rosbag record /imu/data -o imu.bag

在这里插入图片描述

1.4 kalibr_allan 标定

这部分和博客1.2部分完全一致,注意修改topic话题名称为 “/imu/data” 即可。

亦可以使用上面博客的1.1部分的imu_utils,不过好像kalibr_allan 精度更高些。

2、相机的标定

之前写过两个
MatLab的双目相机标定和orbslam双目参数匹配
ROS+Opencv的双目相机标定和orbslam双目参数匹配

也可以按照 kalibr 的来
1、先下载kalibr提供的网格

2、相机发布频率改为4

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

3、录制ROS bag 包

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

4、kalibr 标定:

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

kalibr支持多种相机模型

好像还可以用 ROS camera_calibration 包,记录一下,没有用过。

3、相机 - IMU联合标定

3.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-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules 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

mkdir -p kalibr_ws/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_ws
catkin build -DCMAKE_BUILD_TYPE=Release -j4

kalibr编译问题解决

3.2 开始标定

官方教程

下载kalibr提供的网格和它的参数文件
官方数据
在这里插入图片描述

先修改imu的发布频率,官方推荐为200Hz

rosrun topic_tools throttle messages /imu/data 200.0 /imu/data_raw

1、 把IMU和相机固定在一起,录制ROS bag包

rosbag record /imu/data /camera/left/image_raw /camera/right/image_raw -o images_imu.bag

注:
1、录制的时候要注意按照官方的说法-充分激励IMU- 绕3个轴旋转和3个方向的平移,这里有个官方视频介绍,打不开的话有人把它搬到B站上了
2、三个topic按照自己的情况改。另外可以再加两个(非必要): /camera/left/camera_info /camera/right/camera_info

2、 启动校准包开始校准

kalibr_calibrate_imu_camera --target april_6x6_55x55mm.yaml --bag images_imu.bag --bag-from-to 5 50 --cam camchain.yaml  --imu imu.yaml --imu-models scale-misalignment --timeoffset-padding 0.1

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

另外可以加上–show extraction参数,以可视化校准目标提取过程。这可能有助于发现目标配置和提取的问题。

april_6x6_55x55mm.yaml文件内容

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.088           #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize
codeOffset: 0            #code offset for the first tag in the aprilboard

在这里插入图片描述

也可以用棋盘格!!!

// 棋盘格的设置与代码内参数设置一样即可
#example for checkerboard
target_type: 'checkerboard'  #gridtype
targetRows: 12              #number of internal chessboard corners
targetCols: 8               #number of internal chessboard corners
rowSpacingMeters: 0.41       #size of one chessboard square [m]
colSpacingMeters: 0.41       #size of one chessboard square [m]

camchain.yaml 文件内容:

cam0:
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [-0.1734857772863602, 0.026545178121976657, 0.0004291887376674085,
    -3.4873170616746686e-05]
  distortion_model: pinhole
  intrinsics: [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: pinhole
  distortion_coeffs: [-0.17456713089475154, 0.027410444232267236, 0.0006360696559962682,
    -0.0002450168896166665]
  distortion_model: radtan
  intrinsics: [694.2107729740508, 693.480347118504, 617.3114354961933, 380.800130116761]
  resolution: [1280, 720]
  rostopic: /stereo/right/image_raw

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 walk

rostopic:                    /imu/data_raw  	#the IMU ROS topic
update_rate:                 200.0      		#Hz (for discretization of the values above)

标定结果:

.txt文件中的部分结果,最重要的是相机与imu之间的变换矩阵

Calibration results
===================
Normalized Residuals
----------------------------
Reprojection error (cam0):     mean 0.126389437034, median 0.117608381877, std: 0.0673478862055
Reprojection error (cam1):     mean 0.132576172002, median 0.12130080264, std: 0.0739372479366
Gyroscope error (imu0):        mean 0.000146638755352, median 3.16696236165e-07, std: 0.0014737840839
Accelerometer error (imu0):    mean 1.14000452874e-06, median 1.02723705118e-08, std: 6.0143590628e-06

Residuals
----------------------------
Reprojection error (cam0) [px]:     mean 0.126389437034, median 0.117608381877, std: 0.0673478862055
Reprojection error (cam1) [px]:     mean 0.132576172002, median 0.12130080264, std: 0.0739372479366
Gyroscope error (imu0) [rad/s]:     mean 5.18446291471e-06, median 1.11969028084e-08, std: 5.21061359864e-05
Accelerometer error (imu0) [m/s^2]: mean 8.06104932854e-08, median 7.26366284774e-10, std: 4.2527940778e-07

Transformation (cam0):
-----------------------
T_ci:  (imu0 to cam0): 
[[-0.02093225 -0.99971259  0.01168657 -0.00021865]
 [ 0.13518962 -0.01441203 -0.99071492 -0.00086208]
 [ 0.99059861 -0.01915798  0.13545244  0.00014753]
 [ 0.          0.          0.          1.        ]]

T_ic:  (cam0 to imu0): 
[[-0.02093225  0.13518962  0.99059861 -0.00003417]
 [-0.99971259 -0.01441203 -0.01915798 -0.00022818]
 [ 0.01168657 -0.99071492  0.13545244 -0.00087151]
 [ 0.          0.          0.          1.        ]]

timeshift cam0 to imu0: [s] (t_imu = t_cam + shift)
0.000336885304337

由于自己摄像头坏了,疫情封控暂时收不到快递,等收到新摄像头后再更新。

参考

ros数据集录制:rosbag record
ROS读IMU数据
相机与IMU联合标定
camera-imu标定 联合标定

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:39:40  更:2022-05-09 12:43:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:46:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码