首页 > 其他分享 >D435i标定

D435i标定

时间:2024-01-29 20:35:50浏览次数:26  
标签:D435i -- 标定 yaml camera imu kalibr

一、三部分标定

路线:相机内参标定→imu内参标定→相机,imu外参联合标定→结果评定

前期步骤:Kalibr环节搭建,D435i驱动安装,ORB-SLAM3环境搭建

有的人还会关闭结构光,在realsense_ws里的rs.launch里1关即可,emitter_enabled设置为off(0)

(一)相机标定

运行标定程序还是先需要知道需要输入什么量:

1.bag文件(待标定相机录得的数据包)

2.yawl文件(之前下载的,要复制到与bag一个文件夹,这个文件像一个先验文件,标定结束后还回生成一个yawl文件,算是后验,yawl文件需要自己进行修改)

3.相机模型文件,就是你所需要的内参的模板,针孔相机(手机)就选pinhole-radtan(标定相机命令里面的模型必须选对,本文选取的是--models pinhole-radtan,否则会报错,这一步非常重要。具体模型参考https://github.com/ethz-asl/kalibr/wiki/supported-models)

4.topic,就是bag文件中相机发布图像的topic话题

(1)realsense d435i可以直接读取相机的内参

roslaunch realsense2_camera rs_camera.launch //打开相机节点

rostopic echo /camera/color/camera_info //查看相机内参

(2)标定流程

a.准备标定板和标定板的参数文件

1>可以自己生成:

       安装依赖:sudo apt-get install python-pyx(较重要)

  依次执行:rosrun kalibr kalibr_create_target_pdf --h

  rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.055 --tspace 0.3

  --type apriltag 标定板类型
  --nx [NUM_COLS] 列个数
  --ny [NUM_ROWS] 行个数
  --tsize [TAG_WIDTH_M] 二维码方格长度,单位m
  --tspace [TAG_SPACING_PERCENT] 小方格与二维码方格长度比例

      执行完上述命令会生成想要的pdf,但还要自己编写yaml文件,如下:  

  target_type: 'aprilgrid'    #gridtype
  tagCols: 6                      #number of apriltags
  tagRows: 6                    #number of apriltags
  tagSize: 0.02                 #size of apriltag, edge to edge [m],打印出来要亲自拿尺子量一下tagsize,进行改正,这里yaml和生成时的数据不一定一致
  tagSpacing: 0.3             #ratio of space between tags to tagSize 

                #example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]

2>直接在官网下载,然后根据打印出来的实际数据进行修改

https://github.com/ethz-asl/kalibr/wiki/downloads,下载Aprilgrid 6x6 0.8x0.8 m (A0 page)即可,会得到需要打印的pdf和对应的yaml文件

yaml文件需要根据A4纸打印出来的实际尺寸进行修改,即主要修改tagsize这个数值,tagsizeing是等比例缩小或放大的,故不用改

b.录制camera标定数据:rosbag

为了查看录制照片的好坏,可以通过ROS中的Rviz界面查看具体命令如下:分别在两个终端实现。

  roslaunch realsense2_camera rs_camera.launch//打开相机节点

  rviz,选camera_link,add topic->camera->color->image_raw//打开可视化窗口

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

  rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color

 开始录制rosbag包,最好新建一个文件夹,然后在当前终端输入以下命令:

       mkdir bagfiles

  cd bagfiles rosbag

  record -O camd435i /color                 # rosbag record [相机话题] -O [保存的bag名字]

录包的时候可以实时打印话题color输出的信息:

  rostopic echo /camera/color/image_raw

录取bag个人经验:
1、录取时长最少3分钟。--bag-from-to 25 150 最少120s,图片数量500张左右。
2、录取过程中要缓慢移动,倾斜。标定板位置最好出现在rqt_image_view(这也是前面提前打开rviz的目的) 视野的各个位置

其中-O表示设置的bag包名字,/color为录制的话题的名称。ctrl+c结束录制,bag文件会自动保存到录制时所在的目录

c.标定相机

rosrun kalibr kalibr_calibrate_cameras --bag~/kalibr_ws/bagfiles/camd435i.bag --target ~/kalibr_ws/bagfiles/april_6x6_80x80cm.yaml --topics /color --models pinhole-radtan --show-extraction --bag-from-to 5 105

--target //棋盘格yaml参数文件路径 --bag //录制rosbag包路径 --models //相机模型 --topics //话题名称

标定结果保存在kalibr_ws目录下,生成了三个文件

***.yaml //主要作用为了后期imu+相机联合标定

***.pdf //以图的方式显示效果

***.txt //含有相机的内参以及重投影误差(这个是给我们看的,尤其是重投影误差,小于一个px即可)

(二)标定imu

 a.配置realsense的launch文件,在realsense-ros/realsense2_camera/launch文件夹下,修改配置参数

 这样做的目的是将accel和gyro的数据合并得到imu话题,如果不这样做发布的topic中只有加速度计和陀螺仪分开的topic,没有合并的camera/imu 话题。linear_interpolation也可以换成copy

b.标定imu时需要配置imu_utils和code_utils,下载链接为

https://github.com/gaowenliang/imu_utils

https://github.com/gaowenliang/code_utils

  mkdir ccalibration_ws
  cd calibration_ws
  mkdir src
  git clone https://github.com/gaowenliang/imu_utils.git
  git clone https://github.com/gaowenliang/code_utils.git
  cd ..
  catkin_make
  source devel/setup.bash

c.编写d435i_imu_calibration.launch文件,在imu_utils/launch文件夹下

  <launch>

  <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"> <param name="imu_topic" type="string" value= "/camera/imu"/>

  <param name="imu_name" type="string" value= "d435i_imu_calibration"/>

  <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>

  <param name="max_time_min" type="int" value= "10"/>

  <param name="max_cluster" type="int" value= "120"/>

  </node>

  </launch>

标定imu时的launch文件记得修改max_time_min对应的参数,默认是120,意味着两个小时,要是你的ros包里的imu数据长度没有两个小时,就进行不下去,始终停留在wait for imu data这里。

标定结果保存在 imu_utils/data/文件夹下

d.具体步骤

step1:进入realsense-ros包,开启d435i,发布IMU话题(顺便打印imu话题:rostopic echo /camera/imu)

  记得 source ./devel/setup.bash(不然不出现imu的话题)

  roslaunch realsense2_camera rs_camera.launch

step2: 录制imu数据包

  rosbag record -O imu_calibration /camera/imu

step3: 运行校准程序(就是C步骤的launch文件)

  roslaunch imu_utils d435i_imu_calibration.launch(校准程序会显示wait for imu data,等着在线数据或是回放数据)

step4:

  回放数据包 rosbag play -r 20 imu_calibration.bag

step1->step3同时进行可以实现在线标定,完成后直接生成标定结果

然后将Acc和Gyr的第一组平均数据拷贝到kalibr对应的imu.yml文件中,用于后续联合标定

(三)相机和imu联合标定

流程:

1、根据前面的相机和imu标定结果建立camchain.yaml文件和imu.yaml文件

在imu_utils里的data文件夹,完成imu标定时时会多出d435i_imu_param.yaml文件,圈红部分即为需要的数据,而相机标定的yaml文件在Kalibr_ws里的bagfiles里,上图圈红部分是多出来的,我通过多个帖子比对,大概是默认的,在保留原来相机标定yaml文件数据的基础上,直接copy进去。这样完成了camchain.yaml文件和imu.yaml文件的建立。

2、将图像频率降低为20HZ,imu频率设置为200Hz,这里可以用throttle方法,不会出错,并发布新的topic,不会修改原topic:

rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color

rosrun topic_tools throttle messages /camera/gyro/image_info 200.0 /imu

3、录制rosbag包(期间可以通过命令查看是否将两个命令的数据都录制上了,rosbag info /home/messi/kalibr_ws/bagfiles/dynamic.bag)

rosbag record -O dynamic /color /camera/imu(确保录制的话题和发布的要一致,不然会录制不上,可以用rostopic list及时查看)

4、标定

rosrun kalibr kalibr_calibrate_imu_camera --bag ~/kalibr_ws/bagfiles/dynamic.bag --target ~/kalibr_ws/bagfiles/april_6x6_80x80cm.yaml --cam ~/kalibr_ws/bagfiles/camd435i-camchain1.yaml --imu ~/kalibr_ws/bagfiles/imu.yaml  --show-extraction --bag-from-to 50 200

(四)结果评定

kalibr标定多目后会生成标定报告以及标定出的外参值,标定报告会直接给出相机坐标的空间位置示意图,结合标定结果和实际位置比较可以较为直观的判断结果是否可靠;另外就是看重投影误差,这个值越小越好,我的在0.15以下已经是很好的了。内参数的话也可以关注一下,我使用的d435i,标定后双面的内参基本一样,不过和自带/camera_info还是有所区别的,但是不是很大。

 参考:https://blog.csdn.net/qq_36170626/article/details/102998942(收费)

 

 



 

标签:D435i,--,标定,yaml,camera,imu,kalibr
From: https://www.cnblogs.com/Lucius-qiao-RoboMaster/p/17972024

相关文章

  • 相机标定中的四种坐标系
    世界坐标系:代表物体在三维世界里的真实坐标,坐标用(Xw,Yw,Zw)表示,其中的w可以认为是world的缩写。相机坐标系:代表以相机光学中心为原点的坐标,Z轴与光轴重合,坐标用(Xc,Yc,Zc)表示,其中c可以认为是camera的缩写图像坐标系:代表相机拍摄时,在成像平面上使用的坐标系,成像平面和相机光......
  • 光平面标定笔记
    由于......
  • halcon 双目相机标定
    *Applicationprogramtodemonstratethecalibrationof*abinocularstereosystemusingtheoperators*find_caltab,find_marks_and_pose,andbinocular_calibration.**Asanalternative,acalibrationdatamodelcouldbeused.*Pleaserefertotheex......
  • 相机标定原理
    相机标定后可以得到什么?相机的内参矩阵A(dx,dy,r,u,v,f),外参矩阵[R|T]、畸变系数[k1,k2,k3,~,p1,p2,~]。•内参矩阵各元素意义:一个像素的物理尺寸dx和dy,焦距f,图像物理坐标的扭曲因子r,图像原点相对于光心成像点的的纵横偏移量u和v(像素为单位)。•外参矩阵:世界坐标系转换到相机坐标系......
  • halcon 标定
    1.标定板类型  a.Calibrationplatewithhexagonallyarrangedmarks  带有六边形排列标记的校准板    b.Calibrationplatewithrectangularlyarrangedmarks  带有矩形排列标记的校准板 2.标定过程a.准备校准输入数据1.create_calib_data ......
  • Halcon 相机外部参数标定例程一(camera_calibration_external.hdev)
    1.create_calib_data—CreateaHALCONcalibrationdatamodel  创建一个HALCON校准数据模型2.read_cam_par—Readinternalcameraparametersfromafile  从文件中读取相机内部参数  3.set_calib_data_cam_param—Settypeandinitialparametersofa......
  • Halcon (基于镜头中心)协同机械手进行自动标定
    流程使用相机捕捉初始标定点位,记录世界坐标在机器人示教器上基于基准点位进行其余8个点位设置,每次x轴偏移+4或Y轴偏移+4对每个点位进行图像获取编写Halcon脚本,获取9幅图像中点位中心的像素坐标,以及对应算出的机械手世界坐标,导入标定demo获取换算关系。在图像中模拟位置进行验证,此......
  • Halcon 5分钟学会9点标定 带图片示例、示例源码
    9点标定应用流程如果没有9个点,其实只需要一个点就可以,移动机械手,只需将这个点在视野内不同坐标即可,前置条件,相机焦距,视野固定高度和角度,光源光强度固定。移动机械手,使用螺丝批头,在视野范围内的白纸上,点九个点,记录每个点位的位置,每个点位的顺序要和图像上获取的圆心数组顺序一致,此时......
  • [贴装专题] 基于多目视觉的手眼标定
    作者:丶布布一.为什么要进行手眼标定    因为相机知道的是像素坐标,吸嘴是空间坐标系,所以手眼标定目的就是将像素坐标系的坐标和空间机械手坐标系的坐标进行相互转化。在实际控制中,相机检测到目标在图像中的像素位置后,通过标定好的坐标转换矩阵将相机的像素坐标变换到机械手......
  • 智驾数据采集平台搭建之多传感器联合标定
    简介:  在自动驾驶发展如火如荼的今天,L4和L5级的自动驾驶功能依旧处于算法开发和验证的阶段,就无可避免的需要极其庞大的路试数据用以支撑算法的开发和训练,为此,北汇信息为客户提供整套的数采平台解决方案。值得一提的是,在数采平台搭建后,到数据的消费端之前,必须要完成数采平台......