robot_localization的EKF论文摘要与平面定位的源码解析

A Generalized Extended Kalman Filter Implementation for the Robot Operating System

论文摘要

  1. 文章的第二部分,讲述了创建robot_localization包的动机
  2. 在文章的第三部分,详细描述了ROS的ekf_localization_node的实现
  3. 一开始就开发了我们的机器人定位软件包,以克服这些限制,并尽可能通用。它在三维空间中执行状态估计,允许无限数量的传感器,支持多种标准ROS消息类型,并允许每个传感器控制哪个消息字段与状态估计相融合
  4. 我们将描述ekf_location节点的实现细节
  5. 我们的目标是估计移动机器人的全三维(6自由度)姿态和速度随时间的变化。这个过程可以描述为一个非线性动态系统x_{t}=f(x_{t-1})+w_{t-1},我们的12维状态向量,𝒙,包括车辆的三维姿态、三维方向和各自的速度。旋转值用欧拉角表示
  6. 另外测量数据用z_{t}=h(x_{t})+v_{t}表示,此处z是t时间的测量值,ℎ是将状态映射到测量空间的非线性传感器模型,且𝒗是正态分布的测量噪声。
  7. 算法的第一阶段,如等式(3)和(4)所示,是执行预测步骤,该预测步骤将当前状态估计和误差协方差及时向前投影:

    \hat{x}_{t}=f(x_{t-1})公式(3),

    \hat{P}_{t}=FP_{t-1}F^{T}+Q公式(4),

    对于我们的应用,𝑓是从牛顿力学导出的标准三维运动模型。估计误差协方差𝑷通过𝑭(𝑓的雅可比)投影,然后受过程噪声协方差𝑸的扰动。

  8. 然后,我们在方程(5)中执行校正步骤

    K=\hat{P}_{t}H^{T}(H\hat{P}_{t}H^{T}+R)^{-1}公式(5),

    x_{t}=\hat{x}_{t}+K\left (z-H\hat{x}_{t} \right )公式(6)

    P_{t}=\left (I-KH \right )\hat{P}_{t}\left ( I-KH \right )^{T}+KRK^{T}公式(7)

    我们使用观测矩阵𝑯、测量协方差𝑹和\hat{P}_{t}计算卡尔曼增益。我们利用增益来更新状态向量和协方差矩阵。我们使用约瑟夫形式的协方差更新方程[6]通过确保𝑷𝑘保持正半定来提高滤波器的稳定性。
  9. 由于过程噪声协方差𝑸对于给定的应用程序可能难以调谐[7],ekf_本地化_节点将此矩阵作为参数公开给用户,从而允许额外的定制级别。
  10. 第四部分实验部分,主要为GPS坐标与odom坐标的变换矩阵T
  11. 实验内容。理想情况下,我们希望结束位置(x,y)值尽可能接近(0,0)处的原点。我们在多个ekf_节点传感器配置中重复实验:(1)通过平台的里程计进行航位推算,(2)与单个IMU融合里程计,(3)与两个IMU融合里程计,(4)与两个IMU和一个GPS融合里程计,以及(5)与两个IMU和两个GPS单元融合里程计。结果表格如下
  12. 实验结果基本上是凭直觉得出的。航位推算产生最差的性能,机器人的最终报告位置距离原点超过174米(图3)。我们先锋公司的车轮编码器存在偏差,以至于直线报告为轻微右转,导致位置估计高度不准确。
  13. 因为IMU的偏航速度误差比先锋的里程计的偏航速度误差提高了一个数量级,而且绝对方位的融合(图4)。然而,采集区域包含许多强电磁干扰区域,导致磁强计报告的航向不准确。第二IMU的加入仅稍微改善了最终位置误差,因为它受到相同的干扰,并且因为它实际上在收集的中途停止了报告数据(图5)。虽然通常是重复实验的一个原因,但这种传感器故障是多个传感器融合如此强大的一个例子,因为系统可以更优雅地处理故障或不频繁的传感器数据。
  14. 我们可以通过包含一个GPS进一步完善我们的估计(图6)。这有助于限制里程计不准确的线性速度估计的影响,并消除IMU干扰导致的不良航向估计的影响。添加第二个GPS可以减少最终位置误差的显著改善,但是展示了ekf_定位节点成功地融合来自大量传感器输入的数据的能力(图7)。
  15. 结果如图8所示。GPS定位发生的位置显示在地图上,并导致明显的瞬时位置变化。这些跳跃明显地将状态估计拉向GPS轨道,但是Kalman增益给当前状态估计赋予了一定的权重,导致新的位置处于当前状态和测量之间。尽管状态估计和测量之间存在较大的差异,但滤波器的协方差矩阵保持其稳定性,x和y方差值显著减小。
  16. 总结。虽然这项工作的重点是在近平面环境下操作的机器人,但我们也成功地在涉及地面和空中机器人的多个项目中应用了ekf_定位节点[11]。特别是,我们通过ardrone_autonomy ROS软件包[12]将该软件与Parrot AR.Drone 2.0四旋翼机集成(图10)。无人机有基于摄像机的速度传感、基于摄像机和气压计的高度传感、IMU和GPS。
  17. 后面文章进行源码分析。源码实现理解可以参考以下链接,不过是二维的https://blog.csdn.net/qq_31651031/article/details/86491765
  18. 原文的源码解析在下面地址https://blog.csdn.net/qq_29313679/article/details/105229598
  19. 上面的平面二维源码中,在测量模型里,使用GPS数据对编码器的航迹推算进行校正,均值和状态协方差矩阵都较好的符合实际运行路径,运行代码得到以下结果,蓝色(实际位置)和红色(EKF定位)相符合,黑色(航迹推算)则偏离实际值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 回答1: /ekf_localization_node 节点无法启动。 这个错误通常是由于以下原因之一引起的: 1. 您没有正确安装 robot_localization 软件包。 2. 您没有正确设置 ROS_PACKAGE_PATH 环境变量。 3. 您的系统缺少必要的依赖项。 要解决这个问题,您可以尝试以下步骤: 1. 确保您已正确安装 robot_localization 软件包。您可以使用以下命令检查: rospack find robot_localization 如果这个命令返回一个路径,那么软件包已经正确安装。 2. 确保您已正确设置 ROS_PACKAGE_PATH 环境变量。您可以使用以下命令检查: echo $ROS_PACKAGE_PATH 如果这个命令返回一个包含 robot_localization 的路径,那么环境变量已经正确设置。 3. 确保您的系统已安装必要的依赖项。您可以使用以下命令检查: rosdep check robot_localization 如果这个命令返回“OK”,那么您的系统已经安装了必要的依赖项。 如果您仍然无法解决这个问题,请尝试在 ROS Answers 上寻求帮助。 ### 回答2: 该错误提示意味着ROS(机器人操作系统)无法启动一个类型为“robot_localization/ekf_localization_node”的节点,可能是由于缺少必要的依赖项或ROS包未正确安装所致。 在ROS系统中,节点是ROS中最重要的一个概念之一,它们是ROS的核心组件,用于实现不同的功能。这些节点有一个特定的名称和类型,例如,类型可以是发布者/订阅者、服务端/客户端或者动作服务器等。而此错误提示中涉及的节点类型为“robot_localization/ekf_localization_node”,这是一个用于执行扩展卡尔曼滤波(EKF)的本地化节点。 当启动这个节点时,ROS无法找到必要的依赖项或包,因此导致了这个错误。 这可能有几种原因: 1.缺少必要的ROS包。在运行这个节点之前,需要确保已经安装了自己的ROS包和其他依赖包。 如果没有安装这些包,ROS就无法启动相关的节点或程序。 可以通过使用apt-get命令或源码方式来安装缺少的ROS包。 2.节点名或包名输入错误。如果节点名或包名输入不正确,ROS也无法找到节点并启动它。 可以检查一下程序代码和launch文件,确保输入的名称正确。 3.环境变量未正确设置。另一个可能的原因是ROS的环境变量没有正确设置。 ROS需要设置环境变量,例如ROS_PACKAGE_PATH和ROS_MASTER_URI,以便在运行节点时找到正确的包和主机信息。这些环境变量可以通过修改.bashrc文件或使用命令行设置来设置。 为了解决这个问题,可以尝试以下几个步骤: 1. 检查是否已安装必要的ROS包和依赖项,以及路径是否正确设置。 2. 确保输入的节点和包名正确无误。 3. 尝试重新启动ROS,也可以尝试清空ROS缓存。 4. 如果仍然无法解决问题,可以尝试重新安装相关的ROS包。 在解决这个错误时需要注意 ROS不仅具有复杂性和学习曲线,还会在您尝试启动各种ROS程序时遇到许多未知问题,因此需要具备一定的ROS技术和知识,并进行错误调试和故障排除能力。 ### 回答3: 这个错误的出现主要是由于缺失ROS包或者无法找到ROS包的路径。当我们在运行ROS程序时,计算机必须能够找到需要的ROS包才能正常运行。因此,需要检查以下几个方面: 1. 是否安装了相应的ROS包。 在ROS中,每一个功能都是一个独立的软件包。如果没有安装需要的ROS包,就无法找到需要的程序节点类型。比如在这个错误提示中,需要的是robot_localization包中的ekf_localization_node节点类型,那么就需要将robot_localization包安装好。 2. 确认ROS_PACKAGE_PATH路径是否正确。 当我们在终端中运行ROS程序时,ROS会根据ROS_PACKAGE_PATH环境变量中所列出的路径来搜索对应的ROS包。因此,需要确认ROS_PACKAGE_PATH是否正确设置了对应的ROS包路径。在终端中输入以下命令可以查看ROS_PACKAGE_PATH路径: echo $ROS_PACKAGE_PATH 如果路径没有包含需要的ROS包,就需要将其添加到ROS_PACKAGE_PATH中。 3. 确认launch文件中的ROS包路径是否正确。 在运行ROS节点时,我们通常使用launch文件来启动这些节点。如果ROS包路径没有正确设置或者launch文件中引用的ROS包路径不正确,那么也会出现这个错误。因此,需要确认launch文件中的ROS包路径是否正确对应到对应的ROS包。 总之,出现这个错误时,需要仔细排查以上几个方面。只有确认了所有的配置都正确之后,才能正常运行ROS程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值