Kalibr标定Intel D435i相机

2023-05-16

Kalibr标定Intel D435i相机

文章目录

  • Kalibr标定Intel D435i相机
    • 1、相机标定
    • 2、IMU标定
    • 3、相机+IMU联合标定
    • 4、标定结果评价

系统环境:ubuntu16.04+roskinetic

需要的基础知识基础:ROS基本知识(如何使当前终端生效,roslaunch文件的编写)

源码安装:kalibr https://github.com/ethz-asl/kalibr.git

Realsense SDK: https://github.com/IntelRealSense/librealsense.git

realsense-ROS: https://github.com/IntelRealSense/realsense-ros.git

1、相机标定

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

roslaunch realsense2_camera rs_camera.launch //打开相机节点
rostopic echo /camera/color/camera_info //查看相机内参

在这里插入图片描述

可以根据官网提供的相机内参验证自己的标定结果。

具体标定流程:

a、准备标定板和标定板的参数文件(以棋盘格标定为例)

具体可参考https://github.com/ethz-asl/kalibr/wiki/downloads

下载Checkerboard 7×6 0.5×0.5m(unscaled)的pdf以及yaml文件。

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

其中-O表示设置的bag包名字,/color为录制的话题的名称。

ctrl+c结束录制,bag文件会自动保存到录制时所在的目录。

c、标定相机

注意:在使用之前对kalibr_workspace source一下,就是之前我提到的需要的基础知识。

单个相机标定(测试成功)

kalibr_calibrate_cameras --target /home/sunshine/d435ibagfiles/checkerboard_7x6_50x50cm.yaml --bag /home/sunshine/d435ibagfiles/camd435i.bag --bag-from-to 26 100 --models pinhole-radtan --topics /color --show-extraction

具体参数解释:

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

多个相机联合标定(没有测试)

kalibr_calibrate_cameras --target src/kalibr/checkerboard.yaml --bag src/kalibr/bag/fisheye_2019-07-15-21-52-12.bag --models pinhole-radtan pinhole-radtan --topics /image_raw1_th /image_raw2_th

可能遇到的问题,在启动这个命令的时候可能遇到缺少一些库,具体要把这些依赖项都安装好,如果你之前就按照官方提供的安装说明应该就没问题。ROS系统是kinetic的话要把下面的indigo改为kinetic.

sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencv ros-indigo-image-transport-plugins ros-indigo-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

sudo pip install python-igraph --upgrade

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

camchain-homesunshined435ibagfilescamd435i.yaml   //主要作用为了后期imu+相机联合标定
report-cam-homesunshined435ibagfilescamd435i.pdf  //以图的方式显示效果
results-cam-homesunshined435ibagfilescamd435i.txt //含有相机的内参以及重投影误差

results-cam-homesunshined435ibagfilescamd435i.txt具体内容

Calibration results 
====================
Camera-system parameters:
	cam0 (/color):
	 type: <class 'aslam_cv.libaslam_cv_python.DistortedPinholeCameraGeometry'>
	 distortion: [ 0.10680349  0.23330173  0.0007527  -0.01424711] +- [0.06332829 0.36042001 0.00826051 0.00888244]
	 projection: [636.2812933  633.32021    301.51496978 244.06377452] +- [ 1.43331881  3.59650713 15.12620104 14.66812844]
	 reprojection error: [0.000011, 0.000030] +- [0.128319, 0.113157]
Target configuration
====================

  Type: checkerboard
  Rows
    Count: 7
    Distance: 0.05 [m]
  Cols
    Count: 6
    Distance: 0.05 [m]

2、IMU标定

1、配置realsense的launch文件,在realsense-ros/realsense2_camera/launch文件夹下,复制rs_camera.launch文件,重命名为rs_imu_calibration.launch文件。修改配置参数

 <arg name="enable_sync"               default="true"/>
 <arg name="unite_imu_method"         value="linear_interpolation"/>   //也可以把“linear_interpolation”修改成"copy"

参考博客:https://blog.csdn.net/qq_41839222/article/details/86552367

https://blog.csdn.net/u012177641/article/details/92824014#commentBox

2、标定imu时需要配置imu_utils和code_utils,下载链接为:

https://github.com/gaowenliang/imu_utils

https://github.com/gaowenliang/code_utils

mkdir catkin_imu_utils
cd catkin_imu_utils
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

可能遇到的问题

code_utils-master/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp: 没有那个文件或目录 compilation terminated.
这个sumpixel_test.hpp 里可以直接换成:
#include "code_utils/backward.hpp"

3、编写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= "100"/>
    </node>
</launch>

具体参数注意

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

4、具体步骤

step1:进入realsense-ros包,开启d435i,发布IMU话题
step2:  录制imu数据包 rosbag record -O imu_calibration /camera/imu
step3: 运行校准程序    roslaunch imu_utils d435i_imu_calibration.launch
step4: 回放数据包      rosbag play -r 20 imu_calibration.bag

可以直接step1->step3在线标定

5、标定结果

在imu_utils/data/d435i_imu_calibration_imu_param.yaml

%YAML:1.0
---
type: IMU
name: d435i_imu_calibration
Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 5.7641536836437718e-02
      gyr_w: 1.6660473467600197e-03
   x-axis:
      gyr_n: 1.6392774317631395e-01
      gyr_w: 4.8477797168896648e-03
   y-axis:
      gyr_n: 6.1062818273645578e-03
      gyr_w: 1.2128782830293989e-04
   z-axis:
      gyr_n: 2.8905855056346572e-03
      gyr_w: 2.9074495087454760e-05
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 1.6327198936085560e-01
      acc_w: 4.5072862611306866e-03
   x-axis:
      acc_n: 5.0218265479090460e-02
      acc_w: 5.9343436346130033e-04
   y-axis:
      acc_n: 6.4732875717275387e-02
      acc_w: 9.4211033888535437e-04
   z-axis:
      acc_n: 3.7486482688620093e-01
      acc_w: 1.1986314081045406e-02

然后将Acc和Gyr的第一组平均数据拷贝到kalibr对应的imu.yml文件中,

rostopic: /camera/imu
update_rate: 200.0 #Hz
 
accelerometer_noise_density: 2.89e-01 #continous
accelerometer_random_walk: 4.55e-04 
gyroscope_noise_density: 3.02e-03 #continous
gyroscope_random_walk: 2.29e-05

3、相机+IMU联合标定

3.1准备条件:根据自己标定的camera结果替换下面的数值,建立camchain.yaml文件

cam0:
  camera_model: pinhole
  intrinsics: [632.9640658678117, 638.2668942402212, 339.9807921782614, 243.68020465500277]
  distortion_model: equidistant
  distortion_coeffs: [0.366041713382057, 1.1433178097591097, -3.008125411486294, -3.1186836086733227]
  T_cam_imu:
  - [0.01779318, 0.99967549,-0.01822936, 0.07008565]
  - [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
  - [0.00893160, 0.01807260, 0.99979678, 0.00399246]
  - [0.0, 0.0, 0.0, 1.0]
  timeshift_cam_imu: -8.121e-05
  rostopic: /color
  resolution: [640, 480]

imu.yaml文件

rostopic: /imu
update_rate: 200.0 #Hz
 
accelerometer_noise_density: 0.01 #continous
accelerometer_random_walk: 0.0002 
gyroscope_noise_density: 0.005 #continous
gyroscope_random_walk: 4.0e-06

3.2标定步骤

1、将图像频率降低为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

2、录制rosbag包

rosbag record -O dynamic /color /imu

3、标定

kalibr_calibrate_imu_camera --target ~/bagfiles/checkerboard.yaml --cam ~/bagfiles/camchain.yaml --imu ~/bagfiles/imu.yaml --bag ~/bagfiles/dynamic.bag --bag-from-to 5 45 --show-extraction

4、标定结果评价

4.1 多目标定评估

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

4.2 IMU+相机联合标定评估

Normalized Residuals
----------------------------
Reprojection error (cam0): mean 0.116388852487, median 0.100494263466, std: 0.115779726566
Reprojection error (cam1): mean 0.118837162459, median 0.102707273927, std: 0.118032053496
Gyroscope error (imu0): mean 0.566382365906, median 0.424566309149, std: 0.541174462645
Accelerometer error (imu0): mean 0.303879126638, median 0.257914882481, std: 0.20381924896
Residuals
----------------------------
Reprojection error (cam0) [px]: mean 0.116388852487, median 0.100494263466, std: 0.115779726566
Reprojection error (cam1) [px]: mean 0.118837162459, median 0.102707273927, std: 0.118032053496
Gyroscope error (imu0) [rad/s]: mean 0.0221873017669, median 0.016631839881, std: 0.0211998145317
Accelerometer error (imu0) [m/s^2]: mean 0.128924994664, median 0.109424017423, std: 0.0864731838454

         而kalibr提供的例程是:

Normalized Residuals
----------------------------
Reprojection error (cam0):     mean 0.142975755445, median 0.130686487357, std: 0.0817972217348
Reprojection error (cam1):     mean 0.139113383779, median 0.129061976876, std: 0.0768758604603
Gyroscope error (imu0):        mean 0.0947751091434, median 0.082773649866, std: 0.0609365033876
Accelerometer error (imu0):    mean 0.363001590633, median 0.285683155402, std: 0.341485432021

Residuals
----------------------------
Reprojection error (cam0) [px]:     mean 0.142975755445, median 0.130686487357, std: 0.0817972217348
Reprojection error (cam1) [px]:     mean 0.139113383779, median 0.129061976876, std: 0.0768758604603
Gyroscope error (imu0) [rad/s]:     mean 0.0067016122363, median 0.00585298091238, std: 0.00430886147672
Accelerometer error (imu0) [m/s^2]: mean 0.0513361772636, median 0.0404016992912, std: 0.0482933329317

参考博客:https://blog.csdn.net/u012177641/article/details/92824014#commentBox

https://blog.csdn.net/kongdaqing1290/article/details/97524087

https://blog.csdn.net/u012177641/article/details/92824014

https://cloud.tencent.com/developer/article/1438368

https://blog.csdn.net/qq_41839222/article/details/86552367

https://blog.csdn.net/weixin_40628128/article/details/95945945

https://blog.csdn.net/weixin_40830684/article/details/88768225

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

Kalibr标定Intel D435i相机 的相关文章

  • 汇编指令“Intel 组”类别源自何处?

    在开发 86 DOS 应用程序的分支期间 lDebug https pushbx org ecm web projects ldebug 我遇到了称为 英特尔组 的指令类别 具体来说 组是指与使用相同 1 或 2 个操作码字节的一组指令相关
  • 运行任何英特尔 AVX 函数后,数学函数需要更多周期[重复]

    这个问题在这里已经有答案了 我注意到数学函数 如 ceil round 等 在运行任何 intel AVX 函数后会占用更多 CPU 周期 请参阅以下示例 include
  • 启用/禁用硬件锁定消除

    我使用的是 glibc 2 24 版本 它包含用于使用事务同步扩展 例如 xbegin 和 xend 实现 pthread mutex lock 的锁省略路径 硬件应该支持锁省略hle我认为CPU标志是为了硬件锁消除 我使用的处理器是采用
  • 为什么存在 REP LODS AL 指令?

    换句话说 在任何情况下我可能需要这个指示吗 根据英特尔指令手册 该指令的作用如下 将 E CX 字节从 DS E SI 加载到 AL 以 NASM 为例 section data src db 0 1 2 3 section code mo
  • 在 Fortran 中传递不连续的数组部分

    我正在使用 intel fortran 编译器和 intel mkl 进行性能检查 我将一些数组部分传递给 Fortran 77 接口 调用如下 call dgemm transa transb sz s P P a Ts tilde sz
  • Windows:Numpy mkl_intel_thread.dll

    经过几个小时的尝试和调查 我已经成功解决了这个问题Numpys mkl intel thread dll文件错误 以下内容可能无法解决所有情况 但我会尝试解释我的特定案例的详细信息 以帮助其他遇到相同问题的人 我的问题 当尝试启动 Anac
  • Intel 64架构中CALLF(Far Call)可以有64位地址内存操作数吗?

    在 Intel 32 位架构中 我可以使用 ModR M 字节调用 32 位地址位置 根据英特尔手册 我需要 2 010B 用于操作码扩展 00B 用于 Mod 101B 允许我拥有 32 位位移 如果我想在 64 位架构中进行远调用 以便
  • 模拟器:错误:x86 模拟当前需要硬件加速

    我尝试在 Android Studio 中运行我的 Hello World 应用程序 我收到以下错误 模拟器 错误 x86 模拟当前需要硬件 加速 请确保英特尔 HAXM 已正确安装且可用 CPU加速状态 HAX内核模块未安装 你能告诉我如
  • Intel HD 3700 linux 的 Java 8 Swing 渲染问题

    我在 Kubuntu 18 04 中用 java 8 update 181 开发了一个应用程序 在我的开发 PC 中 我拥有配备英特尔 HD Graphics 530 的英特尔 i3 6100 所有图形均使用 swing 完成 并且通过此硬
  • 循环地址对齐如何影响 Intel x86_64 上的速度?

    我发现相同的 C 代码编译为完全相同的机器指令但位于不同对齐的地址时性能下降了 15 当我的小主循环从 0x415220 开始时 它比从 0x415250 开始时要快 我在 Intel Core2 Duo 上运行它 我在 x86 64 Ub
  • 写组合缓冲区位于哪里? x86

    Write Combine 缓冲区在物理上是如何连接的 我见过说明许多变体的框图 L1 和内存控制器之间 CPU 的存储缓冲区和内存控制器之间 CPU 的 AGU 和 或存储单元之间 它依赖于微架构吗 写缓冲区在不同的处理器中可以有不同的目
  • Intel x86 与 AMD x86 CPU 上的访问性能不一致

    我已经实现了一个带有结构内存布局数组的简单线性探测哈希图 该结构包含键 值和指示条目是否有效的标志 默认情况下 该结构体由编译器填充 因为键和值是 64 位整数 但该条目仅占用 8 个布尔值 因此 我也尝试以未对齐访问为代价来打包结构 由于
  • DRAM 访问的性能计数器

    我想找回DRAM 存取次数在我的应用程序中 准确地说 我需要区分数据和代码访问之间 该处理器是一个Intel R Core TM i7 4720HQ CPU 2 60GHz Haswell 基于英特尔软件开发人员手册 第 3 卷 https
  • OpenCL 在调用 clGetPlatformIDs 时崩溃

    我是 OpenCL 新手 在配备 Intel R HD Graphics 4000 运行 Windows 7 的 Core i5 计算机上工作 我安装了支持 OpenCL 的最新 Intel 驱动程序 GpuCapsViewer 确认我有
  • 在 MacOS 10.6 (Snow Leopard) 上安装 Intel 的 TBB 3.0 框架

    我在 MacOS 系统上安装英特尔线程构建模块 TBB 3 0 作为框架时遇到了一些问题 有谁知道一个好的教程吗 我尝试过使用 MacPorts 它有 TBB 2 2 它安装了我需要的所有库 但我没有得到框架 另外 Intel 网站上似乎没
  • C#:TurboBoost 激活时如何获取 Intel i 系列 CPU 的当前时钟速度

    我知道有可能获得此信息 Intel 自己的 TurboBoost 侧边栏小工具似乎使用 ActiveX 控件来确定 TurboBoost 处于活动状态时 i3 i5 i7 CPU 的当前时钟速度 但是 我想在 C 中以编程方式执行此操作 从
  • 哪种架构称为非均匀内存访问(NUMA)?

    根据wiki http en wikipedia org wiki Non uniform memory access 非均匀内存访问 NUMA 是一种用于多处理的计算机内存设计 其中内存访问时间取决于相对于处理器的内存位置 但尚不清楚它是
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v
  • 如何阅读英特尔操作码符号

    我正在阅读一些引用的材料Intel vol 2 SDM x86 手册 https www intel com content www us en developer articles technical intel sdm html关于汇编
  • 在编译行中添加“-march=native”intel 编译器标志会导致 KNL 上出现浮点异常

    我有一个代码 我在 Intel Xeon Phi Knights Landing KNL 7210 64 核 处理器 它是一台 PC 处于本机模式 上启动 并使用 Intel c 编译器 icpc 版本 17 0 4 我还在Intel co

随机推荐

  • vue3源码分析(三)—— 响应式系统(reactivity)

    系列文章目录 目录分析初始化流程响应式系统shared工具函数 文章目录 系列文章目录前言一 定义响应式数据1 reactive target 2 createReactiveObject2 1 入参2 2 响应式创建过程2 3 proxy
  • vue3源码分析(四)—— shared工具函数

    系列文章目录 目录分析初始化流程响应式系统shared工具函数 文章目录 系列文章目录前言1 数组中移除某元素2 字符串转数字3 转为字符串4 判定值是否发生改变5 判定数据类型5 1 数组5 2 Map5 3 Set5 4 Date5 5
  • 如何将两个rosbag包合并或者提取rosbag包中某些话题到一个rosbag里

    代码叫做merge bag py 运行的时候 python merge bag py v 1028msf bag msf bag vinReNoOutlier bag 就把msf bag和vinReNoOutlier bag完全合并在一起了
  • 解决 vscode中js变量 文件不能自动跳转问题~

    项目场景 xff1a 在项目开发中 xff0c 为了便于理解js代码逻辑和调试 xff0c 通常会使用快捷键自动定位到变量原始定义的文件位置 mac中快捷键 xff1a command 43 鼠标点击 但在vue项目开发中 xff0c 发现
  • vue3源码分析(二)—— 初始化流程

    系列文章目录 目录分析初始化流程响应式系统shared工具函数 文章目录 系列文章目录前言一 createApp在项目中的使用二 createApp源码追溯1 创建app实例1 1 ensureRenderer1 2 ensureRende
  • JS基础 ——解释执行

    文章目录 前言一 词法分析二 预编译创建全局作用域GO对象创建局部作用域AO对象 三 代码执行总结 前言 大家都知道 xff0c JS是一种不需要编译的解释型语言 但其实在浏览器执行JS代码前 xff0c 也有一个词法分析和预编译过程 xf
  • vue 项目中引入字体文件的正确方式~

    文章目录 前言一 开发中需要什么样的字体1 字体图标2 特殊字体 二 项目中引入字体文件1 字体文件2 css文件3 项目使用该字体 总结 前言 在UI设计稿中 xff0c 可能会有一些特殊字体 xff0c 或者是一些字体图标 对于特殊字体
  • vue3 使用 swiper轮播库

    文章目录 前言一 Swiper引入方式1 HTML标签引入方式2 CommonJs引入方式3 ES引入方式 xff08 采用 xff09 二 使用Swiper总结 前言 轮播图在前端开发中 xff0c 是常见需求 而Swiper库是最受前端
  • vue-cli2 老项目webpack3升级webpack5过程总结

    文章目录 背景一 webpack5环境要求二 升级步骤1 脚手架webpack cli2 升级webpack包3 更新webpack相关插件3 1 不推荐或被移除的插件3 2 升级babel到7版本3 3 更新插件 4 修改配置4 1 新增
  • 前端下载文件

    文章目录 前言二进制流前端核心实现下载功能有 xff1a 一 a标签 43 download属性二 window open url 34 blank 34 三 form表单四 接口请求 43 blob 43 a标签 43 download属
  • 前端JS 云打印 LODOP实践

    文章目录 前言一 Lodop是什么 xff1f 二 如何使用Lodop1 下载打印插件2 配置打印机3 html中植入打印控件4 调用Lodop对应的JS相关方法接口实现打印功能 三 Lodop主要方法接口三 注意点总结 前言 一般B S系
  • axios源码——工具函数utils.js

    文章目录 前言一 工具函数所在目录二 判定数据类型的函数1 isArray 判定数组 2 isString 判定字符串 3 isNumber 判定数值 4 isObject 判定对象 5 isPlainObject 判定纯对象 6 isUn
  • 源码阅读——validate-npm-package-name

    文章目录 前言一 源码阅读工具二 阅读源码1 目录结构2 package json3 index js 三 使用该包1 vue cli中使用2 create react app 中使用 总结 前言 validate npm package
  • 学习rtklib

    数据下载 日期转换和一些常用数据下载 http www gnsscalendar com index html year 61 2019 多系统精密星历和精密钟差下载 2021年10月25日更新 xff1a 单GPS精密星历文件要在这里下载
  • echarts 绘制多条折线图(横坐标,折线图条数不确定)

    项目场景 xff1a 使用echarts做业务图表统计 xff0c 记录一下在项目中图表接口返回的数据处理问题 需求描述 1 一个统计图中实现多条折现图的显示 xff0c 如下图所示 2 后台返回的数据结构 span class token
  • 线性二次型调节器(LQR)原理详解

    文章目录 前言算法解释代价函数的意义 推导过程可控性LQR控制实例参考资料 前言 LQR Linaer Quadratic Regulator xff0c 即线性二次型调节器 xff0c 是一种现代控制理论中设计状态反馈控制器 State
  • 嵌入式软件工程师常见面试问题

    嵌入式软件工程师面试题 1 stm32启动方式 xff1f 有三种 xff1a 从Flash启动 xff0c 将Flash地址0x0800 0000映射到0x00000000 这样启动以后就相当于从0x0800 0000开始的 xff0c
  • 使用python爬虫把自己的CSDN文章爬取下来并保存到MD文件

    导言 爬虫作为一个敏感技术 xff0c 千万要把握好 xff0c 如果人家不让爬那就不要头铁去试了 如何确定某个网站是否允许爬虫 在域名后面加上 robots txt查看即可 xff0c 例如 xff1a https blog csdn n
  • 寻找矩阵中的指定路径

    给定一个矩阵和一个要找的字符串 xff0c 如果有的话找出矩阵中的字符串路径 测试用例 功能测试 xff1a 在多行多列的矩阵中存在或者不存在路径 边界值测试 xff1a 矩阵只有一行或一列 xff1b 矩阵和路径中的所有字母都是相同的 特
  • Kalibr标定Intel D435i相机

    Kalibr标定Intel D435i相机 文章目录 Kalibr标定Intel D435i相机1 相机标定2 IMU标定3 相机 43 IMU联合标定4 标定结果评价 系统环境 xff1a ubuntu16 04 43 roskineti