双目+IMU标定详细流程、相关文件格式说明分析【T265为例】

2023-05-16

最近做一个无人机避障的项目,无人机上面安装了机载电脑,通过笔记本电脑进入机载电脑的桌面,使用提前写好地脚本运行VIO、路径规划、飞控和相机启动,在RVIZ中观察建图、定位和航迹点,并通过鼠标在地图上设置目标点,无人机即可自主前往。

本文主要描述一下机载传感器T265的远程标定流程,供日后参考:

一、基本情况

二、具体操作

1、录制并标定imu(realsense的launch文件已经修改好,环境也都配置好了)

2、录制双目与联合标定所需bag

3、kalibr做双目标定

4、kalibr做联合标定

5、标定完成

6、参考文章

一、基本情况

1)注意:本文是只是提纲式的描述了关键步骤和代码,我还写了一个D455远程标定的文章,感兴趣的话可以看看:D455远程标定详细步骤,使用kalibr、imu_utils两个开源工具_全日制学生混的博客-CSDN博客

2)笔记本电脑和机载电脑通过外置天线互联,通过ifconfig可以查找到地址

3)可以使用ssh或Nomachine进入机载电脑,这里为了可视化,我使用了后者

4)基本思路是:无人机录制bag,然后用无线传输把bag传到主机中运行标定程序,将标定结果再放到机载电脑的程序里(这样确实繁琐,但是在此项目中,考虑到批量部署和网络原因,这是目前我能找到的最好方法)

5)一些基本命令:april_6x6.yaml

sudo apt install net-tools    //网络工具
ifconfig	//找到飞机的ip地址
ssh a@192.168.168.165	//查看远程命令窗口
ping 192.168.168.165	//查看延迟
scp a@192.168.168.165:/home/a/Downloads/autoFlight-master.zip .	//拷贝文件到当前文件夹
rs-enumerate-devices -c   //查看相机出厂标定参数

6)标定板文件格式:

#example for aprilgrid
  target_type: 'aprilgrid' #gridtype
  tagCols: 6                  #number of apriltags
  tagRows: 6                  #number of apriltags
  tagSize: 0.088              #size of apriltag, edge to edge [m]
  tagSpacing: 0.3             #ratio of space between tags to tagSize
                              #example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]

#example for checkerboard
#  targetType: 'checkerboard' #gridtype
#  targetCols: 6              #number of internal chessboard corners
#  targetRows: 7              #number of internal chessboard corners
#  rowsMetricSize: 0.06       #size of one chessboard square [m]
#  colsMetricSize: 0.06       #size of one chessboard square [m]

7) rs_t265.launch文件(更改发布话题、时间戳合并后)

<!--
Important Notice: For wheeled robots, odometer input is a requirement for robust
and accurate tracking. The relevant APIs will be added to librealsense and
ROS/realsense in upcoming releases. Currently, the API is available in the
https://github.com/IntelRealSense/librealsense/blob/master/third-party/libtm/libtm/include/TrackingDevice.h#L508-L515.
-->
<launch>
  <arg name="serial_no"           default=""/>
  <arg name="usb_port_id"         default=""/>
  <arg name="device_type"         default="t265"/>
  <arg name="json_file_path"      default=""/>
  <arg name="camera"              default="camera"/>
  <arg name="tf_prefix"           default="$(arg camera)"/>

  <arg name="fisheye_width"       default="848"/> 
  <arg name="fisheye_height"      default="800"/>
  <arg name="enable_fisheye1"     default="true"/>
  <arg name="enable_fisheye2"     default="true"/>

  <arg name="fisheye_fps"         default="-1"/>

  <arg name="gyro_fps"            default="-1"/>
  <arg name="accel_fps"           default="-1"/>
  <arg name="enable_gyro"         default="true"/>
  <arg name="enable_accel"        default="true"/>
  <arg name="enable_pose"         default="true"/>

  <arg name="enable_sync"           default="true"/>

  <arg name="linear_accel_cov"      default="0.01"/>
  <arg name="initial_reset"         default="false"/>
  <arg name="reconnect_timeout"     default="6.0"/>
  <arg name="unite_imu_method"      default="linear_interpolation"/>

  <arg name="publish_odom_tf"     default="true"/>
  
  <group ns="$(arg camera)">
    <include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
      <arg name="tf_prefix"                value="$(arg tf_prefix)"/>
      <arg name="serial_no"                value="$(arg serial_no)"/>
      <arg name="usb_port_id"              value="$(arg usb_port_id)"/>
      <arg name="device_type"              value="$(arg device_type)"/>
      <arg name="json_file_path"           value="$(arg json_file_path)"/>

      <arg name="enable_sync"              value="$(arg enable_sync)"/>

      <arg name="fisheye_width"            value="$(arg fisheye_width)"/>
      <arg name="fisheye_height"           value="$(arg fisheye_height)"/>
      <arg name="enable_fisheye1"          value="$(arg enable_fisheye1)"/>
      <arg name="enable_fisheye2"          value="$(arg enable_fisheye2)"/>

      <arg name="fisheye_fps"              value="$(arg fisheye_fps)"/>
      <arg name="gyro_fps"                 value="$(arg gyro_fps)"/>
      <arg name="accel_fps"                value="$(arg accel_fps)"/>
      <arg name="enable_gyro"              value="$(arg enable_gyro)"/>
      <arg name="enable_accel"             value="$(arg enable_accel)"/>
      <arg name="enable_pose"              value="$(arg enable_pose)"/>

      <arg name="linear_accel_cov"         value="$(arg linear_accel_cov)"/>
      <arg name="initial_reset"            value="$(arg initial_reset)"/>
      <arg name="reconnect_timeout"        value="$(arg reconnect_timeout)"/>
      <arg name="unite_imu_method"         value="$(arg unite_imu_method)"/>

      <arg name="publish_odom_tf"          value="$(arg publish_odom_tf)"/>
    </include>
  </group>
</launch>

二、具体操作

1、录制并标定imurealsenselaunch文件已经修改好,环境也都配置好了)

注意,在标定imu时,播放bag是可以加速的,不要傻乎乎的在机载电脑上录2h,然后再在笔记本电脑上再播放两个小时。加速的倍数根据你的电脑配置做调整,我的笔记本(拯救者r9000p)播放到1000倍速都没问题的。

//录制
rosbag record /imu/data -o imu_uav.bag –duration=2h
scp a@192.168.168.165:/home/a/imu_uav.bag .	拷贝bag到主机

//启动标定程序
roslaunch imu_utils t265_imu.launch
rosbag play -r 100 imu_uav.bag 一百倍速度播放

//参考链接
https://blog.csdn.net/CGJustDoIT/article/details/108081840

2、录制双目与联合标定所需bag

需要提前改好rs_t265.launch 主要更改:鱼眼相机话题发布、imu_unit => copy(imu标定的时候是linear..),把同步打开  <arg name="enable_sync"   default="true"/>

录制bag的时候加了一个duration参数,因为我一个人标定,点鼠标之后再拿起无人机标定,然后再放下无人机点退出录制有些手忙脚乱,所以就直接限定了录制时间,然后在kalibr做标定的时候,只需要使用 “--bag-from-to 10 95” 掐头去尾即可。

// 修改发布频率和话题名称:
rosrun topic_tools throttle messages /camera/fisheye1/image_raw 20.0 /fisheye1
rosrun topic_tools throttle messages /camera/fisheye2/image_raw 20.0 /fisheye2
rosrun topic_tools throttle messages /camera/imu 200.0 /imu

//录制
rosbag record -O imu_cameras_calibration /fisheye1 /fisheye2 /imu -duration=100

//拷贝过来
scp a@192.168.168.165:/home/a/workspace/uav_ws/imu_cameras_calibration.bag .

//至此就没有机载电脑什么事了,标定程序就在笔记本电脑上启动了
//到时候只需要把标定结果放到机载电脑里就行

3、kalibr做双目标定

下面这行命令处理最基本的语句,还加了修饰:显示提取过程、增加对于不同步时间戳的容忍程度;关于这个容忍程度,加它的原因是,我们的双目相机两帧图像不是完全对齐的,所以要加一个,如果你的相机不加就能对齐那就不加,即使加了,你也不要把这个容忍程度改的太宽,否则会导致相隔几帧的左右目图像匹配到一起,轻则误差大,重则标定不收敛。

rosrun kalibr kalibr_calibrate_cameras --target ./april_6x6.yaml --bag ./imu_cameras_calibration.bag --bag-from-to 10 95 --models omni-radtan omni-radtan --topics /fisheye1 /fisheye2 --approx-sync 0.04 -show-extraction

4、kalibr做联合标定

单独标定了IMU和双目后,接下来就是标定一下二者之间的外参,这一步需要把之前的标定结果放到这一步的执行目录中。需要注意的是,相机的标定输出结果(那个.yaml文件)可以直接拿来用,而IMU的标定由于用的是imu_utils,需要把结果整理成kalibr能够识别的格式。

rosrun kalibr kalibr_calibrate_imu_camera --target ./april_6x6.yaml  --cam ./imu_cameras_calibration-camchain.yaml --imu ./imu.yaml --bag ./imu_cameras_calibration.bag --bag-from-to 10 95  --show-extraction

5、标定完成

标定结束后,就可以得到IMU、双目和联合的参数 

图 标定时的界面

图 相机标定结果

 图IMU标定结果

6、参考文章

1:https://www.jianshu.com/p/194d6c9ef9a4

2:bmi055 标定_Ubuntu16.04+RealsenseT265跑通VINS-Fusion_之死的博客-CSDN博客

3:Kalibr 之 Camera-IMU 标定 (总结)_晨光ABC的博客-CSDN博客_kalibr标定

4:双目相机与IMU联合标定_合工大机器人实验室的博客-CSDN博客_双目相机和imu联合标定

5:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

6:Intel Realsense T265使用教程_熊猫飞天的博客-CSDN博客_t265

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

双目+IMU标定详细流程、相关文件格式说明分析【T265为例】 的相关文章

  • VAE(变分自动编码器)

    首先先贴上一些有用的链接 xff1a https www cnblogs com king lps p 8477300 html https zhuanlan zhihu com p 29685634 再补充一个链接 xff1a https
  • 视频去噪资料整理(深度学习方法)

    近几天做了一些视频去噪的一些边缘工作 xff0c 故整理一下 我读的一篇论文 xff1a paper TOFlow Video Enhancement with Task Oriented Flow code https github co
  • 正则表达式里的?:是啥意思例如(?:a|b)

    我也是找答案时看到的 xff0c 发现这里回答的理论是的 xff0c 但不好让人理解 xff0c 我也结合其他地方的资料 xff0c 才能理解他的答案 下面我用两个例子来说明 单引号里面的三个元字符之间的意思 39 39 1 39 39 x
  • idea设置javadoc、idea2020单行注释的快捷键

    找了半天 xff0c 想不起来叫什么 1 其实就是给方法和类上添加这种doc文档的注释的快捷键 xff1a 打开setting keymap 搜索 xff1a fix doc comment 我习惯用ctrl 43 enter 2 切换到i
  • LaTeX分享008【LaTeX多图排列方法】

    LaTeX分享 LaTeX多图排列方法 作者 xff1a JinyuLi 日期 xff1a 2023 03 18 内容 xff1a 填坑 xff0c 补充上一篇专栏中LaTeX图片插入问题中的多张图片同时插入的实现方法部分 xff0c 本篇
  • SONiC(2):手动运行sonic-vs

    SONiC的testbed都是用ansible自动部署的 xff0c 下面尝试手动来创建 另外最新的sonic vs可以从这里下载 准备工作 ansible生成的vlab 01这个虚机的vir配置xml文件如下 testbed 64 u18
  • SONiC vs testbed搭建

    准备工作 一台安装Ubuntu18 04的系统 xff0c 内存建议不少于16G 需要支持kvm虚拟化安装ssh server sudo apt update y sudo apt openssh server y 设置sudo免密 sud
  • 2. 安装GNOME和KDE图形化桌面

    安装GNOME和KDE图形化桌面 1 使用CD DVD介质配置本地Yum源2 安装GNOME图形化桌面2 1 安装GNOME xff1a 2 2 设置在系统启动时进入图形化桌面3 安装KDE图形化桌面3 1 安装KDE xff1a 3 2
  • 复位电路的几种设计

    本人转自 xff1a http hi baidu com yinweini2 item 48ba4f12f54587711009b591 复位源是导致单片机内部复位操作的源泉 xff0c 大致可分为七种 xff1a 上电复位 xff08 P
  • Hadoop入门经典:WordCount

    以下程序在hadoop1 2 1上测试成功 本例先将源代码呈现 xff0c 然后详细说明执行步骤 xff0c 最后对源代码及执行过程进行分析 一 源代码 package org jediael hadoopdemo wordcount im
  • Jlink 采用 SWD 模式下载电路接法

    在Jlink上 xff1a 对应的电路图为 xff1a 其中要使用的是 Pin1 gt vcc Pin7 gt SWDIO Pin9 gt SWCLK Pin4 gt GND 其他GND 引脚也可 在对于的开发板 xff08 举例 xff1
  • ubuntu系统硬盘温度过高的解决方法

    一 更改swap分区设置 在ubuntu 里面 xff0c swappiness的值的大小对如何使用swap分区是有着很大的联系的 swappiness 61 0的时候表示最大限度使用物理内存 xff0c 然后才是 swap空间 xff0c
  • MBus协议详解(一)

    看了许多关于MBus协议的资料 xff0c 感觉说的不具体 不完整 也不系统 xff0c 本人准备结合一个具体的产品实现 xff0c 从理论和实现上对MBus协议做一个详细的论述 xff0c 如有不当之处 xff0c 欢迎讨论 1 介绍 M
  • MBus协议详解(二)

    4 4 slave 设计 传输特性 xff1a slaves 被设计为具有两种不同恒定 sink 电流 xff0c 因此在总线上电压有 1V 的变化的时候 xff0c sink 电流的变化一定不能超过 0 2 为了传输一个 Mark xff
  • 多个进程对同一文件写入的问题

    转载 讨论关于并发环境下 xff0c 多个进程对同一文件写入的问题 xff0c 我们会涉及到文件共享的知识 在开始之前 xff0c 我们先讨论一些有关文件共享的知识 1 文件共享 Unix系统支持在不同进程间共享打开的文件 为此 xff0c
  • Linux内核里的DebugFS

    DebugFS xff0c 顾名思义 xff0c 是一种用于内核调试的虚拟文件系统 xff0c 内核开发者通过debugfs和用户空间交换数据 类似的虚拟文件系统还有procfs和sysfs等 xff0c 这几种虚拟文件系统都并不实际存储在
  • linux 只获取dns服务器地址

    有一款设备需要使用静态ip xff0c 但是还要用到dns解析域名 我的想法是定时去查看 etc resolve conf文件 xff0c 如果为空 xff0c 则获取一次dns 在嵌入式linux中 xff0c 我们使用busybox的u
  • linux更新文件

    最近发现很多同学不知道线上操作替换文件的要点 所以又整理了一下 线上替换一个正在运行进程的文件时 xff08 包括二进制 动态库 需要读取的资源文件等 xff09 应避免使用cp scp操作 而需要使用mv rsync作为替代 原因 xff
  • 大型网站架构与自动化运维——ISCSI安装配置

    ISCSI安装配置 一 存储简述 1 DAS xff1a 即直连方式存储 xff0c 英文全称是Direct Attached Storage 直接附加存储 顾名思义 xff0c 在这种方式中 xff0c 存储设备是通过电缆 xff08 通
  • Homebrew brew安装报错:Failed to connect to raw.githubusercontent.com port 443: Operation timed out

    报错 xff1a Failed to connect to raw githubusercontent com port 443 Operation timed out 解决方案 liukeruideMacBook Pro liukerui

随机推荐

  • 正则表达式中(?:)、(?=)以及(?!)等的用法

    out 61 re findall r 39 d 43 61 abc 39 34 1abc 34 只抽取数字 xff0c 并且该数字后面跟的字符是 34 abc 34 print out out1 61 re findall r 39 d
  • Oracle 12C rman备份的坑,搞不好就会hang死

    RMAN Backup to Platform Temporarily Creates DMP File in ORACLE HOME dbs 文档 ID 2349921 1 This has been reported as BUG 25
  • Linux 上安装配置 VNC Server

    一 简介 VNC Virtual Network Console xff0c 即 虚拟网络控制台 它是一款优秀的远程控制工具软件 xff0c 而且是基于 UNIX 和 Linux 操作系统的免费开源的 1 优点 远程控制能力强大 xff0c
  • Xshell能ping通但连不上CentOS 7

    转 xff1a https blog csdn net trackle400 article details 52755571 在虚拟机 xff08 Vmware Workstation xff09 下 xff0c 安装了CentOS7 x
  • Pandas RuntimeWarning: More than 20 figures have been opened. Figures created plt.close()也不起作用

    以下是源代码 xff0c 结果 xff1a function里有个for循环 xff0c 在每一次循环都有plt close xff0c 但是还是报错 xff1a More than 20 figures have been opened
  • 为企业提供存储功能的Red Hat Stratis 2.0.1发布了

    导读Red Hat的Stratis存储项目用于在Linux上提供企业存储功能 xff0c 以与ZFS和Btrfs之类的产品竞争 xff0c 同时在LVM和XFS之上构建 xff0c 这是其2020年守护进程的首次更新 通过Stratis x
  • 【转载】Java基本类型的Writable封装

    Java基本类型的Writable封装 目前Java基本类型对应的Writable封装如表所示 所有这些Writable类都继承自WritableComparable 也就是说 xff0c 它们是可比较的 同时 xff0c 它们都有get
  • Ubuntu18.04 ROS Melodic的cv_bridge指向问题

    由于ROS Melodic自带的是Opencv3 2 0 xff0c 而我自己下载的是opencv3 4 5 xff0c 所以需要将cv bridge的指向改为我自己安装的opencv 全篇很长 xff0c 建议看完后操作 xff0c 不要
  • VNC服务器灰屏怎么办?

    VNC服务器出现灰屏如何解决 最直接的方法就是重启VNC xff0c 那么如何重启VNC呢 xff1f 远程连接VNC 首先关闭VNC xff0c 使用Putty软件 xff08 类似一个远程服务器控制软件 xff09 有关Putty软件可
  • Python str.isalpha

    str isalpha 功能描述 isalpha检查字符串是否只包含字母字符 语法 无参数 span class token builtin str span span class token punctuation span isalph
  • 华为手机MATE10所有分区备份与数据恢复方法

    华为手机MATE10所有分区备份与数据恢复方法 作者 xff1a 爱吃干锅牛肉的喵 时间2020 3 23 前言 xff1a 前段时间笔者手机的root权限出问题 xff0c 误操作重破解ROOT权限导致数据全部wipe并且系统也坏了 没办
  • 树莓派3B+安装系统(Raspbian)以及配置环境

    1 硬件准备 1 树莓派3B 43 xff08 E14 xff09 2 一张64G的闪迪存储卡 3 一个读卡器 4 普通电脑显示器 xff0c 键盘 xff0c 鼠标 5 一台可以正常工作的Window系统的电脑 2 安装系统 1 树莓派系
  • Ubuntu虚拟机无法上网的解决方法

    问题 在使用Ubuntu虚拟机时 xff0c 有时候会遇到无法上网的情况 解决办法一般有更改网络连接模式 xff08 桥接模式 NAT模式切换 xff09 重新设置虚拟机网卡等 但是 xff0c 最近遇到了以上办法均无法解决的情况 xff0
  • 用eclipse编写MapReduce程序的基本要点

    1 要想在eclipse上编写MapReduce xff0c 那么就需要在eclipse上安装hadoop插件 xff0c 具体操作是将hadoop安装目录下的contrib eclipse plugin hadoop 0 20 2 ecl
  • android 单双层桌面切换

    单双层桌面切换由于必须持久化数据 所以必须多创建单层桌面所须要的数据库表 一表为存储桌面图标 xff0c 表结构跟原生 桌面表一样 直接copy一份就可以了一表为存储桌面页 xff0c 表结构跟原生一样 创建上面两张表时注意下 数据库版本升
  • 对专业学习的期望与目标

    外界对计算机专业的评价多为晦涩 枯燥 难解 xff0c 一度 xff0c 让我这个初涉计算机领域的新手感到胆怯 彷徨 xff0c 而如今 xff0c 虽然我对计算机还是没有理解透 xff0c 还没有融入计算机的海洋 xff0c 却在一场极简
  • BGP路由

    内容概要 1 BGP的基本概念2 BGP的特点3 BGP的分类4 BGP的路由器5 BGP的工作原理6 BGP的状态机7 BGP对等体之间的交互原则8 建立对等体注意点9 命令 实验 1 BGP的基本概念 自治系统AS xff1a As是指
  • 【小5聊】VS2019开发工具之安装和部署winform项目

    VS2019版本 xff0c 已经移除了安装和部署功能 xff0c 需要到管理扩展下载 1 管理扩展下载安装和部署功能 installer Projects 记得需要关闭VS开发工具 xff0c 然后会自动安装 2 新建项目 搜索setup
  • C语言与C++的区别

    文章目录 前言语法加强部分一 struct关键字加强 xff1b 二 声明变量得到加强三 检测性加强1 申请寄存器变量并取地址问题2 重复定义变量问题3 函数传参问题 四 三目运算符的优化五 const常量的声明 主要有以下扩充引入了命名空
  • 双目+IMU标定详细流程、相关文件格式说明分析【T265为例】

    最近做一个无人机避障的项目 xff0c 无人机上面安装了机载电脑 xff0c 通过笔记本电脑进入机载电脑的桌面 xff0c 使用提前写好地脚本运行VIO 路径规划 飞控和相机启动 xff0c 在RVIZ中观察建图 定位和航迹点 xff0c