1.坐标系

最常用的就是map,odom,base_link,base_laser坐标系,这也是开始接触gmapping的一些坐标系。

map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame),一般与机器人所在的世界坐标系一致。

base_link:机器人本体坐标系,与机器人中心重合,当然有些机器人(PR 2)是base_footprint,其实是一个意思。(base_link坐标系原点一般为机器人的旋转中心,base_footprint坐标系原点为base_link原点在地面的投影,有些许区别(z值不同))

odom:里程计坐标系,这里要区分开odom topic,这是两个概念,一个是坐标系,一个是根据编码器(或者视觉等)计算的里程计。但是两者也有关系,odom topic 转化得位姿矩阵是odom-->base_link的tf关系。这时可有会有疑问,odom和map坐标系是不是重合的?(这也是我写这个博客解决的主要问题)可以很肯定的告诉你,机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map-->odom的tf怎么得到?就是在一些校正传感器合作校正的package比如amcl会给出一个位置估计(localization),这可以得到map-->base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map-->odom的tf就是0.

base_laser:激光雷达的坐标系,与激光雷达的安装点有关,其与base_link的tf为固定的。

参考:http://www.ros.org/reps/rep-0105.html

2.包

在ROS中,进行导航需要使用到的三个包是:
      (1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置;
      (2) gmapping:根据激光数据(或者深度数据模拟的激光数据)建立地图;(gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图。)
      (3) amcl:根据已经有的地图进行定位。

3.MoveIT

moveit是ros中一系列移动操作的功能包的组成,主要包含运动规划,碰撞检测,运动学,3D感知,操作控制等功能。

1.move_group:move_group是moveit的核心部分,可以综合机器人的各独立组件,为用户提供一系列的动作指令和服务。move_group类似于一个积分器,本身并不具备丰富的功能,主要做各功能包和插件的集成。它通过消息或服务的形式接收机器人上传的点云信息,joints的状态消息,还有机器人的tf tree,另外还需要ros的参数服务器提供机器人的运动学参数,这些参数会在使用setup assistant的过程中根据机器人的URDF模型文件,创建生成,包括SRDF文件和配置文件。

2.motion panning(运动规划):在moveit中,运动规划算法是由运动规划器(motion planner)完成,而规划器是作为插件来安装的,可以通过ROS的pluginlib接口来加载需要的规划器。运动规划算法有很多,每一个运动规划器都是moveit的一个插件,可以根据需求选用不同的规划算法,move_group默认使用的是OMPL算法。

3.Planning Scene(规划场景):可以为机器人创建一个具体的工作环境,加入一些障碍物。

4.Kinematics(运动学):运动学算法是机械臂各种算法中的核心,尤其是逆运动学算法IK(inverse kinematics)。什么是逆运动学(IK)?简单说,就是把终端位姿变成关节角度,q=IK(p)。p是终端位姿(xyz),q是关节角度。为什么要用IK?OMPL是采样算法,也就是要在关节空间采样。 这与无人车的规划有一个最明显的区别,无人车的目标就是在采样空间, e.g. 目标是(x,y), 采样空间也是(x,y). 但是对于机械臂,目标是终端空间位置(xyz), 但采样空间却是关节空间(q0,q1,…qN)。有了IK之后,我们就可以把三维空间的目标p转化为关节空间的目标q。那么这样就会让采样算法能算的更快,具体方法不赘述,这样的算法有RRT-Connect,BKPIECE等等双向采样算法。moveit使用插件的形式可以让用户灵活的选择需要使用的反向运动学算法,也可以选择自己的算法。moveit中默认的IK算法是numerical jacobian-base算法。

5.collision checking(碰撞检测):moveit使用CollisionWorld对象进行碰撞检测,采用FCL(Flexible Collision Library)功能包。碰撞检测是运动规划中最耗时的运算,往往会占用90%左右的时间,为了减少计算量,可用通过设置ACM(Allowed Collision Matrix)来进行优化,如果两个bodys之间的ACM设置为1,则意味着这两个bodys永远不会发生碰撞,不需要进行碰撞检测。

6.OMPL(open motion planning library):开源运动规划库,是一个运动规划的C++库,其中包含了很多运动规划领域的前沿算法。虽然OMPL里面提到了最优规划,但总体来说OMPL还是一个采样规划算法库。而采样规划算法中,最出名的莫过于RRT(rapidly-exploring random trees)和PRM(probabilistic roadmap)。 OMPL能做什么? 简单说,就是提供一个运动轨迹。给定一个机器人结构(假设有N个关节),给定一个目标(比如终端移到xyz),给定一个环境,那么OMPL会提供给你一个轨迹,包含M个数组,每一个数组长度是N,也就是一个完整的关节位置。沿着这个轨迹依次移动关节,就可以最终把终端移到xyz,当然,这个轨迹应当不与环境中的任何障碍发生碰撞。为什么用OMPL? 运动规划的软件库和算法有很多,而OMPL由于其模块化的设计和稳定的更新,成为最流行的规划软件库之一。很多新算法都在OMPL开发。很多其他软件(包括ROS/MoveIt)都使用OMPL做运动规划。

7.用moveit控制机器人大概分以下几步:
a.建立机器人URDF模型
b.建立机器人ros驱动
c.生成moveit配置文件
d.标定相机
e.修改moveit配置文件和launch文件
其中在进行仿真操作过程中,不需要b,d,e三个步骤。

由浅到深理解ROS(9)- 几个基本概念的理解 坐标系 包相关推荐

  1. Nginx由浅到深-尚硅谷nginx教程

    Nginx由浅到深 前言 一.nginx的基本概念 1.反向代理 2.负载均衡 3.动静分离 二.nginx在linux下的安装 1.安装nginx相关依赖 安装 pcre 依赖 安装剩余依赖 2.安 ...

  2. 由浅到深理解ROS(4)

    消息和消息类型 节点能相互传递消息,节点之间通信也是基于消息.消息类型也就是数据类型数据类型,理解消息的类型很重要,因为它决定了消息的内容.也就是说,一个话题的消息类型能告诉你该话题中每个消息携带了哪 ...

  3. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  4. 十四. 四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<下>

    十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(上) 十三.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(中) 十四.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算 ...

  5. 【TensorFlow】TensorFlow从浅入深系列之十三 -- 教你深入理解模型持久化(模型保存、模型加载)

    本文是<TensorFlow从浅入深>系列之第13篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  6. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层

    本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  7. 【TensorFlow】TensorFlow从浅入深系列之十一 -- 教你深入理解卷积神经网络中的卷积层

    本文是<TensorFlow从浅入深>系列之第11篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  8. 【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)

    本文是<TensorFlow从浅入深>系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  9. 【TensorFlow】TensorFlow从浅入深系列之四 -- 教你深入理解过拟合问题(正则化)

    本文是<TensorFlow从浅入深>系列之第4篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  10. 【TensorFlow】TensorFlow从浅入深系列之二 -- 教你通过思维导图深度理解深层神经网络

    本文是<TensorFlow从浅入深>系列之第2篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

最新文章

  1. Spring复习笔记:3
  2. couchdb 视图操作_couchDB视图
  3. 给想学python-零基础的小白,如何学Python才能更快就业?
  4. 端计算(3)-kotlin(1)
  5. RDBMS 与 非RDBMS
  6. Hadoop--MapReduce_Hadoop序列化
  7. Matlab线性/非线性规划优化算法(2)
  8. Linux内核热补丁方案对比
  9. matplotlib绘图实例:pyplot、pylab模块及作图参数
  10. 使用Cron和PHP检测网页是否被篡改
  11. 机电大作业(第一阶段)
  12. 怎样采集百家论坛MP3讲座
  13. Docker Redis远程主机强迫关闭了一个现有的连接
  14. Linux:crond任务调度之at定时任务
  15. DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
  16. flutter手写画板,保存存成图片并上传到后台服务器
  17. 【Hack The Box】linux练习-- Blunder
  18. glob模块中的glob.glob和golb.iglob
  19. 范式1NF,2NF,3NF
  20. 12306打不开怎么办?

热门文章

  1. 弹出框设置在页面居中
  2. 2015.5.21 Core Java Volume 1
  3. [转]listview中设置背景图片后 拉动变黑
  4. CodeForces 841B (B) 博弈
  5. java c++ python哪个好_程序员学java好还是python语言好 c++又如何
  6. set集合判断集合中是否有无元素_一文了解 JavaScript 中的 Set(集合)- 对 Set 的扩展...
  7. 华为h22h05服务器做raid_华为V5服务器 RAID控制卡(LSI SAS3008IR)
  8. threejs- z-fighting 问题
  9. 鸿蒙系统什么时候超过苹果,为何任正非说鸿蒙系统想超过苹果系统需要的时间,不会超过300年...
  10. java 析构函数_C++虚函数