VINS-DUAL 测试(小觅相机)

2023-05-16

设置小觅相机参数

直接从小觅相机内部获取各种参数,把小觅相机给的SDK编译好后,找到以下路径中生成的可执行文件

MYNT-EYE-D-SDK/samples/_output/bin

直接执行下面两个文件:

./get_imu_params
./get_image_params

此时在当前路径下生成两个后缀为 .params 的文本文件

根据跑 Euroc 的经验,我们需要获取的参数是(截图自 euroc_config.yaml 文件):
请添加图片描述
然而,我们从小觅相机中获取的数据为
左相机到右相机之间的旋转和平移关系 R l r R_l^r Rlr t l r t_l^r tlr
左相机到IMU之间的旋转和平移关系 R l i R_l^i Rli t l i t_l^i tli
意思是 我们需要求解 R r i R_r^i Rri t r i t_r^i tri
(其中 t l r t_l^r tlr t l i t_l^i tli t r i t_r^i tri 3 × 1 3\times 1 3×1的列向量)
可以通过以下公式描述上述关系

[ R l r t l r 0 1 ] = [ R r i t r i 0 1 ] − 1 [ R l i t l i 0 1 ] \left[ \begin{array}{cc} R_l^r & t_l^r \\ 0 & 1 \end{array} \right] = \left[ \begin{array}{cc} R_r^i & t_r^i \\ 0 & 1 \end{array} \right]^{-1} \left[ \begin{array}{cc} R_l^i & t_l^i \\ 0 & 1 \end{array} \right] [Rlr0tlr1]=[Rri0tri1]1[Rli0tli1]
使用一个python脚本算一下:

import numpy as np

R_rl = np.array([
    [0.99989593029022217, -0.00441348552703857, -0.01373481750488281], 
    [0.00438022613525391, 0.99998736381530762, -0.00244581699371338], 
    [0.01374542713165283, 0.00238549709320068, 0.99990260601043701]
    ]).astype(float)
t_rl = np.array([-120.27870941162109375*0.001, 0.00000000000000000, 0.00000000000000000]).astype(float)


T_rl = np.zeros([4,4]).astype(float)
T_rl[0:3,0:3] = R_rl
T_rl[0:3,3] = t_rl
T_rl[3,3] = float(1)

R_il = np.array([
    [0.99996651999999997, 0.00430873000000000, 0.00695718000000000], 
    [0.00434878000000000, -0.99997400999999997, -0.00575128000000000], 
    [0.00693222000000000, 0.00578135000000000, -0.99995926000000002]
    ]).astype(float)
t_il = np.array([-47.77362000000000108*0.001, -2.23730999999999991*0.001, -1.60071000000000008*0.001]).astype(float)

T_il = np.zeros([4,4]).astype(float)
T_il[0:3,0:3] = R_il
T_il[0:3,3] = t_il
T_il[3,3] = float(1)

T_ir_inv = np.dot(T_rl, np.linalg.inv(T_il))
T_ir = np.linalg.inv(T_ir_inv)

print(T_ir)

# Motion Intrinsics: {accel: {scale: [1.00714999814528117, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00764000000000009, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00417000000000001], assembly: [1.00000000000000000, -0.00067702800000000, 0.00029412800000000, 0.00000000000000000, 1.00000000000000000, 0.00646412000000000, -0.00000000000000000, 0.00000000000000000, 1.00000000000000000], drift: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], noise: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], bias: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], x: [0.00412313300000000, -0.00011329890000000], y: [0.00927127780000000, -0.00013050414000000], z: [0.01740089710000000, -0.00004611135500000]}, gyro: {scale: [0.99681200000000003, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 0.99685199999999996, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 0.99445200000000000], assembly: [1.00000000000000000, -0.00521334000000000, -0.00060721600000000, 0.00612016000000000, 1.00000000000000000, 0.00764685000000000, 0.00281205000000000, -0.00986672000000000, 1.00000000000000000], drift: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], noise: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], bias: [0.00000000000000000, 0.00000000000000000, 0.00000000000000000], x: [0.50698715429999996, -0.01063148400000000], y: [0.39468408640000002, -0.00773029620000000], z: [-0.18057246162999999, -0.00114695160000000]}}
# Motion Extrinsics left to imu: {rotation: [0.99996651999999997, 0.00430873000000000, 0.00695718000000000, 0.00434878000000000, -0.99997400999999997, -0.00575128000000000, 0.00693222000000000, 0.00578135000000000, -0.99995926000000002], translation: [-47.77362000000000108, -2.23730999999999991, -1.60071000000000008]}

# VGA Intrinsics left: {width: [640], height: [480], fx: [519.80944824218750000], fy: [519.35339355468750000], cx: [317.36367797851562500], cy: [240.04396057128906250], coeffs: [0.02751922607421875, -0.03797149658203125, -0.00048065185546875, -0.00146865844726562, 0.00000000000000000], p: [540.00000000000000000, 0.00000000000000000, 302.95776367187500000, 0.00000000000000000, 0.00000000000000000, 540.00000000000000000, 247.39123535156250000, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00000000000000000, 0.00000000000000000], r: [0.99994635581970215, 0.00022053718566895, 0.01035428047180176, -0.00020790100097656, 0.99999916553497314, -0.00121951103210449, -0.01035451889038086, 0.00121736526489258, 0.99994564056396484]}
# VGA Intrinsics right: {width: [640], height: [480], fx: [517.09716796875000000], fy: [516.94146728515625000], cx: [315.47244262695312500], cy: [254.48048400878906250], coeffs: [0.02334594726562500, -0.03065109252929688, 0.00072479248046875, -0.00186157226562500, 0.00000000000000000], p: [540.00000000000000000, 0.00000000000000000, 302.95776367187500000, -64980.50390625000000000, 0.00000000000000000, 540.00000000000000000, 247.39123535156250000, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00000000000000000, 0.00000000000000000], r: [0.99969911575317383, 0.00457525253295898, 0.02409851551055908, -0.00460469722747803, 0.99998867511749268, 0.00116312503814697, -0.02409303188323975, -0.00127363204956055, 0.99970889091491699]}
# VGA Extrinsics left to right: {rotation: [0.99989593029022217, -0.00441348552703857, -0.01373481750488281, 0.00438022613525391, 0.99998736381530762, -0.00244581699371338, 0.01374542713165283, 0.00238549709320068, 0.99990260601043701], translation: [-120.27870941162109375, 0.00000000000000000, 0.00000000000000000]}
# HD Intrinsics left: {width: [1280], height: [720], fx: [1042.07275390625000000], fy: [1041.41284179687500000], cx: [641.40972900390625000], cy: [363.59826660156250000], coeffs: [0.01922988891601562, -0.01678848266601562, 0.00020599365234375, 0.00019454956054688, 0.00000000000000000], p: [1052.09997558593750000, 0.00000000000000000, 591.21838378906250000, 0.00000000000000000, 0.00000000000000000, 1052.09997558593750000, 363.12438964843750000, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00000000000000000, 0.00000000000000000], r: [0.99961113929748535, -0.00814092159271240, 0.02666985988616943, 0.00814664363861084, 0.99996674060821533, -0.00010359287261963, -0.02666819095611572, 0.00032079219818115, 0.99964427947998047]}
# HD Intrinsics right: {width: [1280], height: [720], fx: [1033.11401367187500000], fy: [1032.40722656250000000], cx: [633.47186279296875000], cy: [362.29101562500000000], coeffs: [0.02237701416015625, -0.02913665771484375, 0.00073623657226562, -0.00110626220703125, 0.00000000000000000], p: [1052.09997558593750000, 0.00000000000000000, 591.21838378906250000, -129621.76562500000000000, 0.00000000000000000, 1052.09997558593750000, 363.12438964843750000, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 1.00000000000000000, 0.00000000000000000], r: [0.99929559230804443, -0.00355386734008789, 0.03735816478729248, 0.00354599952697754, 0.99999356269836426, 0.00027847290039062, -0.03735888004302979, -0.00014579296112061, 0.99930179119110107]}
# HD Extrinsics left to right: {rotation: [0.99993216991424561, -0.00460124015808105, -0.01069486141204834, 0.00459778308868408, 0.99998927116394043, -0.00034415721893311, 0.01069629192352295, 0.00029492378234863, 0.99994266033172607], translation: [-119.82902526855468750, 0.00000000000000000, 0.00000000000000000]}

# Final Output

# [[ 9.99747887e-01  8.67180456e-03  2.07117616e-02  7.24747656e-02]
#  [ 8.84062436e-03 -9.99928361e-01 -8.07628400e-03 -1.17397111e-03]
#  [ 2.06402297e-02  8.25745744e-03 -9.99752944e-01  8.81870194e-04]
#  [ 0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00]]

然后将其整理成

#Rotation from camera0 frame to imu frame, imu^R_cam
extrinsicRotation0: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [0.99996651999999997, 0.00430873000000000, 0.00695718000000000, 
             0.00434878000000000, -0.99997400999999997, -0.00575128000000000, 
             0.00693222000000000, 0.00578135000000000, -0.99995926000000002]
#Translation from camera0 frame to imu frame, imu^T_cam
extrinsicTranslation0: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [-0.04777362000000000108, -0.00223730999999999991, -0.00160071000000000008]

#Rotation from camera1 frame to imu frame, imu^R_cam
extrinsicRotation1: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [9.99747887e-01,  8.67180456e-03,  2.07117616e-02,
           8.84062436e-03, -9.99928361e-01, -8.07628400e-03,
          2.06402297e-02,  8.25745744e-03, -9.99752944e-01]
#Translation from camera1 frame to imu frame, imu^T_cam
extrinsicTranslation1: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [7.24747656e-02,-1.17397111e-03,8.81870194e-04]

(在计算的时候,误以为 numpy 中 * 和 dot 都是矩阵乘法的运算,但实际上 * 是逐个元素对应相乘,dot 才是矩阵乘法)

在粘贴上面的配置信息到 yaml 文件中时,发现 OpenCV 在解析 配置文件时总是报错,反复对比官方给的配置文件后,终于发现是 缩进没有到位的 问题。

查找 yaml 的语法后,总结以下规则:
规则一:缩进
yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键
规则二:冒号
yaml:
mykey: my_value
每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
规则三:短横线
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

(小觅相机官方文档链接:http://doc.myntai.com/resource/sdk/mynt-eye-sdk-guide-2.0.1-rc0-html-zh-Hans/mynt-eye-sdk-guide-2.0.1-rc0-html-zh-Hans/src/mynteye/contents.html)
(备忘:Euroc 的图像尺寸:752x480)

做完了上面的步骤,在小觅相机上试了一下,效果不容乐观

又测试了下 VINS-Fusion,还是官方的效果好

经过上面的尝试,准备使用小觅发布 VINS-Fusion 来继续开发了

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

VINS-DUAL 测试(小觅相机) 的相关文章

  • 给我时间

    Jenifer Tell 39 ment de gens veulent Tell 39 ment tre aim s Pour se donner peuvent Tout abandonner Tellement d 39 erreur
  • Docker 查看Image镜像的Dockerfile方法

    Dokcer中使用的Image镜像可能别人写好 xff0c 我们下载来直接使用 xff0c 但有些情况可能不能满足我们的需求 xff0c 那就需要修改镜像 xff0c 一般可以通过在容器中修改 xff0c 之后在生成镜像 xff0c 但有时
  • (三)ROS上位机与stm32进行串口通信

    ROS上位机与stm32进行串口通信 1 1 ROS发送数据1 2 stm32接收数据2 1 stm32发送数据2 2 ROS接收数据上位机串口初始化文件代码下位机stm32的串口配置代码 总代码在文末 xff0c 需要完整的工程文件可以留
  • 智能车摄像头算法——寻线

    寻线 1 灰度图像二值化2 找边线3 获得中线 1 灰度图像二值化 如果使用的是小钻风摄像 xff08 二值化摄像头 xff09 xff0c 就不用再进行软件二值化 使用灰度摄像头 xff0c 就需要这步 以下展示常用的大津法 xff08
  • 【Vue】在vue中命名的时候会遇到 component name “index“ should always be multi-word的解决方案

    Vue 在vue中命名的时候会遇到 component name index should always be multi word的解决方案 文章目录 Vue 在vue中命名的时候会遇到 component name 34 index 3
  • docker容器和镜像的停止和删除

    文章目录 docker容器和镜像的停止和删除1 列出所有docker镜像2 查看正在运行的 或所有的docker容器3 停止所有容器4 删除所有容器5 删除所有镜像通过 image name 删除单个镜像通过 image id 删除单个镜像
  • Windows上应用Docker容器技术的动态代码测试

    转载自维克多汽车技术 xff08 上海 xff09 有限公司 xff0c 作者Vector China 随着软件项目复杂度的提升和不可控的团队资源变更 xff0c 研发组织对DevOps部署的灵活性 可快速迁移和适配CI CD的迭代提出了更
  • 写学术论文的一些感想

    我自己写得是真差 xff01 虽然和我英语程度低有一定的关系 xff0c 最重要的是没有这个基础的底蕴和不明白自己做的东西的意义 所以来总结一下关于学术论文的想法 1 最基础的 xff0c 最重要的 xff0c 你要做出东西来 xff0c
  • kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手入门常见问题解决方案教程

    logo png 1 驱动安装问题 答 xff1a 驱动程序安装问题通常是由防病毒软件引起的 在驱动程序安装期间 xff0c 常见问题是无法安装枚举服务 解决方案 xff1a 确保您的防病毒软件已关闭 xff0c 然后再次安装驱动程序 2
  • 图解git使用

    1 基本用法 上面的四条命令在工作目录 暂存目录 也叫做索引 和仓库之间复制文件 git add em files em 把当前文件放入暂存区域 对比stage和working dir xff0c 如果有改变就增加 xff1b 如果没有改变
  • Docker容器 - DockerFile详解

    目录 DockerFile 一 是什么 二 构建步骤 DockerFile构建过程 一 DockerFile基础 二 Docker执行DockerFile的流程 三 总结 DockerFile常用保留字 零 参考Tomcat的DockerF
  • Docker网络 - docker network详解

    目录 是什么 一 Docker不启动时默认的网络情况 二 Docker启动时的网络情况 能干什么 常用基本命令 一 ls 1 no trunc 2 DRIVER 3 ID 4 format 二 create 三 rm 四 inspect 五
  • 时间划过的伤痕叫成长

    我要用代码敲出整个世界 也许刚看这句话的时候 很多人都嗤之以鼻 太自大太高傲了 但这是我梦想也是我目标 我出生在一个小县城的普通家庭里 经济状况也只能解决温饱 上高中的时候我就没想着要读大学 我很贪玩 几乎都是和一群 34 狐朋狗友 34
  • CMD终端中一些常用的快捷键

    1 使用键盘上的 xff0c 可以快速定位到上一次执行的命令 2 使用键盘上的tab键 xff0c 可以快速补全路径 3 使用键盘上的esc键 xff0c 能够快速清空当前已经输入的命令 4 输出cls命令 xff0c 可以清空终端
  • github在线简历

    github在线简历 对于找工作 xff0c 不论是对校招还是社招的来说 xff0c 在线简历这个东西还是比较加分的 xff0c 可以让hr和面试官 xff0c 看到你更多的东西 xff0c 比如你的个人项目之类的 xff0c 还是挺不错的
  • nrm ls不显示星号

    npmi切换依赖 xff0c 使用nrm ls命令查看当前下载以来的地址看不到是哪一个 nrm是什么 xff1a nrm 是npm常用镜像源管理工具 xff0c 方便本地切换npm的镜像源 xff0c 因为我们在安装依赖的时候 xff0c
  • npm i安装依赖报错,npm ERR! code EPERM npm ERR! syscall unlink,errno -4048

    我的项目是公司内网的react项目 xff0c 安装依赖的时候报错 xff0c 报错信息如下 解决方案 xff1a 1 删除 npmrc文件 他的位置不是nodejs安装目录npm模块下的那个npmrc文件 而是在C Users 账户 下的
  • element对话框遮罩层和弹出内容样式优先级错误

    代码 加入 append to body 61 34 true 34 就可以了 span class token operator lt span el span class token operator span dialog span
  • van2的弹窗自定义事件

    今天帮别人解决了一个移动端的van2的弹窗自定义事件就记录一下 现在国内开发大多数还是已vue为主 xff0c vue3已经比较火热 xff0c 但是对比vue2来讲 xff0c vue2更加稳定 xff0c 以及一些老项目还是用的vue2
  • svg图形绘画

    最近是在整理项目交接工作的时候 xff0c 把之前遇到的问题难点给找出来 xff0c 梳理一下 这个是做svg画布组态项目遇到的问题 目前组态项目中是使用ts文件 xff0c 定义组态类型和格式 xff0c 将不同的组件渲染在画布以及列表上

随机推荐