ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系

2023-05-16

学了ROS快一年了,依旧对map坐标系、odom坐标系、base_link坐标系之间的关系不是很清晰,这段时间下定决心要捋清楚他们之间的关系。

map坐标系:地图坐标系,是一个固定的坐标系
base_link:机器人本体坐标系,一般和机器人的中心重合,会随着机器人的运动而运动;
odom坐标系:里程计坐标系,不是固定的坐标系,是可以运动的。odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系(原因见下面的举例说明)。

一、前提说明:

首先先明确一点,我们计算移动机器人走了多远,是根据编码器信息(也就是里程计数据)来获得的。
在起始位置,机器人静止,

  1. 在map坐标系下实际位置是0;
  2. 此时里程计数据也是0,所以根据里程计数据计算得到的运动距离是0,计算得到的机器人位置也在0位置。

所以,在起始位置时,map坐标系和odom坐标系是重合的(注意map坐标系是固定的坐标系,odom坐标系是可以运动的坐标系)。

二、举例说明:

为了简单起见,我们在一维的情况下进行举例讨论。
假设机器人在t=0时刻从起点x=0处开始运动,一段时间t时刻后到达某一位置A点(x=7m);在这段时间内,利用里程计数据计算得到机器人运动了10m(只能利用里程计数据来计算距离,然后得到现在的位置),但是实际在地图中,机器人的实际位置是x=7m(A点)。
所以计算的坐标和真实坐标之间出现了偏差。但是在ROS中换了一个说法,不说计算得到的坐标在map坐标系中漂移了3m,而是说是odom坐标系相对于map坐标系漂移了3m。具体看下图:
在这里插入图片描述
所以,base_link坐标系相对于map坐标系的真实位置是7m,odom坐标系相对于map坐标系的漂移是 -3m(也就是map坐标系相对于odom坐标系的漂移是 3m),计算出来的base_link坐标系相对于odom坐标系的距离是10m ,因此 10m= 7m+3m;

当然使用IMU作积分来计算里程计信息,会随着时间的累积,IMU会产生累积误差,和上面的编码器来计算里程计信息产生误差是一样的情况。

所以odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系。

这里引用ros官网资料上面的一个图:
Relationship between Frames

在这里插入图片描述
(The map frame is the parent of odom, and odom is the parent of base_link. Although intuition would say that both map and odom should be attached to base_link, this is not allowed because each frame can only have one parent.)

map坐标系是odom的父坐标系,odom是base_link的父坐标系。尽管直觉会说map坐标系和odom坐标系都应该连接到base_link坐标系,但这是不允许的,因为每个坐标系只能有一个父坐标系。

三、AMCL定位中的坐标系关系:

在这里插入图片描述

  1. 对于上图上半部分Odometry Localization ,纯粹的里程计定位,它是直接根据里程计信息,来计算出base_frame 和odom_frame 之间的偏移,这种情况一般是默认map坐标系和odom坐标系始终是绑在一起的,始终是重合的。所以会有累积误差,随着里程计的增加,它往往会偏差越来越大,越漂越远。

  2. 对于上图的下半部分的AMCL,它是通过比对 当前的地图 与 激光雷达检测到的环境地图,来自己的位置进行一个修正,这个修改正就体现在 odometry drift,把之前的运算得到的漂移补到 map_frame 和 odom_frame 两个坐标系之间。这就是AMCL的作用(SLAM里面也有map_frame 和 odom_frame 两个坐标系之间 这样的修正)。

参考链接:
[1] ROS里基本坐标系的理解:map,odom,base_link,base_laser https://blog.csdn.net/flyinsilence/article/details/51854123
[2] ROS中odom、map坐标系的理解 https://blog.csdn.net/u012686154/article/details/88174195
[3] amcl http://wiki.ros.org/amcl

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

ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系 的相关文章

  • 如何使用Go创建工作池? 配合计时器使用工作池 图文讲解 [_]~( ̄▽ ̄)~* Go相关

    文章目录 使用go程通信创建工作池计时器 96 time Timer 96 工作池与计时器 使用go程通信创建工作池 创建工作池会用到我上述的大部分特性 span class token keyword func span 工作函数 spa
  • 机器学习实战(基于scikit-learn和TensorFlow)-第七章随机森林笔记(一)

    关注微信公共号 xff1a 小程在线 关注CSDN博客 xff1a 程志伟的博客 Python 3 7 6 default Jan 8 2020 20 23 39 MSC v 1916 64 bit AMD64 Type 34 copyri
  • 致 喷子们

    之前年轻 xff0c 被喷子在留言下面喷了 xff0c 竟然自闭了好几年 xff0c 一直不敢发文章 xff0c 还把之前的文章全部改为不可见 现在想想 xff0c 就应该喷回去 越想越气 xff0c 草
  • Go的并发如何配合上下文(ctx Context)使用? [_]~( ̄▽ ̄)~* Go相关

    文章目录 上下文处理创建上下文上下文继承线程安全 说明 上下文的英文是context 其英文简写约定俗成是 ctx 上下文处理 上下文在go中有一个约定俗成的写法ctx 如果你用过python应该知道self 这是python类初始化的一个
  • Java--信号量

    信号量 信号量 xff08 英语 xff1a Semaphore xff09 又称为信号量 旗语 xff0c 是一个同步对象 xff0c 用于保持在0至指定最大值之间的一个计数值 在系统中 xff0c 给予每一个进程一个信号量 xff0c
  • C++ 继承学习心得

    单继承 xff1a 一个子类只有一个直接父类时 xff0c 称这个继承关系为单继承 多继承 xff1a 一个子类中有两个或以上直接父类时 xff0c 称这个继承关系为多继承 菱形继承 是一种特殊的继承关系 菱形继承的问题 xff1a 有数据
  • 你的代码放在 GitHub 上,真的安全吗?

    受俄乌冲突的影响 xff0c GitHub 目前正在考虑限制俄罗斯开发人员访问开源代码存储库的可能性 无独有偶 xff0c 早在 2019 年 xff0c GitHub 就曾经因为美国出台贸易制裁国家名单 xff0c 对名单上的国家 地区的
  • ROS进阶学习(一至八)讲

    https blog csdn net weixin 40641902 article list 1 转载自weixin 40641902的博客
  • 如何将Docker升级到最新版本

    CentOS7如何将Docker升级到最新版 如果我们docker的版本比较低的话 xff0c 要怎么才能更新自己docker的版本呢 xff1f 下面是具体的方法 1 查找主机上关于Docker的软件包 rpm qa grep docke
  • 编译Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

    宾夕法尼亚大学kumar实验室2018年发布 Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight xff0c 基于MSCKF基础上实现双目视觉惯导里程计 刚好这
  • 公网k8s集群搭建史上超详细的教程!!!

    一 背景 xff1a 1 实验背景 x1f9ea 在学习k8s搭建中 xff0c 网上大部分教程都是用虚拟机做单机集群 xff0c 只有极少数是使用服务器搭建教程 xff1b 但是用云服务器搭建的教程中教程版本都比较老 随着时间的推移 xf
  • 【repo/git小技巧】repo sync时报错“The remote end hung up unexpectedly”解决办法

    像往常一样使用repo init gt repo sync 的形式进行代码仓库下载 xff0c 但每次下载repo sync都不能执行成功 xff0c 问题为 The remote end hung up unexpectedly xff0
  • 在 React 中实现记忆以提高性能小技巧

    React 如何渲染 UI 在详细了解 React 中的 memoization 之前 xff0c 让我们先看看 React 如何使用虚拟 DOM 呈现 UI 常规 DOM 基本上包含一组表示为树的节点 DOM 中的每个节点都是 UI 元素
  • 《Linux内核设计与实现》读书总结

    Linux内核设计与实现 进程管理 进程 xff1a 处于执行器的程序 xff0c 包含代码段 xff0c 打开的文件 xff0c 信号 xff0c 内核内部数据 xff0c 内存地址空间 xff0c 多个线程 xff0c 存放全局变量的数
  • python无报错但是主函数没有执行

    python无报错但是主函数没有执行 是不是遇到过python没有报错 xff0c 但是主函数没有执行 xff0c 完全没有结果的情况 遇到这种情况很有可能就是你没有添加if name 61 61 main 这个东西 xff0c 或者格式不
  • 2018.2.2PHPstrom破解版

    作者 xff1a 聽 雨 来源 xff1a CSDN 原文 xff1a https blog csdn net qq 39439751 article details 82758330 版权声明 xff1a 本文为博主原创文章 xff0c
  • python3中 print不加括号报错!

    python 3和python 2的print是有区别 xff0c python3需要加括号 xff0c 但python2不需要 span class token operator gt gt span span class token o
  • leetcode 772 基本计算器3 双栈解析表达式 单调栈

    此题是比较难的一个题 xff0c 不能简单的用递归来做 假设我们已经能把数字分离出来 xff0c 并且解决了其他无关细节 此时我们要考虑 xff0c 如何处理括号和运算优先级 此题最强的一点是 xff0c 当你看到一个符号时 xff0c 你
  • 自然场景OCR检测(YOLOv3+CRNN)

    自然场景OCR检测 YOLOv3 43 CRNN xff08 中文 43 英文模型 xff09 前言 最近对于自然场景下的OCR比较有兴趣 xff0c 所以总结了一些目前OCR现状 xff0c 并且找了一个自然场景OCR的项目练练手 本人新
  • Tx2刷机及安装Jetpack4.5教程

    描述 xff1a 由于项目需要在工控机上运行目标检测程序 xff0c 所需配置需要包括Cuda OpenCV等软件配置 目前Nvidia已经将cuda opencv等相关用于图像处理 深度学习 计算机视觉所需的软件及文件集成到Jetpack

随机推荐

  • ROS gazebo 模型加载报错

    我的ros装的是ros kinetic desktop full版本 xff0c 所以不用另装gazebo 但是用命令 roscore rosrun gazebo ros gazebo 启动后 xff0c 出现如下错误 xff1a Erro
  • excel对比两边数据去重

    需求 筛选重复数据 xff0c A列是1000条数据 xff0c C列是100条数据 xff0c 删除重复的数据 xff0c 只剩900条 首先 xff0c A列数据要分列 xff0c 因为数据格式不一样 xff0c 会导致后面的问题 xf
  • GVIM的配置/使用

    关于GVIM的配置 使用 以我个人喜好配置 配置文件在用户目录下的 vimrc里 配置完后 xff0c 保存并bash一下即可 一 配置 xff1a 根据自己的喜好配置了一点点 colorscheme darkblue span class
  • 小白科研笔记:简析PointRCNN的基于Bin的误差机制

    1 前言 PointRCNN是一篇做3D目标检测的CVPR2019的文章 目前位居KITTI目标检测榜首的是PV RCNN 这个算法的前身就是PointRCNN 它们的作者都是同一个人 考虑到PV RCNN算法有些复杂 xff0c 于是我想
  • ROS基础:获取全局与局部launch Parameter

    在launch 参数配置中 xff0c 分为有全局参数和局部参数 私有参数 xff0c 两者参数的获取是不同的 xff0c 参数示例如下 xff1a lt launch gt lt 全局参数 gt lt param name 61 34 p
  • Redis分布式锁系列

    1 压力测试出的内存泄漏及解决 xff08 可跳过 xff09 使用jmeter对查询产品分类列表接口进行压力测试 xff0c 出现了堆外内存溢出异常 我们设置的虚拟机堆内存100m xff0c 并不是堆外内存100m 产生堆外内存溢出 x
  • java核心技术卷1基础知识整理

    java核心技术卷1基础知识整理 1 java概述2 java程序设计3 对象与类4 继承5 接口 lambda 表达式与内部类6 并发 1 java概述 1 Java 剔除了 C 43 43 中许多很少使用 难以理解 易混淆的特性 xff
  • 【论文笔记】—目标姿态估计—EPro-PnP—2022-CVPR

    论文介绍 该论文被评为 CVPR 2022 最佳学生论文 将PnP位姿优化问题转变为预测位姿概率密度的问题 对于一个基于PnP的物体位姿估计网络 xff0c 可以通过反向传播位姿的概率密度从而学习物体的2D 3D关联 xff0c 实现稳定的
  • STM32 HAL库串口回调函数配置失效(HAL_UART_RxCpltCallback)

    小编实际操作中 xff0c 用HAL UART RxCpltCallback函数配置接收串口数据 xff0c 在测试过程中用手碰了单片机引脚之后无法再接收到数据 xff0c 终于找到了解决办法 xff0c 就是自己使能接收中断和自己定义中断
  • PADS2.4版本,软件打开无法操作问题记录

    小编将pads2 4软件打开后 xff0c 放大和缩小不能使用 xff0c 查找相关资料后汇总方法 xff0c 如果有侵权请联系 xff0c 谢谢 xff0c 解决方法如下 xff1a 方法1 xff1a 设置微软键盘兼容性 xff08 小
  • 学习记录《Simulink 快速入门 —— 官方Help文档》

    Simulink 快速入门 官方Help文档 1 Simulink 模块图2 创建简单模型2 1 打开新模型2 2 打开 Simulink库浏览器2 2 1将模块添加到模型2 2 2 连接模块2 2 3 添加信号查看器2 2 4 运行仿真2
  • 深度学习中的优化问题(Optimization)

    文章目录 1 优化中的挑战1 1 优化问题1 2 挑战1 3 解决方法 2 优化算法2 1 优化算法的分类2 1 1 批量大小的选择2 1 2 学习率调整2 1 3 梯度估计修正 2 2 自适应学习率算法2 2 1 AdaGrad2 2 2
  • 基于MIMO讲解信道估计基本原理

    为什么要进行信道估计 xff1f 信号在通过信道传输的时候 xff0c 会受到信道中种种因素产生的噪声以及可能发生的多径效应 xff0c 弄清信号经过的信道的特性 xff0c 表征信道的技术 过程称为信道估计 xff08 Channel E
  • 基于深度学习Superpoint 的Python图像全景拼接

    pip install opencv python 61 61 3 4 2 16 pip install opencv contrib python 61 61 3 4 2 16 参考 https github com kushalvyas
  • 微分方程的线性化 - 百度文库

    https wk baidu com view aae87102caaedd3383c4d3ca pcf 61 2 amp bfetype 61 new
  • python 中的路径. ./ .. ../

    与Linux系统中一样 xff1a 代表当前所在目录 代表当前所在目录的父目录 代表当前所在目录下的某个文件夹或文件 代表当前所在目录的父目录下的某个文件夹或文件 A B C D E py F 类似于上示的一个目录结构 xff0c 在E p
  • ros的初始化和关闭

    初始化选项 ros init options NoSigintHandler 不安装 SIGINT 句柄 这种情况下你需要自己安装SIGINT句柄来保证节点在退出时候会正确的关闭 SIGINT的默认操作是终结一个进程 xff0c 所以如果你
  • Python报错ModuleNotFoundError: No module named 'numpy'

    Python报错ModuleNotFoundError No module named numpy 这种情况一般是缺少numpy所致 xff0c 需要安装numpy 最好使先进入到进入python 版本安装目录下的Script目录中 xff
  • ubuntu系统查看gcc版本及版本切换

    写在前面 xff1a 自己的测试环境是Ubuntu16 04 xff0c 安装了gcc 5 gcc 7 xff0c 通过下面的方式从实现默认的gcc 5切换到gcc 7 xff0c 亲测有效 xff5e xff5e 1 查看自己当前的gcc
  • ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系

    学了ROS快一年了 xff0c 依旧对map坐标系 odom坐标系 base link坐标系之间的关系不是很清晰 xff0c 这段时间下定决心要捋清楚他们之间的关系 map坐标系 xff1a 地图坐标系 xff0c 是一个固定的坐标系 xf