realsense d435i标定imu与camera

2023-05-16

realsense d435i标定imu与camera

1.标定目的
realsense d435i包含两个红外相机、红外发射器、RGB相机和IMU四个模块,显然四个传感器的空间位置是不同的,我们在处理图像和IMU数据时需要将这些数据都放在统一的坐标系上去。比如我们用d435i运行vins,我们处理的图像和IMU数据都需要放在同一个坐标系下,因此我们需要标定IMU相对RGB相机的空间位置(包括旋转和位移)。另外,相机固有参数比如焦距、畸变参数等以及IMU的零偏和scale系数等都需要提前知道。前者我们称为外参,后者称为内参,在运行程序前我们需要标定它们,不论程序是否有自标定功能,毕竟好的初始标定值对于自标定来说也是有利的。

2.标定准备

  1. 安装realsense-sdk2.0,包括d435i的驱动等,直到可以运行realsense-viewer,可以看到图像和深度图。

  2. 安装realsense-ros,前提要安装ros-kinetic,这个包可以直接读取d435i的数据流,并发布各个topic,后面标定操作直接订阅相关的topic。

  3. 安装imu_utils,前提要安装code_utils,这个用于标定IMU的噪音密度和随机游走系数。
    在github上下载,并编译,地址:https://github.com/gaowenliang/imu_utils
    问题:code_utils-master/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp:No such file or directory
    解决:在code_utils下面找到sumpixel_test.cpp,修改#include "backward.hpp"为 #include “code_utils/backward.hpp”,再编译。

  4. 安装Kalibr。这个软件包可以同时标定多个相机的外参和内参(提供不同的相机的模型),另外可以标定相机和IMU的外参。

3.imu标定
在imu_utils/launch/目录下新建 d435i_imu.launch


#imu topic的名字


#标定的时长min



运行相机
roslaunch realsense2_camera rs_camera.launch

录制imu数据包
rosbag record -O imu_calibration /camera/imu
录制2小时按CTRL+C完成

运行校准程序
roslaunch imu_utils d435i_imu.launch
回放数据包(20倍回放)
rosbag play -r 20 imu_calibration.bag
经过这些标定会生成一个yaml文件和很多txt文件,主要是yaml文件,给出了加速度计和陀螺仪三轴的noise_density和random_walk,同时计算出了平均值,后面IMU+摄像头联合标定的时候需要这些均值。
#根据标定结果修改① imu.yaml,后面会用到,其文件内容为
#Accelerometers
accelerometer_noise_density: 3.6510867135455143e-02 #Noise density (continuous-time)
accelerometer_random_walk: 8.7794225985338419e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.1110598103547959e-02 #Noise density (continuous-time)
gyroscope_random_walk: 2.1198529500305598e-04 #Bias random walk
rostopic: /camera/imu #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the val

4.相机标定

设置棋盘格参数,保存成yaml文件,(位置随意,在后面引用绝对路径即可,例如kalibr_calibrate_cameras --target ~/d435i_calibration/checkboard.yaml)②,保存好后面会用到。
target_type: ‘checkerboard’ #gridtype
targetCols: 8 #number of internal chessboard corners 注意是内角点数目
targetRows: 11 #number of internal chessboard corners 注意是内角点数目
rowSpacingMeters: 0.03 #size of one chessboard square [m]
colSpacingMeters: 0.03 #size of one chessboard square [m]

录制camera标定数据:rosbag

为了方便查看,先打开可视化窗口:

终端1:roslaunch realsense2_camera rs_camera.launch //打开相机节点
终端2:rviz/,选camera_link,add topic->camera->color->image_raw 打开可视化窗口,固定相机,移动标定板(效果应稍微好一些),或者rqt也可。

将图像频率降低为4HZ,这里可以用throttle方法,不会出错,并发布新的topic,不会修改原topic:

rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color
利用throttle工具降低录制的RGB图像频率,降至4HZ,新发布的topic名字是/color

rosbag record -O camd435i /color
其中 -O表示可以保存成camera_calibration.bag(设置bag名称),/color 为录制的话题名称。
(ctrl-c结束录制,bag文件会自动保存到录制时命令行所在的目录)

大部分时间应保证目标(标定板)占视野一半以上,尽可能多角度和多位置(上下左右等)甚至到摄像头捕捉图像的边缘,这样移动目标1min左右即可。

kalibr标定单个camera
kalibr_calibrate_cameras --target ~/d435i_calibration/checkboard.yaml --bag ~/camera_calibration.bag --bag-from-to 5 50 --models pinhole-radtan --topics /color --show-extraction
其中–target ~/bagfiles/checkboard.yaml为定位棋盘格yaml参数文件路径;
–bag ~/bagfiles/camd435i.bag为设置录制bag文件路径;
–bag-from-to 5 50表示用5~50s(根据录制数据的质量决定时间的取舍)之间的数据进行计算;
–models pinhole-radtan为相机模型;
–topics /color,bag录制的话题为topics。

完成后会生成③camchain.yaml,保存好后面会用

错误:No module named ceres
解决:https://github.com/ceres-solver/ceres-solver
错误:ImportError: No module named igraph
解决:pip install igraph --user

5.imu和相机共同标定
调用kalibr的算法计算IMU和camera外参
需要准备的文件:
1.imu.yaml:包含imu参数;
2.camchain.yaml: 包含相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵;
3.checkboard.yaml:标定目标板的参;
4…bag:包含有图片信息和IMU数据的ROS包。
我们之前已经获取了①②③,三个文件,只差bag包了。

抓取bag包
官方推荐 camera 20hz,imu 200hz。
rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color
rosrun topic_tools throttle messages /camera/imu 200.0 /imu

固定标定目标,确保摄像头能够提取特征前提下充分调整d435i的姿势和位置,录制数据包。
rosbag record -O imu_camera_calibration /color /imu

先面对标定目标,然后俯仰、偏航和横滚三个角度分别面向目标运动,然后是前后左右和上下运动,充分运动起来,推荐时间在2min以上。
完成后得到 ④imu_camera_calibration

运行标定
kalibr_calibrate_imu_camera --target ~/d435i_calibration/checkboard.yaml --cam ~/d435i_calibration/camchain.yaml --imu ~/d435i_calibration/imu.yaml --bag ~/d435i_calibration/imu_camera_calibration.bag --bag-from-to 5 45 --show-extraction

注意: --bag-from-to 10 100 选择10-100s之间的数据
-show-extraction 展示特征提取情况

问题:ImportError: No module named scipy.optimize
解决 pip install scipy –user

标定结果
T_ic: (cam0 to imu0):
[[ 0.99960066 0.01259205 -0.02529763 -0.0054386 ]
[-0.01271351 0.99990839 -0.00464588 0.01025557]
[ 0.02523681 0.00496565 0.99966917 0.00876445]
[ 0. 0. 0. 1. ]]

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

标定评价
一般般。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

realsense d435i标定imu与camera 的相关文章

  • 如何检测位图中的红色像素

    android中的getPixels 是上下左右读取像素 还是左右上下读取像素 基本上是按行或列读取 如果我想知道图片中的红色值较高的位置 我可以这样做吗 我假设它是按列读取的 Bitmap thumbnail Bitmap data ge
  • 如何检测前置摄像头放置在设备上的位置?

    有什么方法可以检测 Android 设备上前置摄像头的放置位置吗 我认为在手机上它总是在它的顶部 靠近耳机 但所有平板电脑都是不同的 我检查了华硕 Transformer 前置摄像头位于侧面 如果我以横向模式握住它 则位于顶部 但三星 Ga
  • Android:想要在相机预览上放置剪影叠加

    我想知道如何在相机预览上添加剪影 到目前为止 我已经完成了以下示例 它只是预览相机 http developer android com reference android view TextureView html http develo
  • Android/iOS 上的相机远程快门如何工作?

    我最近在 Android iOS 上遇到了一个使用蓝牙的内置相机应用程序的远程快门 这是我找到的产品的示例链接 Link http www youtube com watch v cyVG76HDvh4 不是来打广告的 只是简单了解背后的技
  • 如何在 AVCaptureDevice 上准确设置快速快门速度(曝光时间)?

    我正在开发适用于 IOS 13 的相机应用程序 为此 我将 AVCaptureSession 与 AVCaptureVideoPreviewLayer 结合使用 到目前为止一切正常 现在我想让用户从给定的典型快门速度值数组 以 1 3 曝光
  • 在 iOS 8 中呈现相机权限对话框

    当我的应用程序在 iOS 8 上第一次尝试访问摄像头时 会向用户显示一个摄像头权限对话框 很像 iOS 7 中用于访问麦克风的麦克风对话框 在 iOS 7 中 可以预先调用麦克风权限对话框并查看是否授予了权限 请参阅这个问题 https s
  • 棒棒糖中的 takePicture 失败

    以下代码正在使用 可在后台拍照 它对于棒棒糖以下的所有版本都工作正常 但在以下版本中给出运行时异常takePicture null null mcall 有任何想法吗 public void takePictures final int d
  • 使用畸变从图像平面计算相机矢量

    我正在尝试使用相机模型来重建可以使用某些相机及其 外部 内部 参数拍摄的图像 这一点我没有任何问题 现在我想添加扭曲 正如它们中所描述的那样OpenCV https docs opencv org 4 x dc dbb tutorial p
  • 相机预览的有效模糊

    到目前为止我尝试过的 将每一帧转换为位图 然后用library https github com wasabeef Blurry并将其放入ImageView这是在相机预览前 显然太慢了 就像1 fps 然后我开始使用渲染脚本这会模糊每一帧
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • 有没有办法在 iOS 上获取相机流的亮度级别?

    我正在使用 iPhone iPad 摄像头获取视频流并在视频流上进行识别 但随着光照的变化 它会对鲁棒性产生负面影响 我已经在不同的光线下测试了不同的设置 并且可以让它工作 但尝试在运行时调整设置是我所需要的 我可以对每一帧进行简单的亮度检
  • Flutter :已处置的 CameraController,在已处置的 CameraController 上调用了 buildPreview()

    如何正确初始化和处理相机控制器 我在用camera 0 9 4 5 与许多人一起 其他错误 https stackoverflow com questions 70592464 flutter change the path of reco
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • Xamarin.Forms 用相机拍照显示方向错误并且后退按钮崩溃

    我正在使用此处的 Xamarin Forms Camera 示例 https github com XForms Xamarin Forms Labs Samples tree master XF Labs CameraSample htt
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 是否可以通过 UIActivityViewController 共享图像并保留 exif 数据?

    我有一个应用程序 可以通过以下方式将图像保存到相机胶卷中的自定义相册中 library writeImageToSavedPhotosAlbum newTestImage CGImage metadata metadata completi
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • 不调用 PreviewCallback 和带缓冲区的 PreviewCallback

    我对 Android 4 0 x 的预览回调有疑问 我设置了一个相机 创 建一个表面来显示相机图像on previewCallback 事件 一切正常 但对于 Android 4 0 x 则不然onPreviewCallback被称为 也不
  • 如何在Android中没有Intent且没有任何视图窗口的情况下拍照

    大家好 我正在尝试弄清楚如何通过按下按钮来拍照 而不显示任何预览 我的想法是 我想要拍摄并保存照片 但之前或之后没有照片的视觉预览 到目前为止 我能够获取拍照并将其保存到磁盘的代码 没有任何问题 但如果没有表面视图或预览 我似乎无法做到这一

随机推荐

  • 互斥锁、读写锁 、 自旋锁和RCU锁

    基础知识思考整理 http blog csdn net aganlengzi article details 50996227 互斥锁 mutex xff1a 在访问共享资源之前对进行加锁操作 xff0c 在访问完成之后进行解锁操作 加锁后
  • Dashgo D1概述

    概述 Dashgo D1是深圳EAI科技专门针对ROS开发的移动平台 xff0c 自主研发的核心结构保证了载重大 动力足 续航长和扩展性强的性能 xff0c 深受创客 科研 企业的欢迎 主要特性 xff1a 易于使用 由整机及其附件组成 x
  • 搭建Dashgo运行环境

    安装 设置用户的串口读取权限 span class hljs built in sudo span usermod span class hljs operator a span G dialout your user name your
  • 超声波避障

    运行如下脚本 roslaunch dashgo bringup bringup smoother ob span class hljs preprocessor launch span 在另一个终端运行 rostopic span clas
  • 虚拟机VirtualBox安装Ubuntu14.04

    本教程的运行环境 xff1a Windows 7 虚拟机 VirtualBox xff0c Ubuntu 14 04 1 准备 下载 VirtualBox5 0版可以使用后面提供的OVA镜像直接导入 xff0c 镜像是ROS的集合环境 xf
  • 树莓派实现自主导航

    使用 Flash Lidar F4 激光雷达进行自主导航 树莓派的IP假设为192 168 11 100 该教程基于地图已经建好并保存的情况下 teb amcl demo launch 的 args 参数要与前面 gmapping demo
  • 键盘控制移动

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为eaibot 默认密码为 eaibot 1 不带陀螺仪的底盘驱动 打开一个终端 xff0c 运行以下命令 xff0c 启动底盘驱动 带平滑加减
  • Dashgo-D1 不带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导
  • Dashgo-D1 带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导航模块并启动
  • Dashgo-D1 多点连续导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot 地图已经建好并引用的情况下 第一种方式 打开一个终端 xff0c ssh登录导航模块 x
  • private static final long serialVersionUID = 1L

    很显然这行代码的意思是将SerialVersionUID的值定义为一个常量 xff0c 那这是干什么的呢 xff1f 解决这个问题 xff0c 首先要了解包含SerialVersionUID的Serializable接口是什么 xff1f
  • 【善用工具】程序性能分析Gperftools初探(libwind+pprof+Kcachegrind)

    善用工具 http blog csdn net aganlengzi article details 62893533 本文主要试用的gperftool相关介绍可见 https github com gperftools gperftool
  • PowerShell文本文件、Json文件资源的读取,修改

    PowerShell文件资源的读写 文本类文件的读取 xff1a Path 61 需要读取的文件路径 不加 Raw为逐行读取 xff0c 添加则为整个文件资源的读取 data 61 Get Content Path Path data 61
  • 串口参数详解:波特率,数据位,停止位,奇偶校验位

    串口通讯 9600波特率 数据格式是8 N 1 请问一秒可以传输多少个字节的数据 xff1f 9600 xff0c n 8 1 实际上 xff0c 在发送一个字节的时候 xff0c 除了需要发送8BIT数据外 xff0c 还需要发送1bit
  • 让我们了解OSD视频叠加相关信息

    什么是视频叠加 xff1f 视频叠加就是将图片和文字信息叠加到视频信号中 xff0c 如电视台的LOGO xff0c 电影的字幕 xff0c 电视机的菜单 xff0c 都是通过视频叠加的形式显示在视频图像中的 区别于用于专业影视编辑行业的字
  • RTSP/Onvif安防视频EasyNVR内核启动正常,但视频无法播放是什么原因?

    EasyNVR是基于RTSP Onvif协议的安防视频云服务平台 xff0c 可实现设备接入 实时直播 录像 检索与回放 云存储 视频分发 级联等视频能力服务 xff0c 可覆盖全终端平台 xff08 电脑 手机 平板等终端 xff09 x
  • 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项

    EasyNVR安防视频云服务平台可支持设备通过RTSP Onvif协议接入平台 xff0c 能提供视频监控直播 录像 云存储 检索与回看 国标级联等视频能力 xff0c 可支持分发RTSP RTMP HTTP FLV WS FLV HLS
  • 安卓存储之AndroidStudio自带的sqlite配置

    当我们使用sqlite数据库时 xff0c 创建好数据库 xff0c 能在File Explorer里看到databases目录下多了一个 db文件 xff0c 但是这个表是无法查看数据库表里的内容的 所以我们准备换一种查看方式 xff0c
  • 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发

    前言 开发的本意是想看到可视化的时间 xff0c 让我们心存敬畏 xff0c 珍惜时间 xff0c 毕竟时间一去不复返 xff01 最近灵感突突然袭来 xff0c 想着做一个时间精度条 xff1a 今天度过了多少 xff0c 这周度过了多少
  • realsense d435i标定imu与camera

    realsense d435i标定imu与camera 1 标定目的 realsense d435i包含两个红外相机 红外发射器 RGB相机和IMU四个模块 xff0c 显然四个传感器的空间位置是不同的 xff0c 我们在处理图像和IMU数