常见的坐标系

在使用ROS进行定位导航等操作时,我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的,但是为了方便不同的软件间共享坐标信息,ROS定义了几个常见的坐标系。

1.base_link
base_link坐标系和机器人的底盘直接连接。其具体位置和方向都是任意的。对于不同的机器人平台,底盘上会有不同的参考点。不过ROS也给了推荐的坐标系取法。

x 轴指向机器人前方
y 轴指向机器人左方
z 轴指向机器人上方

2.odom
odom是一个固定在环境中的坐标系也就是world-fixed。它的原点和方向不会随着机器人运动而改变。但是odom的位置可以随着机器人的运动漂移。漂移导致odom不是一个很有用的长期的全局坐标。然而机器人的odom坐标必须保证是连续变化的。也就是在odom坐标系下机器人的位置必须是连续变化的,不能有突变和跳跃。
在一般使用中odom坐标系是通过里程计信息计算出来的。比如轮子的编码器或者视觉里程计算法或者陀螺仪和加速度计。odom是一个短期的局域的精确坐标系。但是却是一个比较差的长期大范围坐标。

3.map
mapodom一样是一个固定在环境中的世界坐标系。map的z轴是向上的。机器人在map坐标系下的坐标不应该随着时间漂移。但是map坐标系下的坐标并不需要保证连续性。也就是说在map坐标系下机器人的坐标可以在任何时间发生跳跃变化。
一般来说map坐标系的坐标是通过传感器的信息不断的计算更新而来。比如激光雷达,视觉定位等等。因此能够有效的减少累积误差,但是也导致每次坐标更新可能会产生跳跃。
map坐标系是一个很有用的长期全局坐标系。但是由于坐标会跳跃改变,这是一个比较差的局部坐标系(不适合用于避障和局部操作)。

坐标系的约定

在非结构化的环境中(比如开放环境),如果我们要定义一个全球坐标系

  1. 默认的方向要采用 x轴向东,y轴向北,z轴向上
  2. 如果没有特殊说明的话z轴为零的地方应该在WGS84椭球上(WGS84椭球是一个全球定位坐标。大致上也就是z代表水平面高度)
    如果在开发中这个约定不能完全保证,也要求尽量满足。比如对于没有GPS,指南针等传感器的机器人,仍然可以保证坐标系z轴向上的约定。如果有指南针传感器,这样就能保证x和y轴的初始化方向。

在结构化的环境中(比如室内),在定义坐标系时和环境保持对应更有用。比如对于有平面图的建筑,坐标系可以和平面图对应。类似的对于室内环境地图可以和建筑物的层相对应。对于有多层结构的建筑物,对每一层单独有一个坐标系也是合理的。

4.earth
这个坐标系是为了多个机器人相互交互而设计的。当有多个机器人的时候,每个机器人都有自己的map坐标系,他们之间的map坐标系并不相同。如果想要在不同的机器人间共享数据,则需要这个坐标系来进行转化。
如果map坐标系是一个全局坐标系,那么mapearth坐标系的变化可以是一个静态变换。如果不是的话,就要每次计算map坐标系的原点和方向。
在刚启动的时候map坐标系的全局位置可能是不知道的。这时候可以先不发布到earth的变换,直到有了比较精确的全局位置。

坐标系之间的关系
坐标系之间的关系可以用树图的方式表示。每一个坐标系只能有一个父坐标系和任意多个子坐标系。

earth -> map -> odom -> base_link
按照之前的说明,odommap都应该连接到base_link坐标系。但是这样是不允许的,因为每一个坐标系只能有一个父坐标系。

额外的中间坐标系
这个图只表示了最少的坐标系。在保证基本的结构不变的情况下可以在其中加入中间的坐标系以提供额外的功能。

多机器人坐标系的例子

earth --> map_1 --> odom_1 --> base_link1
earth --> map_2 --> odom_2 --> base_link2

坐标系变换的计算

odombase_link的变换由里程计数据源中的一个发布

mapbase_link通过定位组件计算得出。但是定位组件并不发布从mapbase_link的变换。它首先获取odombase_link的变换然后利用定位信息计算出mapodom的变换。

earthmap的变换是根据map坐标系选取所发布的一个静态变换。如果没有设置,那么就会使用机器人的初始位置作为坐标原点。

Map之间的切换

如果机器人的运动范围很大,那么极有可能是要切换地图的。在室内环境下,在不同的建筑物中,和不同的楼层地图都会不同。
在不同的地图间切换的时候,定位组件要恰当的把odomparent替换成新的地图。主要是mapbase_link之间的变换要选取恰当的地图,然后在转换成mapodom之间的变换。

odom坐标系的连续性
在切换地图的时候,odom坐标系不应该受到影响。odom坐标系要保证连续性。可能影响连续性的情况包括进出电梯,机器人自身没有运动,但是周围环境发生很大的变化。还有可能由于运动距离太远,造成数据溢出。这些都要特殊进行处理。

ROS坐标系统,常见的坐标系和其含义相关推荐

  1. ROS中常见坐标系定义及基本单位

    为了方便开发者代码复用,ROS中统一定义了常见的坐标系(REP),所有的坐标系都是右手坐标系. 1. map --固定的世界坐标系,z轴垂直向上.在map中表示的移动平台的pose是没有drift,没 ...

  2. ROS系统实现 tf坐标系广播与监听

    安装Ros中 tf 相关功能包 sudo apt-get install ros-melodic-turtle-tf 启动launch文件,这个launch文件相当于一个脚本,可以一次性启动很多节点 ...

  3. LaTeX中常见的宏包及其含义

    LaTeX中常见的宏包及其含义 宏包 含义 metalogo 特殊符号和预定义字符串 mflogo 特殊符号和预定义字符串 texnames 特殊符号和预定义字符串 ulem 字体修饰 identfi ...

  4. 【XYZ】常见三维坐标系约定图结

    序 三维接触时间长了会慢慢发现,不同的引擎.建模软件.库对坐标系的约定各不相同. 本篇总结了本人目前接触到的一些常见软件和库的坐标系,直接给出截图,希望能达到直观的速查表效果. 左右手坐标系判定标准: ...

  5. 地图坐标系统(各种坐标系详解)

    作者:EasyV数字孪生可视化 链接:https://www.zhihu.com/question/277520588/answer/2526778212 来源:知乎 著作权归作者所有.商业转载请联系 ...

  6. ROS入门-16.tf坐标系广播与监听的编程实现

    介绍这两只海龟跟随背后的原理,怎样通过tf坐标系来完成广播与监听的编程实现 第一步,创建功能包learning_tf cd ~/catkin_ws/src 在工作空间src下进入终端 catkin_c ...

  7. 常见地图坐标系以及转换方法、转换工具

    l 为什么要进行坐标系转换? 因为国内对地理坐标有特殊的政策,GPS获取的原始坐标不能在互联网上对外提供,所有电子地图必须对位置做偏移处理,这就导致从底层接口得到的坐标展示在地图上会有偏移.这种偏移不 ...

  8. Python 实现常见的坐标系之间的转换

    常见的一些坐标系之间的转换 话不多说,直接上代码 import mathx_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897 ...

  9. ros:如何获得地图坐标系中的某一点的像素坐标

    首先加载一张地图作为示例 rosrun map_server map_server xxx.yaml 可以得到如下图的地图信息: 在对应的yaml文件中,存储的信息为: image: a314.pgm ...

最新文章

  1. 【GStreamer】gstreamer工具详解之:gst-launch-1.0
  2. SQL学习笔记:库和表的创建
  3. # C# 学习笔记(4) 类
  4. 【玩法设计】炉石传说吃鸡竞技场构思
  5. Flask+nginx负载均衡综合使用
  6. SpringMVC配置项学习笔记
  7. typora 公式对齐_都0202年了还不会用 Typora——看Typora使用教程这篇就够了
  8. Lua开发工作笔记0001---什么是热更新为什么要热更
  9. 5817. 【NOIP提高A组模拟2018.8.15】 抄代码
  10. linux定时执行任务命令,crontab(linux下定时执行任务命令)
  11. PHP百度收录量查询接口源码,百度收录量API查询PHP源码
  12. bag of word C++图像批量读写
  13. AutoCAD如何将dwf转成dwg格式
  14. Windows 7硬盘安装工具 NT6 HDD Installer v3.0(含图文教程)
  15. win10计算机历史记录,教你win10如何查看电脑开机历史记录
  16. 第一课:电极的安放位置和测量
  17. SEO专用虚拟主机横空出世
  18. matlab中ode指令,[转载]MATLAB中ODE的使用
  19. 【IOS】《捕鱼达人》的简单实现(一)
  20. PhpSpreadsheet中文文档 | Spreadsheet操作教程实例

热门文章

  1. css用hover制作下拉菜单
  2. java- WatchService监控
  3. 类的 三大特性 封装,继承,多态 overload与override的区别
  4. spring 4.0 JUnit简单的Dao,Service测试
  5. 软件工程——理论、方法与实践 第一章
  6. HDU 4403 A very hard Aoshu problem DFS
  7. python利用有道词典翻译_使用Python从有道词典网页获取单词翻译
  8. python卸载opencv_20.Windows python,opencv的安装与卸载
  9. 文件服务器上传文件的过程,文件服务器上传文件实现过程【分享】
  10. 多个html如何套用套一个头部,Vue.js项目中管理每个页面的头部标签的两种方法...