精华内容
下载资源
问答
  • 为帮助上肢活动不便的老人、残疾人完成自主进食等行为,开发了一套基于双目...采用多自由度助老助残机器人和Bumblebee2立体视觉系统构建定位实验系统,定位误差在1.2 cm范围内,满足对助老助残机器人定位精度的要求。
  • 如何提高工业机器人视觉系统在不确定性动态环境中的定位精度机器人完成复杂任务的一个关键技术问题。针对采 用单摄像机的机器人和基于位置的视觉伺服控制存在的精度问题,提出一种将基于模型控制方法和基于智能...
  • 工业机器人视觉定位系统高精度标定研究pdf,工业机器人视觉定位系统高精度标定研究
  • 研究UHF-RFID环境中移动机器人的定位问题,提出一种基于自适应UKF滤波器组的移动机器人定位方法,融合UHF-RFID和机器人内部传感器信息,以实现初始位姿未知的移动机器人定位.首先,利用UHF-RFID系统对移动机器人进行初始...
  • 提出了低频电磁波、 视觉、 计程轮这3 种管道机器人定位方法;分析了3 种传感器定位精度、作用范围和工作速率的特点;在考虑3 种定位方法精度条件下, 给出了传感器的优先权系数计算方法与基于优先权系数的D-S证据融合...
  • 扫地机器人定位方案

    千次阅读 2018-05-31 10:16:20
    原理:是通过激光探头360°不断旋转测量扫地机器人与环境距离变化,经过复杂的运算得出扫地机器人与信标(室内的参照物)的相对位置,再代入已知的信标位置坐标,解出机器人的绝对坐标来实现定位。 优点:定位的坐标...

    1. 常见定位方案

    这里写图片描述
    这里写图片描述

    2. RPS激光定位:

    • 原理:是通过激光探头360°不断旋转测量扫地机器人与环境距离变化,经过复杂的运算得出扫地机器人与信标(室内的参照物)的相对位置,再代入已知的信标位置坐标,解出机器人的绝对坐标来实现定位。
    • 优点:定位的坐标精度高;
    • 缺点:探头价格昂贵,而且工作时需要不停地旋转,寿命很有限。

    3. vSLAM图像位移定位

    • 原理:利用全景图像采集系统并结合图像拼接技术得到球形全景图,配合SIFT特征提取方法提取参照物特征,再利用球形摄像机模型技术及多视图几何约束原理恢复三维信息,并且以扩展卡尔曼滤波与粒子滤波方法进行系统的更新,在复杂未知环境下实现扫地机机器人的自主定位。
    • 优点:
    • 缺点:算法复杂,对硬件资源要求高,而且还对外界环境要求高,因此这种定位方式对机器人的硬件和参照物特征要求高,定位精度波动性大

    4. 无线载波室内定位(室内GPS定位)

    • 原理:利用三点式导航的原理,在室内建立一个发射信号的模块,机器人通过测算自身跟该信号的偏移角度来确定自己的位置。根据无线载波探头测量得到的机器人与信标的距离来确定移动中机器人位置的方法。在扫地机器人定位中通过充电座和机器人无线载波探头双重测量距离变化定位坐标。
    • 优点:实现方式简单,精度高

    5. 总结

    • 通过对三种该定位方式实现原理及优劣势的对比不难发现,无线载波室内定位系统综合优势最为明显,也因此有不少品牌选择这一定位方案来帮助扫地机器人实现智能规划清扫。
    展开全文
  • 支持 1 维、2 维、3 维定位,1 维、2 维典型定位精度 10cm,第 3 维典型定位精度 30cm;在 50Hz 定位输出频率下,同时支持 40 个标签,8 个基站定位。支持分布式测距与数传,实现不受地域限制的集群编队;支持纯数传...
  • 包括高动态环境中准确,鲁棒的定位方法,以及高动态环境的建图方法,是否对动态物体建图?如何去除动态物体的残影?如何建立纯静态场景地图?以及基于语义,物体,拓扑的建图方法等。 本文仅做学术分享,如有侵权,...

    点击上方“3D视觉工坊”,选择“星标”

    干货第一时间送达

    作者丨robot L@知乎

    来源丨https://zhuanlan.zhihu.com/p/153394930

    本文介绍IROS2020的一篇文章:

    T. Shan, B. Englot, D. Meyers, W. Wang, C. Ratti, D. Rus. LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping, IEEE/RSJ International Conference on Intelligent Robots and Systems, 2020.

    附上作者Tixiao Shan上传到Youtube的视频:

    原视频地址:youtube.com/watch?

    作者Tixiao Shan在2018年发表过LeGO-LOAM,当时他还在史蒂文斯理工学院读博士,19年毕业之后去了MIT做助理研究员(羡慕.jpg)。。。这篇文章LIO-SAM实际上是LeGO-LOAM的扩展版本,添加了IMU预积分因子和GPS因子,去除了帧帧匹配部分,然后更详细地描述了LeGO-LOAM帧图匹配部分的设计动机和细节。

    代码已开源,传送门:TixiaoShan/LIO-SAM(https://github.com/TixiaoShan/LIO-SAM)

    PS:今天上github查了一下LeGO-LOAM,发现有许多有趣的版本,比如这个:https://github.com/irapkaist/SC-LeGO-LOAM

    将基于欧式距离的回环检测换成了基于全局描述子Scan Context的回环检测。还有这个:https://github.com/facontidavide/LeGO-LOAM-BOR/tree/speed_optimization

    从代码层面进行了改进,优化了速度和代码可读性等。


    目录

    • 内容介绍

    • 研究背景

    • 方法

      • 综述

      • 激光里程计因子

      • GPS因子

    • 实验验证

      • 旋转数据集

      • 行走数据集

      • 校园数据集

      • 公园数据集

      • 阿姆斯特丹数据集

    • 总结

      • 核心思想

      • 优缺点

      • 展望


    1. 内容介绍

    本文提出了一种紧耦合激光-惯性里程计方法,通过优化包含LiDAR里程计因子,IMU预积分因子,GPS因子和回环因子来得到机器人的全局一致的位姿。作者使用帧-局部地图匹配代替LOAM的帧-全局地图匹配,提高了帧图匹配的效率(个人感觉这并不算一个新的创新点,因为作者在LeGO-LOAM中已经用了帧-局部地图匹配)。

    图1. (a)操作员手持设备。(b)LIO-SAM使用激光和IMU数据的建图结果。

    2. 研究背景

    LOAM是目前为止激光里程计(LO)领域最经典最广泛使用的方法。但是它存在一个问题,就是它直接存储全局体素地图而不是局部地图,从而很难执行回环检测以修正漂移,或者组合GPS等测量进行位姿修正。并且体素地图的使用效率会随时间降低。为了克服该问题,作者只独立地存储每个关键帧的特征,而不是在位姿估计完成后就将特征加入到全局地图中。

    另一方面,IMU和LiDAR的联合位姿估计已经被广泛研究,大致分为两类。第一类是松耦合的方法,例如LOAM和LeGO-LOAM中使用IMU去除LiDAR点云的运动畸变,以及[8]-[12]使用EKF整合LiDAR和IMU的测量。第二类是紧耦合的方法,例如R-LINS[15],使用误差状态卡尔曼滤波器迭代地修正机器人的位姿估计,再比如LIOM [16]联合优化LiDAR和IMU测量。但是LIOM一次性处理所有测量,因此不能实时运行。而本文也属于紧耦合的激光-惯性里程计方法,只是采用了因子图优化而不是滤波的方法。

    3. 方法

    A. 综述

    图2展示了LIO-SAM的因子图。图中主要包含四种因子。第一种是IMU预积分因子(橙色),由两个相邻关键帧之间的IMU测量积分得到。第二种是激光里程计因子(绿色),由每个关键帧和之前n个关键帧之间的帧图匹配结果得到。第三种是GPS因子(黄色),由每个关键帧的GPS测量得到。第四种是回环因子(黑色),由每个关键帧和候选回环关键帧的时序相邻的2m+1个关键帧之间的帧图匹配得到。此外,因子图优化通过iSAM2[18]完成。

    图2. LIO-SAM的系统结构。

    IMU预积分因子在robot L:【论文阅读12】On-Manifold Preintegration (https://zhuanlan.zhihu.com/p/108203458,Part2:技术细节)一文中已经介绍过,回环因子在LeGO-LOAM中已经介绍过,不再赘述。这里详细介绍后激光里程计因子和GPS因子。

    B. 激光里程计因子

    在本文中,只使用关键帧的特征,非关键帧的特征全部被抛弃。采用LOAM[1]或LeGO-LOAM[7]的方法提取第  个关键帧的特征  ,前者是边缘特征,后者是平面特征。当新的关键帧  到来时,利用之前n+1个关键帧的特征集合  和位姿估计 构建局部地图  ,其中

     (1)

     和  是变换到世界坐标系中的第  个关键帧的特征。  和  是世界坐标系中的局部边缘特征地图和局部平面特征地图。

    之后,我们利用LOAM中的方法匹配  和  ,以及  和  ,建立点线和点面距离约束。通过最小化所有约束,优化  。点云匹配和位姿优化过程与LOAM/LeGO-LOAM相同,不再赘述。不同的是,这里使用过去n+1帧关键帧的组合点云而不是全局点云和最新帧进行匹配。

    C. GPS因子

    当接收到GPS测量后,我们首先使用[20]的方法变换它们到笛卡尔坐标系中。当一个新的位姿节点被插入到因子图后,我们关联GPS因子到该位姿节点中去。具体地,我们线性插值GPS的时间戳,得到对应最新位姿节点的GPS位置。

    由于在GPS信号一直存在的时候,持续添加GPS因子没有意义。因为漂移很缓慢。所以在实际操作过程中,我们只添加GPS因子当位姿估计协方差矩阵变得很大的时候。

    4. 实验结果

    我们比较了提出的LIO-SAM,LOAM以及LIOM。此外,我们的实验基于三种不同的实验平台,如图3所示。

    图3. 三种不同的实验平台。

    A. 旋转数据集

    该实验验证我们仅使用IMU因子和激光里程计因子时,系统的鲁棒性。在该实验中,我们静止在原地,并快速晃动手中的传感器设备。LOAM和LIO-SAM的建图结果如图4所示。LIOM由于采用了[24]的初始化方法较为敏感,在该数据集中不能初始化成功,因此没有显示它的建图结果。

    图4. 实验1的建图结果对比。、

    B. 行走数据集

    该测试用来验证我们方法经历剧烈平移和旋转运动时的表现。在数据收集阶段,使用者手持传感器在MIT校园内快速行走。可以看出LOAM,LIOM和我们的LIO-SAM的建图效果递增。LIOM不能实时运行,其他两种算法可以实时运行。

    图5. 实验2的建图结果比较。

    C. 校园数据集

    该测试用来验证引入GPS和回环因子的好处。为此,去除GPS和回环因子的系统被称为LIO-odom;去除回环因子使用GPS因子的系统被称为LIO-GPS;适用所有因子的系统为LIO-SAM。在该数据集中,使用者手持平台在MIT校园中行走,并回到起点的相同位置。由于有树木的遮挡,部分区域接收不到GPS信号。图6展示了各种方法的轨迹和LIO-SAM的建图结果。

    图6. 实验3的轨迹图和LIO-SAM的建图结果。

    表2总结了各种方法回到原点后的相对平移误差。

    D. 公园数据集

    在该实验中,我们将传感器放到UGV上,并驾驶它沿着公园的林荫小路行走。在40分钟后,该小车回到了原点。图7展示了不同算法的轨迹图,表2总结了各种方法的相对平移误差。

    图7. 实验4的轨迹图和LIO-SAM的重建结果。

    E. 阿姆斯特丹数据集

    在该实验中,我们将传感器放到船上,并绕着阿姆斯特丹运河行驶了三个小时。建图结果如图8所示。

    此外,表4总结了各种方法平均每帧的运行时间。和LIO-SAM能够承受的数据倍速播放上限。

    5. 总结

    A. 核心思想

    基于激光雷达,IMU和GPS多种传感器的因子图优化方案,以及在帧图匹配中使用帧-局部地图取代帧-全局地图。

    B. 优缺点

    第一个优点是紧耦合了多种不同传感器,运动估计结果更鲁棒。

    第二个优点是使用增量平滑和建图方法iSAM2执行因子图优化。iSAM2是真的好用,只需要设计因子就完事儿了,其他部分完全不用管,增量优化帮你搞定一切。时间-精度平衡,不存在的。

    缺点一是关键帧之间的特征被完全丢弃。能否设计一种简单高效的方法同时利用关键帧之间的激光帧的(部分)特征?这样的好处是信息损失更少,有利于提高精度。

    缺点二是没开源(划掉。

    C. 展望

    使用IMU预积分来利用IMU测量已经是惯用手法。帧-局部地图匹配也在其他LO/LIO中被使用过,例如SuMa和IMLS-SLAM使用的都是帧-局部地图匹配,以及这篇LIO文章robot L:【论文阅读9】3D LiDAR Inertial Odometry and Mapping(https://zhuanlan.zhihu.com/p/106291845)也使用了帧-局部地图匹配。为了提速,仅使用关键帧,剔除中间帧的想法借鉴自视觉SLAM,以后在激光SLAM中也会逐渐流行起来。LO以及LiDAR和其他传感器融合的SLAM领域还有什么可做的呢?

    我觉得首先LIDAR点云的特征点提取这种基础工作有待进一步改进,无论是LOAM还是LeGO-LOAM,特征点提取方法都非常简单。能够提取出更加通用,稳定,高效的特征点的方法是非常关键的。因为后续的匹配算法对特征点的质量非常敏感,虽然短期可能看不出来,但是长期来看,好的特征非常重要。

    其次,如何处理高动态环境也是一个开放问题。包括高动态环境中准确,鲁棒的定位方法,以及高动态环境的建图方法,是否对动态物体建图?如何去除动态物体的残影?如何建立纯静态场景地图?以及基于语义,物体,拓扑的建图方法等。

    本文仅做学术分享,如有侵权,请联系删文。

    下载1

    在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

    下载2

    「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

    下载3

    「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

    重磅!3DCVer-学术论文写作投稿 交流群已成立

    扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

    同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。

    一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

    ▲长按加微信群或投稿

    ▲长按关注公众号

    3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

    学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

     圈里有高质量教程资料、可答疑解惑、助你高效解决问题

    觉得有用,麻烦给个赞和在看~  

    展开全文
  • 机器人定位误差标定模型

    千次阅读 2019-05-17 08:18:14
    概述 以工业机器人为基础,构建柔性制造单元或柔性生产线,实现产品自动化、柔性化、智能化生产...然而,现有机器人技术发展水平与现实的应用之间尚存在较大的差距:绝对定位精度低,(在重复性应用中,采用示教的...

    概述

    以工业机器人为基础,构建柔性制造单元或柔性生产线,实现产品自动化、柔性化、智能化生产必将成为现代制造发展的重点。
    新型产业环境下,工业机器人的应用范围将越来越广泛、作业任务也将越来越精细复杂,为满足现代制造技术及工艺的发展需求,工业机器人必须具备高精度、高柔性、自我维护和感应识别等特性。然而,现有机器人技术发展水平与现实的应用之间尚存在较大的差距:绝对定位精度低,(在重复性应用中,采用示教的方法,较高的重复定位精度可以胜任。对于重复定位精度±0.05mm的机器人系统,其绝对定位精度一般只到2-3mm。)缺乏感知识别能力。
    高精度机器人的应用领域:汽车制造领域,航空航天制造领域,电子电器行业,军工制造领域。
    工业机器人误差补偿技术可以分为在线补偿和离线补偿两种方式。在线补偿是指借助激光跟踪仪、立体视觉测量系统、空间测量定位系统 w MPS(workspace Measuring and Positioning System)、力或加速度计等实时测量设备对机器人末端位姿进行高精度测量,得到末端位姿误差,并通过误差补偿算法直接对末端执行器的位姿进行修正。离线补偿也称为误差标定技术,是通过预先测量机器人多个关节构形下的末端位姿误差,辨识机器人运动学参数的准确值,或建立机器人空间定位误差库、温度误差库等,并将补偿数据预置在控制算法中,从而提高机器人实际作业时的位姿精度。
    在线补偿使用外部高精度测量设备来引导机器人提高运动精度。
    离线补偿通过建立离线的位姿误差模型,并将补偿数据预置到控制算法中。

    机器人运动学模型

    完备的运动学模型应具备三点特征:完整性(模型具备充足的参数来表达所有误差因素)、连续性(模型为几何参数的连续函数)、极小性(模型无冗余参数存在)。
    DH模型,在相邻两关节轴线平行时DH模型存在奇异性48,
    在相邻连杆坐标系中引入附加旋转参数的MDH模型。在相邻轴线垂直时出现奇异状态。49,50
    S模型51,利用6个参数直接描述相邻连杆坐标系之间的位姿关系,但失去了连续性。
    CPC模型,引入了冗余参数因子52,53。
    POE模型,基于旋量理论的指数积表达式,利用机器人零位下各转轴方向对其运动学进行描述,该模型满足 Roth 提出的完美模型的3 点特征,但是在实际应用中实现比较复杂。
    末端位姿测量:球杆仪,经纬仪,全站仪,三坐标测量机,摄影测量系统,激光跟踪仪等。

    机器人运动学模型标定:

    建立了kuka机器人的DH模型。设置不同的机械臂固有参数,由关节转角得到仿真末端位姿(模拟高精度测量实验数据)。由关节转角和末端位姿使用优化的方法(线性最小二乘,非线性最小二乘,扩展卡尔曼滤波法80)得到机械臂运动学模型参数。辨识到运动学模型参数的实际值后,通过修改机器人运动学模型参数的理论值可以直接计算出某关节构型对应的准确末端位姿。在实现机器人定位误差补偿时,需要根据辨识到的参数使用机器人逆运动学计算关节角度。机器人运动学模型标定的商业应用:商业化产品dynacal,caliware,motocal,rocal等标定软件。可以实现包括机器人本体标定,机器人温度补偿,工具校准,夹具对其等功能。

    机器人非模型标定:

    基于曲线拟合,空间网格,神经网络。对局部空间内位姿误差进行估计与补偿。84
    曲线拟合,需要使用优化的方法计算曲线中各个参数。
    多项式拟合步骤:选择多项式类型,决定函数大小,使用实验数据估计系数。生成改进的关节空间或者在标定空间的误差修正。

    空间网格:

    基于空间插值的定位误差标定是通过一定步长将机器人作业空间划分为一系列的立方体网格,然后测量各个网格节点处的位姿误差。对于工作空间中的任意目标点,可以用这个点周围的8个点通过加权平均的方式求出。基本步骤为:网格划分,误差测量,空间插值。

    神经网络:

    首先以关节旋转角及其对应的位姿误差分别作为输入输出来训练神经网络,利用训练好的神经网络计算机器人在不同关节构型处对应的末端定位误差,最终通过补偿机器人关节转角的方法来提高机器人绝对定位精度。或者以某一关节旋转角下的理想位姿及理想位姿和实际位姿的误差分别作为输入输出来训练神经网络。我认为最实用的是输入实际位姿,输出偏差,以便能根据实际要到的位置调整指令位置。
    基于神经网络的误差标定方法避免了复杂的建模过程,克服了参数辨识的不足。

    模型自标定:

    基于固定约束的模型自标定,不同于几何误差标定模型,操作流程可以实现自动化,可以实现在线标定。
    使用机器人视觉测量系统,从不同的位姿测量工作环境中某一个固定点,基于固定点约束建立几何误差自标定模型,辨识几何参数。

    手眼标定:

    Visp实现手眼标定的步骤:
    获取多组基座和末端执行器的位姿关系和对应的图片
    从图像计算目标相对于相机的位姿。
    由多对基-末和相-目标关系计算出相机相对于机械臂末端的位姿。

    后面会陆续给出这些模型的具体实现代码。

    展开全文
  • 为实现工业机器人对目标对象的三维定位,提出了一种线结构光视觉引导的新型工业机器人定位系统。以工业相机、激光器和振镜组成的线结构光自扫描测量装置作为视觉传感器,借助振镜转动实现激光平面对目标对象的扫描,...
  • 针对现有煤矿井下移动机器人定位方法存在定位难、精度低的问题,提出了一种基于捷联惯导和里程计的井下机器人定位方法。该方法利用卡尔曼滤波对捷联惯导进行初始对准,以此确定定位的初始坐标,得到初始姿态转换矩阵...
  • 为了满足机器人精确定位的要求,提出一种基于多传感器信息融合的自定位算法并介绍了如何利用 Matlab 搭建移动机器人定位系统的仿真模型。仿真程序建立了移动机器人活动的虚拟环境,模拟了机器人的运动模型、里程 计、...
  • 针对移动机器人定位过程中噪声统计特性不确定的问题,提出一种模糊自适应扩展卡尔曼滤波定位方法。利用模糊理论和协方差...实验结果表明,该方法可以有效地降低观测噪声先验信息不确定的影响,提高机器人定位精度
  • 针对EKF中观测噪声方差估计不准确...该算法融合了里程计采集的机器人内部数据和激光雷达传感器采集的外部环境特征,在测量更新阶段多次迭代状态估计值并对机器人的位姿进行修正,减少了非线性误差,提高了定位精度
  • 为了解决常规Kalman滤波算法在移动机器人定位过程中运算量大、精度不高的问题,在分析传统Kalman滤波器缺点的基础上,提出了一种基于U-T参数变换的方法对常规Kalman滤波算法进行了改进。改进后的Kalman滤波算法消减...
  • 本文基于MSP430F149单片机设计的室外移动机器人组合导航定位系统,通过接口的扩展使得该款定位系统能够接入IMU、GNSS接收机、气压计三路信息,完成初步导航定位服务功能,同时可作为多路数据采集设备,将多路数据...
  • 给出了自主移动机器人定位的两种算法 :解析算法和数值算法。解析法公式较以往 的简洁。数值算法结合解析法和高斯-牛顿算法,不仅能避免因初值选取不合理而导致求解过程发 散的问题,而且能提高运算精度和速度。通过对...
  • 对于单一视觉传感器,采用图像坐标系转换求反正切法,分段比例法及针孔摄像机成像模型的方法,以blob面积为优选条件选择定位方式,从而得到精度较高的定位结果.实验结果证明了该视觉系统设计的合理性及定位方法的有效性....
  • 卫星导航系统具有精度高、定位范围广和误差不随时间累积等优点,但其自主性差、易受外界遮挡和干扰、接收机数据更新频率低等缺点。因此工程上常常将两者互补结合使用,组成卫星/惯性组合导航系统。 本文以低功耗MSP...
  • 针对移动机器人的粒子滤波SLAM(同时定位与建图)方法中需要大量粒子来提高精度的问题,将粒子群优化思想引入到FastSLAM 中,提出了一种基于粒子群优化的同时定位与建图方法。
  • 0x00 为何需要对机器人进行定位? 要想实现移动式机器人的自动导航需要完成以下六点,当然这些信息是我自己总结的仅供大家参考: (1)一张完整的高精度全局地图,机器人需要在该地图下完成自动导航,这是进行自动...

    转自链接:http://www.corvin.cn,有兴趣请移步学习。

     

    0x00 为何需要对机器人进行定位?

    要想实现移动式机器人的自动导航需要完成以下六点,当然这些信息是我自己总结的仅供大家参考:

    (1)一张完整的高精度全局地图,机器人需要在该地图下完成自动导航,这是进行自动导航的必要且重要的前提;

    (2)机器人在地图的哪个位置上,确定机器人当期位姿,用于确定机器人的起始状态;

    (3)机器人需要到达的目的地在地图上哪里,确定机器人在地图上的最终位姿,用于确定机器人的结束状态;

    (4)根据机器人在地图上的当前位姿和目的地位姿两点信息,如何规划出一条完美的移动路径使其可以从当前位置移动到目的位置;

    (5)尽可能根据全局地图来移动机器人同时需要进行局部路径的规划,防止全局路径上突然出现障碍物,因此需要不断小距离的规划局部路径来移动机器人使其避障。

    (6)随着机器人的不断移动,全局路径也需要不断的重新规划,因为从当前位置移动到目的位置需要时间,全局路径规划只在某一确定时间点下是有效的,随着机器人位置不断变化和时间的流逝,开始时候规划的全局路径已经变得不可靠,因此需要不断的更新全局路径。

    对于第一点的建立一张全局地图,我们在第3篇教程在STDR仿真器中使用gmapping构建2D栅格地图中已经介绍过了,本次教程主要就是为了解决第二点,我们如何确定机器人在一张确定的地图上的位姿状态,在这里就用到了AMCL软件包,AMCL的全称是Adaptive Monte Carlo Localization自适应蒙特卡罗定位,是移动机器人在二维环境下的概率定位算法,它实现了自适应(或kld采样)的蒙特卡罗定位方法,作用是针对已有的地图使用粒子滤波器跟踪确定一个机器人的位姿信息。对机器人的定位是非常重要的,因为若无法正确定位机器人当前位置,那么基于错误的起始点来进行后面规划的到达目的地的路径必定也是错误的,那么按照错误的路径来移动必定是无法到达目的地的,因此我们需要一种资源消耗低,定位速度快,定位精度好,可以稳定定位机器人当前位置的算法是重中之重。

    我们可以感受到要想做好机器人的自动导航发现每一步都是非常重要的,第一步就是需要有高精度的全局地图,接下来对机器人在当前地图下的定位就是第二件重要的事,只有一步一步的做好每一步才能做出最完美的自动导航系统。

     


    0x01 AMCL是如何实现对机器人进行定位的呢?

    AMCL使用的是粒子滤波的方式来实现对机器人的定位,下面我使用一个简单形象的例子来介绍这个定位过程是如何实现的。你可以想象这样一个场景,你站在一个商业广场上,这个广场就相当于一张全局地图。我在广场上随机的分布了100个妹子,这些妹子就是粒子用来对你进行跟踪定位的,当然现在这些妹子都不知道要跟踪定位的目标就是你啊。你也不认识妹子们,你现在漫无目的的往前移动5步,你突然发现你面前有一个火锅店,你就饿了想吃火锅,就顺便在广场上吼了一嗓子,“我往前走了5步就发现前面有个火锅店啊,我要去吃火锅“。妹子们根据你的信息也来同样的移动,然后就开始观察自己的前面有没有火锅店啊,那肯定是前面有火锅店的妹子附近才有要跟踪的目标啊。此时,由于开始的时候妹子们是随机分布在广场上,面朝的方向肯定也是各部相同,有的肯定就不能发现自己前面有火锅店,那这个妹子就肯定很伤心,自己就退出这个任务了。那些可以发现了火锅店的妹子就很开心,距离目标很近啊,所以她就开始再生出一个妹子跟自己一起来完成这个任务,因为自己找到目标的概率很大啊,可以想象现在这群妹子们肯定有很多就在要跟踪的目标附近了。

    那接下来你吃了火锅出来后,继续移动,你向前走了10步,做转弯后发现一个兰州拉面,你就又吼了一嗓子,”我往前走了10步,左拐个弯就发现个兰州拉面啊“。那妹子们又开始根据这个信息来也做同样的移动,此时有的妹子移动后就发现前面没有兰州拉面啊,很伤心就退出跟踪定位任务。那些移动后发现自己前面有兰州拉面的就更开心了啊,距离目标又近了一点啊,因为两次概率都在目标的附近,那她就再生出一个妹子跟着自己一起来定位目标。那可以想象一下,现在肯定广场上有更多的妹子都聚集在一起,她们都在目标的附近。

    那你吃完面后出来继续往前走20步,突然发现前面有个珠宝店,你就又吼一嗓子,”我往前走了20步,发现一个珠宝店啊“。妹子们又根据这个信息开始移动,并查看自己的前面有没有珠宝店,那些没有看到珠宝店的就给淘汰了,那发现又珠宝店的妹子就再生出一个妹子,可以想象现在基本上妹子差不多都聚集在目标的附近了,那经过多次这样的循环,即使妹子们不知道要跟踪的目标在哪里,但是可以确定自己现在所处的位置基本上跟目标位置也差不到哪里去了。所以以后我要想定位你的位置那就容易多了,即使我不知道你在哪里,我只要知道我的那群妹子在哪里就行,你基本上也就在那附近了,说实话我感觉这个过程都有点像遗传算法的过程了。

    在这里我只是简单介绍了一下例子滤波定位的原理,当然以上这个例子仅供玩乐,不必拘泥是否科学严谨,重在理解这个定位的过程,在ROS下的AMCL只实现了在laser扫描的创建的地图上,使用laser来进行定位,其实该定位方法还可以修改使用其他类型的传感器来定位,例如可以使用超声波或红外这些测距的传感器也可以实现定位。


    0x02 创建stdr_amcl测试软件包

    (1)在自己的ros工作空间src目录下创建stdr_amcl软件包,在其中编写相关launch文件来加载stdr仿真器和amcl节点来对仿真机器人在地图上定位,首先来创建软件包:

    Screenshot from 2018-06-05 09:01:34.png

    (2)在launch目录下创建stdr_amcl.launch文件,在stdr_amcl.launch文件中添加如下代码,首先将stdr仿真器加载启动,然后打开rviz并加载配置文件,然后通过map_server来加载gmapping建立的地图,最后加载amcl节点启动:

    <!--

      Copyright: 2016-2018 ROS小课堂 www.corvin.cn

      Author: corvin

      Description:

        启动amcl节点,这样就可以在全局地图上对机器人进行定位了。

      History:

        20180528: initial this file.

    -->

    <launch>

      <!--startup stdr simulator with robot0 -->

      <include file="$(find stdr_launchers)/launch/server_with_map_and_gui_plus_robot.launch"/>

     

      <!-- startup rviz node to show amcl process -->

      <node name="amcl_rviz" type="rviz" pkg="rviz" args="-d $(find stdr_amcl)/rviz/stdr_amcl_config.rviz" />

     

      <!-- load map -->

      <node name="stdr_map_server" pkg="map_server" type="map_server" args="$(find stdr_gmapping)/maps/mymap.yaml" >

        <remap from="map" to="/amcl/map" />

      </node>

     

      <!-- Run amcl -->

      <node pkg="amcl" type="amcl" name="stdr_amcl_node" output="screen">

        <!-- amcl default subscribe scan topic, now remap to /robot0/laser_0 -->

        <remap from="scan" to="/robot0/laser_0"/>

     

        <!-- amcl default subscribe map topic, now remap to /amcl/map -->

        <remap from="map" to="/amcl/map" />

     

        <!-- overall filter parameters -->

        <param name="min_particles" value="400"/>

        <param name="max_particles" value="5000"/>

        <param name="kld_err"       value="0.01"/>

        <param name="kld_z"         value="0.99"/>

        <param name="update_min_d"  value="0.05"/>

        <param name="update_min_a"  value="0.05"/>

        <param name="resample_interval"   value="2"/>

        <param name="transform_tolerance" value="0.5"/>

        <param name="recovery_alpha_slow" value="0.001"/>

        <param name="recovery_alpha_fast" value="0.1"/>

        <!-- set particles init pose to robot pose -->

        <param name="initial_pose_x" value="1.0"/>

        <param name="initial_pose_y" value="2.0"/>

        <param name="initial_pose_a" value="0.0"/>

        <param name="initial_cov_xx" value="0.25"/>

        <param name="initial_cov_yy" value="0.25"/>

        <param name="initial_cov_aa" value="0.068538917"/> <!-- pi/12 * pi/12 -->

        <param name="gui_publish_rate" value="-1.0"/>

        <param name="save_pose_rate"   value="0.5"/>

        <param name="use_map_topic"    value="true"/>

        <param name="first_map_only"   value="false"/>

     

        <!-- laser model parameters -->

        <param name="laser_min_range" value="0.05"/>

        <param name="laser_max_range" value="4.0"/>

        <param name="laser_max_beams" value="60"/>

        <param name="laser_z_hit"     value="0.95"/>

        <param name="laser_z_short"   value="0.1"/>

        <param name="laser_z_max"     value="0.05"/>

        <param name="laser_z_rand"    value="0.05"/>

        <param name="laser_sigma_hit"    value="0.2"/>

        <param name="laser_lambda_short" value="0.1"/>

        <param name="laser_likelihood_max_dist" value="2.0"/>

        <param name="laser_model_type" value="likelihood_field"/>

     

        <!-- Odometry model parameters -->

        <param name="odom_model_type" value="diff"/>

        <param name="odom_alpha1"     value="0.03"/>

        <param name="odom_alpha2"     value="0.03"/>

        <param name="odom_alpha3"     value="0.03"/>

        <param name="odom_alpha4"     value="0.03"/>

        <param name="odom_alpha5"     value="0.0"/> <!--only used if model is "omni"-->

        <param name="odom_frame_id"   value="/map_static"/>

        <param name="base_frame_id"   value="/robot0"/>

        <param name="global_frame_id" value="/map"/>

        <param name="tf_broadcast"    value="true"/>

      </node>

    </launch>

    (3)配置rviz显示,由于rviz的配置文件过长,因此现在提供压缩包下载大家解压后放到rviz目录下即可:stdr_amcl_config.rviz.tar.gz,按照下图来解压:

    Screenshot from 2018-06-05 09:21:50.png


    0x03 编译并测试stdr_amcl软件包

    (1)编译软件包需要在catkin_ws目录下执行catkin_make命令,如果想只编译stdr_amcl软件包就加上–pkg就可以了,如下图所示:

    Screenshot from 2018-06-05 09:43:23.png

    当编译完成后需要执行source devel/setup.bash来配置环境变量,这样才能使用如下命令来启动stdr_amcl软件包下的stdr_amcl.launch文件:

    roslaunch stdr_amcl stdr_amcl.launch

    Screenshot from 2018-06-05 09:53:22.png

    在robot0旁边的那一大群零散的东西就是初始化的粒子,用来定位机器人的,在初始状态下可以看到定位精度很差,粒子定位在机器人周围2米范围内,随着机器人的不断移动,粒子会逐渐收敛于机器人的位置上。

    (2)下面我们使用teleop_twist_keyboard软件包下的teleop_twist_keyboard.py来键盘遥控机器人往前走,会看到整个粒子收敛定位的过程:

    2.gif

    (3)查看rqt_graph节点和话题之间的关系图,这样可以对AMCL的正常运行的依赖条件理解更为全面:

    Screenshot from 2018-06-05 10:24:00.png

    (4)来仔细研究一下amcl节点订阅的各个话题:

    • /robot0/laser_0 (sensor_msgs/LaserScan):这是stdr中的仿真机器人的激光雷达输出的话题,在进行amcl定位时,这个是必不可少需要订阅的话题,因为我们要知道目标周围的环境状态。amcl节点默认是订阅的scan话题,这里由于robot0仿真器发布的雷达话题是/robot0/laser_0,因此需要在launch文件中使用remap来重新映射下订阅的话题。

    • /tf (tf/tfMessage):订阅了各坐标系转换的话题,用于查询各坐标系的转换。

    • /initialpose (geometry_msgs/PoseWithCovarianceStamped):用于(重新)初始化粒子滤波器的平均值和协方差,简单来理解就是先预估计一下机器人的初始位姿。

    • /amcl/map (nav_msgs/OccupancyGrid):当在launch文件中设置了use_map_topic为true时,amcl则订阅该话题获取地图,然后使用基于激光来进行定位,当然设置use_map_topic为false时不订阅该话题也是可以的。

    amcl节点发布的话题如下:

    • amcl_pose (geometry_msgs/PoseWithCovarianceStamped):机器人在地图上带有协方差的位姿估计,这个是话题是整个粒子滤波定位的最终输出结果,该话题输出的位姿信息是根据全局坐标系/map的坐标转换后的位置。

    • particlecloud (geometry_msgs/PoseArray):在粒子滤波器维护下的一组粒子位姿估计,可以直接在rviz中显示,查看粒子的收敛效果。

    • tf (tf/tfMessage):发布从odom坐标系到map坐标系的转换,当然该odom坐标系可以使用odom_frame_id参数来重新映射为自定义的坐标系名称,在stdr中由于没有odom坐标系,因此使用/map_static来代替odom坐标系。

    (5)下面来看看amcl节点提供的service:

    • global_localization (std_srvs/Empty):通过调用该服务将初始化全局定位,将所有的粒子重新打散随机的分散在地图的空闲地方,可以通过以下命令来调用该服务,当调用后可以发现所有的粒子被重新打散随机分布在地图上,然后使用键盘遥控机器人旋转,这样可以自动重新对机器人进行定位,调用效果如下图所示:

    rosservice call /global_localization "{}" 

    3.gif

    • request_nomotion_update (std_srvs/Empty):该服务是手动的来更新粒子并发布新的粒子,可以使用如下命令来调用服务执行更新粒子的操作,该服务一般需要多次调用才能逐渐看到粒子收敛的效果:

      rosservice call /request_nomotion_update "{}"

    4.gif

    amcl调用的服务:

    • static_map (nav_msgs/GetMap):我们从前面话题和节点图得知,amcl可以通过订阅/map话题来获取地图,如果在launch文件中设置use_map_static为false的话,就可以通过调用该服务来获取地图了,效果与订阅/map话题是一样的。

     


    0x04 测试amcl的定位效果

    (1)通过查看/amcl_pose话题输出来看定位位姿,可以通过以下命令来获取话题的输出:

    rostopic echo /amcl_pose

    Screenshot from 2018-06-05 15:23:10.png

     

    6.gif

    (2)在机器人的移动过程中,突然将机器人搬起来更换位置,看看能否重新定位成功:

    7.gif

    通过上面动图可以看到在我们小范围内(3米)来移动机器人,amcl的定位效果很好,粒子收敛速度很快,但是当大范围的移动时效果就不理想了,这个在机器人移动过程中如果突然将其搬起来放置到距离当前较远位置的话,会导致机器人定位突然失灵,所以对于大范围的定位算法还是有提升空间的。

    8.gif


    0x05 launch文件中各参数意义解析

    (1)滤波器可以设置的所有参数

    • ~min_particles (int, default: 100):滤波器中的最少粒子数,值越大定位效果越好,但是相应的会增加主控平台的计算资源消耗。

    • ~max_particles (int, default: 5000):滤波器中最多粒子数,是一个上限值,因为太多的粒子数会导致系统资源消耗过多。

    • ~kld_err (double, default: 0.01):真实分布与估计分布之间的最大误差。

    • ~kld_z (double, default: 0.99):上标准分位数(1-p),其中p是估计分布上误差小于kld_err的概率,默认0.99。

    • ~update_min_d (double, default: 0.2 meters):在执行滤波更新前平移运动的距离,默认0.2m(对于里程计模型有影响,模型中根据运动和地图求最终位姿的似然时丢弃了路径中的相关所有信息,已知的只有最终位姿,为了规避不合理的穿过障碍物后的非零似然,这个值建议不大于机器人半径,否则因更新频率的不同可能产生完全不同的结果)。

    • ~update_min_a (double, default: π/6.0 radians):执行滤波更新前旋转的角度。

    • ~resample_interval (int, default: 2):在重采样前需要滤波更新的次数。

    • ~transform_tolerance (double, default: 0.1 seconds):tf变换发布推迟的时间,为了说明tf变换在未来时间内是可用的。

    • ~recovery_alpha_slow (double, default: 0.0 (disabled)):慢速的平均权重滤波的指数衰减频率,用作决定什么时候通过增加随机位姿来recover,默认0(disable),可能0.001是一个不错的值。

    • ~recovery_alpha_fast (double, default: 0.0 (disabled)):快速的平均权重滤波的指数衰减频率,用作决定什么时候通过增加随机位姿来recover,默认0(disable),可能0.1是个不错的值。

    • ~initial_pose_x (double, default: 0.0 meters):初始位姿均值(x),用于初始化高斯分布滤波器。(initial_pose_参数决定撒出去的初始位姿粒子集范围中心)。

    • ~initial_pose_y (double, default: 0.0 meters):初始位姿均值(y),用于初始化高斯分布滤波器。(同上)

    • ~initial_pose_a (double, default: 0.0 radians):初始位姿均值(yaw),用于初始化高斯分布滤波器。(粒子朝向)

    • ~initial_cov_xx (double, default: 0.5*0.5 meters):初始位姿协方差(x*x),用于初始化高斯分布滤波器。(initial_cov_参数决定初始粒子集的范围)

    • ~initial_cov_yy (double, default: 0.5*0.5 meters):初始位姿协方差(y*y),用于初始化高斯分布滤波器。(同上)

    • ~initial_cov_aa (double, default: (π/12)*(π/12) radian):初始位姿协方差(yaw*yaw),用于初始化高斯分布滤波器。(粒子朝向的偏差)

    • ~gui_publish_rate (double, default: -1.0 Hz):扫描和路径发布到可视化软件的最大频率,设置参数为-1.0意为失能此功能,默认-1.0。

    • ~save_pose_rate (double, default: 0.5 Hz):存储上一次估计的位姿和协方差到参数服务器的最大速率。被保存的位姿将会用在连续的运动上来初始化滤波器。-1.0失能。

    • ~use_map_topic (bool, default: false):当设置为true时,AMCL将会订阅map话题,而不是调用服务返回地图。也就是说当设置为true时,有另外一个节点实时的发布map话题,也就是机器人在实时的进行地图构建,并供给amcl话题使用;当设置为false时,通过map server,也就是调用已经构建完成的地图。

    • ~first_map_only (bool, default: false):当设置为true时,AMCL将仅仅使用订阅的第一个地图,而不是每次接收到新的时更新为一个新的地图。

    (2)可以设置的所有激光模型参数

    请注意无论使用哪种混合权重都应该等于1,对于laser_model_type是beam时会用到4个参数z_hit,z_short,z_max和z_rand,如果是likelihood_field模型仅使用2个:z_hit和z_rand。这4个laser_z_参数,是在动态环境下的定位时用于异常值去除技术的参数。

    • ~laser_min_range (double, default: -1.0):最小扫描范围,参数设置为-1.0时,将会使用激光上报的最小扫描范围。

    • ~laser_max_range (double, default: -1.0):最大扫描范围,参数设置为-1.0时,将会使用激光上报的最大扫描范围。

    • ~laser_max_beams (int, default: 30):更新滤波器时,每次扫描中多少个等间距的光束被使用(减小计算量,测距扫描中相邻波束往往不是独立的可以减小噪声影响,太小也会造成信息量少定位不准)。

    • ~laser_z_hit (double, default: 0.95):模型的z_hit部分的混合权值,默认0.95(混合权重1.具有局部测量噪声的正确范围–以测量距离近似真实距离为均值,其后laser_sigma_hit为标准偏差的高斯分布的权重)。

    • ~laser_z_short (double, default: 0.1):模型的z_short部分的混合权值,默认0.1(混合权重2.意外对象权重(类似于一元指数关于y轴对称0~测量距离(非最大距离)的部分:–ηλe^(-λz),其余部分为0,其中η为归一化参数,λ为laser_lambda_short,z为t时刻的一个独立测量值(一个测距值,测距传感器一次测量通常产生一系列的测量值)),动态的环境,如人或移动物体)。

    • ~laser_z_max (double, default: 0.05):模型的z_max部分的混合权值,默认0.05(混合权重3.测量失败权重(最大距离时为1,其余为0),如声呐镜面反射,激光黑色吸光对象或强光下的测量,最典型的是超出最大距离)。

    • ~laser_z_rand (double, default: 0.05):模型的z_rand部分的混合权值,默认0.05(混合权重4.随机测量权重–均匀分布(1平均分布到0~最大测量范围),完全无法解释的测量,如声呐的多次反射,传感器串扰)。

    • ~laser_sigma_hit (double, default: 0.2 meters):被用在模型的z_hit部分的高斯模型的标准差,默认0.2m。

    • ~laser_lambda_short (double, default: 0.1):模型z_short部分的指数衰减参数,默认0.1(根据ηλe^(-λz),λ越大随距离增大意外对象概率衰减越快)。

    • ~laser_likelihood_max_dist (double, default: 2.0 meters):地图上做障碍物膨胀的最大距离,用作likelihood_field模型(likelihood_field_range_finder_model只描述了最近障碍物的距离,(目前理解应该是在这个距离内的障碍物膨胀处理,但是算法里又没有提到膨胀,不明确是什么意思).这里算法用到上面的laser_sigma_hit。似然域计算测量概率的算法是将t时刻的各个测量(舍去达到最大测量范围的测量值)的概率相乘,单个测量概率:Zh * prob(dist,σ) +avg,Zh为laser_z_hit,avg为均匀分布概率,dist最近障碍物的距离,prob为0为中心标准方差为σ(laser_sigma_hit)的高斯分布的距离概率。

    • ~laser_model_type (string, default: "likelihood_field"):激光模型类型定义,可以是beam, likehood_field, likehood_field_prob(和likehood_field一样但是融合了beamskip特征–官网的注释),默认是“likehood_field” 。

       

    (3)里程计模型参数

    • ~odom_model_type (string, default: "diff"):odom模型定义,可以是"diff", "omni", "diff-corrected", "omni-corrected",后面两个是对老版本里程计模型的矫正,相应的里程计参数需要做一定的减小。

    • ~odom_alpha1 (double, default: 0.2):指定由机器人运动部分的旋转分量估计的里程计旋转的期望噪声,默认0.2(旋转存在旋转噪声)。

    • ~odom_alpha2 (double, default: 0.2):机器人运动部分的平移分量估计的里程计旋转的期望噪声,默认0.2(旋转中可能出现平移噪声)。

    • ~odom_alpha3 (double, default: 0.2):机器人运动部分的平移分量估计的里程计平移的期望噪声,如果你自认为自己机器人的里程计信息比较准确那么就可以将该值设置的很小。

    • ~odom_alpha4 (double, default: 0.2):机器人运动部分的旋转分量估计的里程计平移的期望噪声,你设置的这4个alpha值越大说明里程计的误差越大。

    • ~odom_alpha5 (double, default: 0.2):平移相关的噪声参数(仅用于模型是“omni”的情况,就是当你的机器人是全向移动时才需要设置该参数,否则就设置其为0.0)

    • ~odom_frame_id (string, default: "odom"):里程计默认使用的坐标系。

    • ~base_frame_id (string, default: "base_link"):机器人的基坐标系。

    • ~global_frame_id (string, default: "map"):由定位系统发布的坐标系名称。

    • ~tf_broadcast (bool, default: true):设置为false阻止amcl发布全局坐标系和里程计坐标系之间的tf变换。


    0x06 AMCL中的坐标转换

    首先我们来看一下在amcl中tf树,总共有多少个坐标系参与到这个过程中:

    1528252821928530.png

    在amcl实现定位的一开始,从激光雷达获得测距信息,然后开始将laser_frame相对于base_link做tf转换,并且将永久保存该转换,这样就导致你安装在机器人上的激光雷达位置需要固定,不能激光雷达一下在移动底盘上,一会又跑到机器人头顶上,再过一会又跑机器人屁股上了,即保证laser_frame到base_link的转换是固定的才行,如下图所示来理解laser_frame测距信息与base_link之间转换关系:

    1.png

    接下来开始考虑如何实现定位的,下面来对比两种方法Odometry Localization和AMCL Map Localization:

    amcl_localization.png

    我们一直再说轮式里程计来得到的测距信息会存在累计误差,我相信很多人都不太清楚为什么,这就跟汽车打滑差不多,如果只通过轮式里程计来计算移动距离的话就会出错:

    1.gif

    在amcl中已经通过粒子滤波定位得到了base_frame相对应global_frame的位姿信息,但是为了保证base_frame只有一个父节点就没有来直接发布这个转换,因为base_frame的父节点已经是odom_frame了,那amcl就只能发布map_frame到odom_frame的转换了,这样还得到一个好处就是我们可以得到odom的累计误差了。

    这是因为你可以想象一个场景,机器人直线往前走,通过轮式里程计得到结果应该走了10米,那么距离odom_frame就应该是10米了,但是由于原地打滑,实际上机器人通过amcl定位发现根本就没有动,那么amcl就需要发布map_frame到odom_frame的转换将这个10米的误差去除掉,这样才能维护整个tf树正常。

    Screenshot from 2018-06-06 12:07:26.png

     


    0x07 参考资料

    [1].ROS WiKi上AMCL的主页[OL]. http://wiki.ros.org/amcl

    [2].ros的navigation之amcl(localization)应用详解[OL]. https://blog.csdn.net/chenxingwangzi/article/details/50038413

    [3].ros amcl参数设置[OL]. https://www.cnblogs.com/dyan1024/p/7825988.html

    展开全文
  • 介绍了管道清堵机器人定位原理,依据磁偶极子...实验结果表明,该系统可以实现对机器人的有效定位,当接收天线分别以5 m/s和10 m/s的速度移动时,定位误差范围分别为-20.7~19.8cm和-24.3~27.1cm,完全满足工程的精度要求。
  • 摘要:介绍了基于AT89C2051微处理器的机器人自定位模块的... 机器人定位技术可分为定位和相对定位技术两类,定位主要采用导航信标、主动或被动标识、地图匹配或卫星导航技术(GPS) 进行定位。相对定位是通过测量机器人相
  • 介绍了矿井救灾机器人自主定位系统的构成和基于航迹推算的自主定位方法,提出了改进的自主定位方法,即使用具备衰减指数因子的有限记忆卡尔曼方法,并以逐级滤波的方式融合多传感器信息。Matlab仿真结果表明,该方法可以...
  • 它能使手术定位精度达到0.8毫米,具有减少失血量和术中组织创伤等优点。“天玑”的出现,标志着骨科手术迈入智能化、精准化、微创化时代。骨科手术机器人“天玑”带来的好处显而易见。术前“天玑”可以对患者进行...
  • 摘要:介绍了基于AT89C2051微处理器的机器人自定位模块的... 机器人定位技术可分为绝对定位和相对定位技术两类,绝对定位主要采用导航信标、主动或被动标识、地图匹配或卫星导航技术(GPS) 进行定位。相对定位是通过测量
  • 精确的移动机器人定位是当今学术研究的重要领域,是机器人自主导航的基 础。传统的基于全球定位系统等外部定位方法虽然精度高但是使用条件具有局限性。而利用机器人视觉系统能够实现精确的自主定位,适用场景广,但易受...
  • 任何传感器的精度都是有限的,如何利用传感器信息,尽可能准确地估计一组完整描述机器人随时间运动的物理量,如位置、速度、加速度、角度、角速度等,是状态估计领域要解决的最主要问题。因此,稳定、准确的状态估计...
  • 提出了一种基于核主分量分析(PCA)正则化的机器人实时...实验结果表明,和其他常规的定位方法相比较,提出的实时定位算法的计算复杂性小、定位精度高、实时性强,能够满足工业机器人和医疗服务机器人等方面的实时定位要求。
  • 该算法成功地将经典卡尔曼滤波与其他定位算法相结合,对于定位算法的结果进行平滑和优化,修正和改进定位精度.尤其在网络盲区中,采用异步卡尔曼滤波获得最优数据.仿真实验表明该系统针对移动机器人自主动态定位具有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 464
精华内容 185
关键字:

机器人定位精度