实战 | 如何制作一个SLAM轨迹真值获取装置?

2023-05-16

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文知乎作者杨小东授权转载,未经授权禁止二次转载

原文: https://zhuanlan.zhihu.com/p/57235987

SLAM性能的一个很重要的指标是 定位精度,公开的室内数据集一般会采用 动捕设备获取设备轨迹真值。但是动捕设备 价格昂贵,OptiTrack百万以上,国产的Nokov >20W。没有动捕设备,我们就很难用 自己采集的数据评估SLAM的定位性能。
为此,我们搞了一个廉价的轨迹真值捕获装置。用一个固定的 单目相机获取 平面运动轨迹真值。我们主要是用这种方法来测室内移动机器人的运动轨迹。
本文给出了原理和代码。
注意:只能测 2D平面内的运动,不是3D。

1. 原理

 

如下图,支架上固定一个下视的单目相机,用来捕捉机器人顶端平贴的一张ArUco码。ArUco码相对的机器人的位姿是已知的(这个应该很容以做到吧)。我们要解决的问题就是利用单目相机测量ArUco码在平面上的位姿实际上,OpenCV提供的ArUco的库,可以实现ArUco码的识别,并提供码四个角点的像素坐标。如果我们能计算出到四个角点在平面上的坐标,就可以计算出机器人在平面上的位姿(位置和朝向)。下面就来说一下如何计算一个点在平面上的位置。

6b2abb8ca1312290af5780c5ab2743f6.png
平面轨迹真值捕获原理

世界坐标系下,一个3D的点outside_default.png,投影到图像坐标下,可表示为

outside_default.png

T 是外参。我们想要测量的是2D平面内的坐标,为了方便,可以把世界坐标系的原点设在平面之上,Z 轴垂直于被这个平面(就是ArUco那个平面)。那么outside_default.png的 z =0 。式(1)就可以变为

outside_default.png

平面上的点outside_default.png和图像上的像素outside_default.png之间就建立了联系。它们之间就是一个单应矩阵H 。

我们只要知道这个单应矩阵H  ,就可以通过图像像素 outside_default.png 获取其在平面上的2D坐标 outside_default.png

outside_default.png 

2. 现在的问题是单应矩阵怎么来的呢?

从式(2)可以看出,只要知道摄像机的内参数K 和外参数T ,H就有了。内参数 K好说,大家应该都很熟悉。关键是 T,我们这里用平面靶标来标定。具体的,如下图把一张棋盘格靶标放在ArUco码之上,通过PnP方法可以计算出靶标坐标系与摄像机坐标系之间的位姿变换 T'。注意,棋盘格靶标这个平面并不是ArUco码的平面,因为棋盘格靶标有厚度 t。这个厚度 t我们很容易测量,认为是已知的。那么,相机坐标系和ArUco面上的世界坐标系之间的坐标变换就是

outside_default.png

至此,我们就得到了外参数 T 。通过(2)式也就可以得到单应矩阵 H。

2600c69cc6817274586ab1b05e339d5a.png
标定单应矩阵H

3. 下面的问题是计算机器人的位姿


7242b33042e96820534146c61131e647.png

如上图,刚才我们提到,在图像上可以得到ArUco码四个角点的像素坐标,这里记为

outside_default.png

使用(3)式,可以分别计算出这四个点在世界坐标系下的坐标(就是平面内的坐标)

outside_default.png

关于机器人的位置,其实我们只需要一个点的坐标就好了,就是ArUco码中心点的坐标。因此我们把四个点合成为一个点:

outside_default.png

outside_default.png就是机器人的位置。

下面还要计算一下机器人的姿态,在2D平面就是朝向了。用两个点就可以计算出朝向,现在我们手里有四个点,那就平均一下好了。θ就是机器人的朝向。

4. 测量的精度问题

既然要作为真值去用,那就要求要有足够的测量精度。下面我们分析一下测量精度。我们把式(3)展开

outside_default.png

消去 λ可以得到

outside_default.png

如果图像u方向上像素提取的精度-方差为outside_default.png,v方向的精度-方差为outside_default.png。也就是像素点的协方差为

outside_default.png

那么测得的平面上点outside_default.png的协方差就是

outside_default.png

至此就精度分析完了,也就是说标出来单应矩阵 H之后,通过(12)式就可以计算出大致的测量精度。

实际上,也可以把摄像机的内外参带入到(3)式,再结合(12)式,可以获得一个解析的精度表达。这个比较复杂。如果相机安装的时候相对于测量平面仅是绕相机坐标系的x轴旋转一个角度的话,测量区域内的精度分布如下图。如果摄像机正对测量平面的话,测量区域的测量精度是相同的。当然,相机的分辨率越高精度越高。焦距越长精度越高,但是同时可测量的区域也会变小。

我自己使用的相机是大恒MER-302-56U3C相机,2048×1536像素;镜头是kowa LM3NC1M,3.5mm广角镜头;摄像机离测量平面的距离大概是2m。可测量范围大概是4m×3m。如果认为像素的提取精度为1个pixel的话,测量精度约为2mm。这个精度足够用于SLAM轨迹评估。

edf20c78ccc42a1d95350d828c1d8eba.png

5. 关于测量范围

如果相机正对于测量平面,测量区域是一个矩形。如果相机倾斜放置的话,测量区域就是一般的四边形了。上图就是一种。测量区域的大小跟镜头的视场角、相机安装的高度、角度都有关系,比较复杂。总的来说,为了使测量平面内的测量精度一致,应该尽量让相机正对测量平面。那焦距越短,测量视场越大,但是测量精度随之降低。为了获取足够的测量精度,就需要一个高分辨率的相机。为了降低悬挂高度,就需要一个短焦镜头。 

6. 代码

 

标定和测量的全部代码如下

https://github.com/ydsf16


  

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇


  

cc4541efe88eedebff52b98dc7387d77.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实战 | 如何制作一个SLAM轨迹真值获取装置? 的相关文章

  • slam中ceres的用法解析

    slam中ceres的常见用法总结 1 ceres 使用流程2 ICP实例2 1 优化状态参数化2 2 jacobian矩阵的求解 1 ceres 使用流程 ceres的使用过程基本可以总结为 1 创建优化问题与损失核函数 ceres Pr
  • Kalibr进行IMU+相机的标定

    环境 xff1a Ubuntu18 04 Kalibr代码连接 xff1a https github com ethz asl kalibr 1 安装依赖 ROSsudo apt get install python setuptools
  • Docker容器之镜像仓库详解

    Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1 什么是Docker Image xff1f 2 什么是Docker Registry 3 镜像相关的操作 本文将集中对镜像 仓库 容器的概念与三者之间的联系进行详细
  • Linux 中 rc.local、init.d、rc.x、init 这几个文件(夹)各有什么作用?启动执行的脚本应该均放在 rc.local 中吗?

    Linux 中 rc local init d rc x init 这几个文件 夹 各有什么作用 启动执行的脚本应该均放在 rc local 中吗 参考链接 1 https www zhihu com question 20126189 2
  • PX4 Offboard模式调试指南

    下载QGroundcontrol https docs qgroundcontrol com master en getting started quick start html 飞控初始化配置 按PX4基本配置指南走 https docs
  • PX4 PID调试指南

    PX4基本配置参考 xff1a https blog csdn net qq 42703283 article details 115214729 spm 61 1001 2014 3001 5501 本文仅供参考 xff0c 如有困惑的参
  • ROS:OpenCV的常用头文件解释

    1 include lt cv bridge cv bridge h gt include lt cv bridge cv bridge h gt cv bridge类 xff1a 这个类中提供的API主要功能是将图像从sensor msg
  • STM32介绍

    STM32 是意法半导体推出的 32 位 ARM Cortex M 内核微控制器系列 xff0c 具有高性能 低功耗 可靠性强等特点 xff0c 广泛应用于工业控制 智能家居 汽车电子 医疗设备等领域 本文将详细介绍 STM32 系列的特点
  • Ubuntu 18.04文件下载

    ubuntu sim ros melodic sh 链接 link 下面为打开后的具体情况 span class token comment span span class token operator span span class to
  • ubuntu18.04下QGC安装

    QGC安装 xff08 新手操作 xff09 参考官网教程即可 官网链接 link 先把命令行的代码贴过来 xff0c 方便大家复制粘贴 第 span class token number 1 span 步的 sudo usermod sp
  • PX4 ulg文件格式转化(windows下)

    福利领取 在经过多次尝试ubuntu下安装pyulog失败后 xff0c 多次失败 xff0c 查找相关资料 xff0c 发现是python相关包出现了问题 xff0c 最后发现了anaconda这个好东西 xff0c 包含了python下
  • PX4固定翼姿态控制器详细介绍(一)

    代码版本1 8 2 源码地址 Firmware1 8 2 一 前言 最近需要做一下固定翼的相关姿态控制 xff0c 只对控制流程进行简单介绍 xff0c 特此记录下相关流程 xff0c 方便自己后续进一步调试 xff0c 以下对PX4固定翼
  • Github仓库命名规范

    Github仓库命名规范 命名规则 GIT库名一律采用项目名 类型 年月的形式 其中对项目名的规范如下 xff1a 库名中不得出现下述规定的字符 64 amp 39 39 xff0c lt gt 库名应尽量避免使用 名 名的形式 库名应尽量
  • CVTE嵌入式面经

    2021提前批嵌入式实习 CVTE笔试 xff1a 大约20个选择题和两道手撕代码题 选择题主要是问LINUX一些指令和一些单片机的相关知识 比如中断任务里面该写什么代码之类的 CVTE一面 xff1a 大约半个小时 1 自我介绍 2 谈谈
  • 97条架构师必须掌握的知识

    1 Don 39 t put your resume ahead ofthe requirements by Nitin Borwankar 需求先于履历 身为架构 师要平衡客户 公司和个人的利益 用时兴的技术 为个人履历增光添彩固然重要
  • 以Crotex M3为例讲解stm32芯片内部原理

    一款STM32F103ZET6是72Mhz 64kRAM 512kROM为例进行简要分析其MCU工作原理 1 分清几个概念 1 1RAM可读写静态储存器 平常所说的DDR就是RAM的一种 用于CPU直接交换数据 1 2ROM只可读静态存储器
  • 内外网共用操作

    1 首先将内网 外网的两根网线接入交换机 xff0c 再从交换机出来一根线接入你的电脑 xff08 如果是路由器的话 xff0c 内网 外网的网线接入LAN口 xff0c 再从LAN口出来一根线接入你的电脑 xff09 2 打开IP设置 x
  • 【从零学习OpenCV 4】了解OpenCV的模块架构

    本文首发于 小白学视觉 微信公众号 xff0c 欢迎关注公众号 本文作者为小白 xff0c 版权归人民邮电出版社所有 xff0c 禁止转载 xff0c 侵权必究 xff01 经过几个月的努力 xff0c 小白终于完成了市面上第一本OpenC
  • 对象检测和图像分割有什么区别?

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 01 人工智能中的图像预处理 对象检测和图像分割是计算机视觉的两种方法 xff0c 这两种处理手段在人工智能领域内相当常见 xff0c
  • 基于OpenCV的网络实时视频流传输

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头 但是有时 xff0c 大家又希望能够随时随地观看视频直播 大多数人会选择使

随机推荐

  • 英伟达 GPU显卡计算能力查询表

    近期小白因为项目需要开始在电脑上配置深度学习环境 经过一些列的苦难折磨之后 xff0c 电脑环境终于配置好了 xff0c 但是却被我的显卡劝退了 我是用的是算力2 1的显卡 xff0c 环境要求算力3以上的显卡 xff0c 无奈最后只能使用
  • 一文看懂激光雷达

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 来源 xff1a 摘自中信证券 与雷达工作原理类似 xff0c 激光雷达通过测量激光信号的时间差和相位差来确定距离 xff0c 但其最
  • 传统CV和深度学习方法的比较

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 新机器视觉 摘要 xff1a 深度学习推动了数字图像处理领域的极限 但是 xff0c 这并不是说传统计算机视觉技
  • Opencv实战 | 用摄像头自动化跟踪特定颜色物体

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 新机器视觉 1 导语 在之前的某个教程里 xff0c 我们探讨了如何控制Pan Tilt Servo设备来安置一
  • 使用OpenCV和TesseractOCR进行车牌检测

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 目录 1 xff09 目的和简介 2 xff09 前言 3 xff09 使用OpenCV和Haar级联进行车牌检测 4 xff09 使
  • GPS(全球定位系统)

    GPS 全球定位系 统 xff0c 是美国国防部为陆 xff0c 海 xff0c 空三军研制的新一代卫星导航定位系统 xff0c 它是以 24 颗人造卫星作为基础 xff0c 全天候地向全球各地用户提供时实的三维定位 三维测速和全球同步时间
  • 单应性矩阵应用-基于特征的图像拼接

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 深度学习这件小事 前言 前面写了一篇关于单应性矩阵的相关文章 xff0c 结尾说到基于特征的图像拼接跟对象检测中
  • 前沿 | 一文详解自动驾驶激光雷达和摄像头的数据融合方法

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 计算机视觉联盟 自动驾驶感知模块中传感器融合已经成为了标配 xff0c 只是这里融合的层次有不同 xff0c 可
  • 使用 YOLO 进行目标检测

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 自从世界了解人工智能以来 xff0c 有一个特别的用例已经被讨论了很多 它们是自动驾驶汽车 我们经常在科幻电影中听到 读到甚至看到这些
  • 概述 | 全景图像拼接技术全解析

    点 击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 前言 图像 视频拼接的主要目的是为了解决相机视野 xff08 FOV Field Of View xff09 限制 xff0c 生成
  • 我靠这份无人机完全指南吹了一整年牛!

    对于多数无人机爱好者来说 xff0c 能自己从头开始组装一台无人机 xff0c 之后加入AI算法 xff0c 能够航拍 xff0c 可以进行目标跟踪 xff0c 是每个人心中的梦想 亲自从零开始完成复杂系统 xff0c 这是掌握核心技术的必
  • 奇异值分解(SVD)原理总结

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 前言 奇异值分解 xff08 SVD xff09 在降维 xff0c 数据压缩 xff0c 推荐系统等有广泛的应用 xff0c 任何矩
  • 用Python实现神经网络(附完整代码)!

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 在学习神经网络之前 xff0c 我们需要对神经网络底层先做一个基本的了解 我们将在本节介绍感知机 反向传播算法以及多种梯度下降法以给大
  • 一文图解卡尔曼滤波(Kalman Filter)

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 译者注 xff1a 这恐怕是全网有关卡尔曼滤波最简单易懂的解释 xff0c 如果你认真的读完本文 xff0c 你将对卡尔曼滤波有一个更
  • 计算机视觉方法概述

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 一 资源简介 今天给大家推荐一份最新的计算机视觉方法概述 xff0c 这份综述详细的讲述了当前计算机视觉领域中各种机器学习 xff0c
  • 通俗易懂的YOLO系列(从V1到V5)模型解读!

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 0 前言 本文目的是用尽量浅显易懂的语言让零基础小白能够理解什么是YOLO系列模型 xff0c 以及他们的设计思想和改进思路分别是什么
  • PWM电流源型逆变器

    nbsp nbsp nbsp nbsp 随着科学技术和生产力的发展 各种结构型式和各种控制方法的逆变器相继问世 而就逆变器而言 不管输出要求恒频恒压还是变频变压 有效消除或降低输出谐波是基本要求 因而逆变电源的谐波抑制一直是研究者致力于解决
  • 下划线在 Python 中的特殊含义

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 Python 中的下划线 下划线在 Python 中是有特殊含义的 xff0c 它们在 Python 的不同地方使用 下面是 Pyth
  • UFA-FUSE:一种用于多聚焦图像融合的新型深度监督混合模型

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯 小白决心每天为大家带来经典或者最新论文的解读和分享 xff0c 旨在帮助各位读者快速了
  • 实战 | 如何制作一个SLAM轨迹真值获取装置?

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文知乎作者杨小东授权转载 xff0c 未经授权禁止二次转载 原文 xff1a https zhuanlan zhihu com p