草庐IT

D435i相机标定

塔楼 2024-05-14 原文

D435i相机的标定

D435i相机标定

IMU标定

  • 安装imu_utils、code_utils、realsense-ros
  • 使用imu_utils录制imu_calibration.bag
#1. 运行相机d435i
roslaunch realsense2_camera rs_camera.launch unite_imu_method:="linear_interpolation" enable_gyro:=true enable_accel:=true
#2.录制IMU数据包
rosbag record -O imu_calibration /camera/imu
#3.使用imu_utils进行标定,首先需要新建一个imu_utils的launch文件,内容如下所示
<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <!--IMU的话题-->
        <param name="imu_topic" type="string" value= "/camera/imu"/>
        <!--这个和最后保存的文件名有关,最后的文件名为D435i_imu_param.yaml-->
        <param name="imu_name" type="string" value= "D435i"/>
        <!--标定结果存放的文件目录-->
        <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>
#4.我们把新建的launch文件命名为d435i_imu_calibration.launch ,然后通过如下的命令就可以运行了:
roslaunch imu_utils d435i_imu_calibration.launch
#5. 播放之前录制的数据包,找到录制的数据包,运行下面的命令
rosbag play -r 200 imu_calibration.bag
#6.这一部分的工作都完成之后,我们会得到D435i相机IMU的标定文件D435i_imu_param.yaml

使用Kalibr进行相机和IMU联合标定

  • 安装kalibr
# 创建kalibr的ros工作空间
mkdir -p kalibr_ws/src && cd kalibr_ws/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ..
catkin_make

  • 运行kalibr生成标定板
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 
--tsize 0.03 --tspace 0.3
或者
rosrun kalibr kalibr_create_target_pdf --type checkerboard --nx 6 --ny 7 
--csx 0.05 --csy 0.05

  • 可能会出现的错误的解决方法:
出现ModuleNotFoundError: No module named 'pyx'时,如果使用pip安装无法解决,则需要使
用sudo apt-get install python3-pyx进行安装.或者sudo apt-get install python-pyx安装

上面的命令会生成6x6、格子大小为3cm的标定板(后者是棋盘格子),并将下述参数写入Kalibr/data/checkerboader.yaml文件:

tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.03            #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize

棋盘格的参数对应为:

arget_type: 'checkerboard'
targetCols: 6 # 横向的角点数
targetRows: 7
rowSpacingMeters: 0.03 # 每个格子的宽度
colSpacingMeters: 0.03
  • 采集相机标定数据
    - 开启相机节点:
roslaunch realsense2_camera rs_camera.launch
  • 打开可视化窗口,随时查看相机拍摄情况:
rviz  //坐标系选camera_link,然后添加相机话题即可实时可视化图像
  • 调整采集图片分辨率,重新发布一个话题:
rosrun topic_tools throttle messages /camera/color/image_raw 6.0 /calib_image
  • 录制标定数据bag包
rosbag record -o d435i_calib_rgbimage /calib_image

  • 开始利用Kalibr标定
rosrun kalibr kalibr_calibrate_cameras --target ./src/Kalibr/data/target.yaml --bag ./src/Kalibr/data/d435i_calib_rgbimage_2022-11-03-09-14-20.bag --models pinhole-equi --topics /calib_image

ModuleNotFoundError: No module named ‘wx’: 在使用python的时候使用的是/usr/bin中的python,并不是conda环境中的python,所以需要使用sudo pip安装wx包.
- igraph的版本问题,可以安装第版本的igraph

sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple igraph==0.1.1

如果igraph出现无.Graph对象,则卸载igraph安装python_igraph

#卸载igraph
pip uninstall igraph
#先安装如下包,否则无法编译python_igraph包
sudo apt-get install -y libigraph0-dev
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python_graph==0.7.1.post6

标定时出现 Attempt to unlock mutex that was not locked 已放弃 (核心已转储)错误时,将标定命令的show参数去除

rosrun kalibr kalibr_calibrate_cameras --target ./src/Kalibr/data/target.yaml --bag ./src/Kalibr/data/d435i_calib_rgbimage_2022-11-03-09-14-20.bag --models pinhole-equi --topics /calib_image

参考:https://blog.csdn.net/weixin_50508111/article/details/123985154

  • IMU+相机联合标定
    • 录制标定数据
# 仍然使用之前的标定板,运行下面的命令发布图像和IMU话题
roslaunch realsense2_camera rs_camera.launch unite_imu_method:="linear_interpolation"

#将图像频率设置为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

#开始录制
rosbag record -O dynamic /color /imu

  • 开始标定
rosrun kalibr kalibr_calibrate_imu_camera --target ./src/Kalibr/data/target.yaml --cam ./src/Kalibr/data/camchain.yaml --imu ./src/Kalibr/data/imu.yaml --bag ./src/Kalibr/data/dynamic.bag

有关D435i相机标定的更多相关文章

  1. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  2. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

  3. 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定 - 2

    俯拍相机中心和吸嘴中心的标定文章目录俯拍相机中心和吸嘴中心的标定前言适用模型如下:一、使用一个标定片进行标定1.关键注意:2.标定步骤:二、使用一个L型的工件1.关键注意:2.标定步骤:总结前言在自动化设备领域,使用相机进行定位是很普遍存在的,而使用相机定位就必定会用到标定,本文介绍两种关于吸嘴上方的俯拍相机和吸嘴中心的标定方法(前提是带有仰拍相机和俯拍相机)。【还有很多相机的使用场景的标定方法将在以后的文章中进行阐述】适用模型如下:一、使用一个标定片进行标定1.关键注意:关键是使用两个相机的中心和识别偏差,得到两个相机的中心固定偏差。注:后续俯拍相机拍物料识别得到的偏差以吸嘴中心在俯拍相机中

  4. 相机内参标定,相机和激光雷达联合标定 - 2

    相机内参标定,相机和激光雷达联合标定一、相机标定原理1.1成像过程1.2标定详解二、相机和激光雷达联合标定2.1标定方法汇总2.2Autoware的安装与运行2.2.1安装方式2.2.2安装Autoware的依赖(Ubuntu16.04/kinetic)2.2.3编译Autoware1.创造工作空间2.下载Autoware源码3.其他依赖4.编译5.效果2.3Autoware标定激光雷达和相机的外参过程一、相机标定原理1.1成像过程现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。成像过程:四个坐标系如下图所示:世界

  5. 相机面试问题总结 - 2

    1,Camera基本工作原理答案:光线通过镜头Lens进入摄像头内部,然后经过IRFilter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式RawData,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。数据流是如何从sensor到APP的?上述描述结束后,在ISP处理后面的阶段,数据会进行分流,分为capture,preview,video等以供后续动作使用。例如

  6. 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码) - 2

    博主的合并代码git@github.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1SDK+ROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm=1001.2014.3001.55011.2相机标定参数1、相机内参通过rostopic的camera/info获取header:标准消息头seq:序列ID,连续递增的ID号stamp:两个时间戳frame_id:与此数据相关联的帧IDheight:图像尺

  7. Baumer工业相机VCX系列相机硬件触发流程和设置 - 2

    项目场景Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。 Baumer堡盟VCX相机为堡盟全系列相机中的主流常用相机,性能强大、坚固可靠,易于集成,常用与一般行业的检测定位识别使用。问题描述工业相机的触发有多种方式:1.硬件触发:使用外部硬件设备来触发相机,如传感器或开关。2.软件触发:使用软件来触发相机,可以是手动的也可以是自动的。3.同步触发:使相机的触发与其他设备或系

  8. uniapp实现自定义相机 - 2

    自定义相机起因由于最近用uniapp调用原生相机容易出现闪退问题,找了很多教程又是压缩图片又是优化代码,我表示并没有太大作用!!实现自定义相机使用效果图拓展实现多种自定义相机水印相机身份证相机人像相机起因由于最近用uniapp调用原生相机容易出现闪退问题,找了很多教程又是压缩图片又是优化代码,我表示并没有太大作用!!于是开启了我的解决之路利用livePusher实现实现自定义相机拓展性挺强的,可以实现自定义水印、身份证拍摄、人像拍摄等这里我简单实现一个相机功能主要用于解决闪退Tip:这里需要创建nvue文件哦~创建camera.nvuetemplate> viewclass="pengke-c

  9. javascript - 在 Three.js 中向场景添加相机的原因? - 2

    虽然我已经将它传递给我的渲染方法,但我为什么要将它添加到场景中?我在存储库中看到的每个示例都将相机添加到场景中,例如weggl_geometries.但是在删除scene.add(camera)之后它仍然有效......初始化函数camera=newTHREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,1,2000);camera.position.y=400;scene.add(camera);渲染函数renderer.render(scene,camera); 最佳答案

  10. javascript - 如何让我的文本标签始终面向相机?也许使用 Sprite ? - 2

    我在看两个例子,一个是Canvas交互对象,另一个是鼠标工具提示。我尝试将两者结合起来在每个单独的立方体上生成文本标签,这就是我目前所拥有的。但是,文本会随着旋转的立方体移动,并且有时会向后或向侧面显示文本。我怎样才能像鼠标工具提示(http://stemkoski.github.io/Three.js/Mouse-Tooltip.html)示例中那样将文本固定在Sprite中?我试图合并Sprite,但我不断收到错误。我不知道该怎么做。你能解释一下我该如何去做吗?谢谢。到目前为止,这是我的代码:three.jscanvas-interactive-cubesbody{font-fam

随机推荐