【机器人状态估计】粒子滤波算法介绍

这篇具有很好参考价值的文章主要介绍了【机器人状态估计】粒子滤波算法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概率定位算法

问题分类:位姿追踪、局部定位、全局定位;静态、动态环境定位;单一机器人定位、多机器人定位。

贝叶斯滤波框架:
定位置信度与运动模型卷积,两次独立估计值的整合比单一估计值使系统状态确定性更高。

粒子滤波

基本思路

  1. 随机产生M个粒子(如M=1000),每个粒子表示状态变量的(随机)数值,如位置、航向等,粒子有权重,即重要性因子,初始时每个粒子的权重都相等
  2. 预测(运动方程)每个粒子下一时刻的”位置“
  3. 根据测量更新粒子的权重,与测量更接近的粒子具有更高的权重
  4. 重采样粒子,去除权重低的粒子,并用高权重的粒子去复制替代,粒子的权重被重新均分
  5. 统计粒子集合的加权均值和方差以得到系统的状态估计

粒子滤波实现自动驾驶多传感器融合定位

  1. 使用运动方程从上一时刻完成更新的粒子预测状态
  2. 传感器测量与从预测的状态估计的测量做差, 称为innovation, 重新确定第i个粒子的权重
    w t i = p ( z t ∣ x t i , m ) w^{i}_t = p(z_t|x^{i}_t, m) wti=p(ztxti,m)

δ z = h ( x , m ) − z w t i = w t − 1 i ∗ N ( 0 , σ , δ z ) \delta z = h(x,m) - z \\ w^{i}_t = w^{i}_{t-1} * N(0, \sigma, \delta z) δz=h(x,m)zwti=wt1iN(0,σ,δz)
N ( 0 , σ , δ z ) N(0, \sigma, \delta z) N(0,σ,δz)指正态分布取 δ z \delta z δz的数值
更新状态
x t = Σ i ( w t i x t i ) Σ i ( w t i ) x_t = \frac{\Sigma_i(w^{i}_tx^{i}_t)}{\Sigma_i(w^{i}_t)} xt=Σi(wti)Σi(wtixti)

计算状态协方差

第j行第k列元素的值为:

X j , k = 1 1 − Σ i = 1 N ( w i ) 2 Σ i = 1 N w i ( x j i − u j ) ( x k i − u k ) X_{j,k}=\frac{1}{1-\Sigma^N_{i=1}(w^i)^2}\Sigma^N_{i=1}w^i(x^i_j-u_j)(x^i_k-u_k) Xj,k=1Σi=1N(wi)21Σi=1Nwi(xjiuj)(xkiuk)

x j i x^i_j xji是第i个粒子的第j维值, x k i x^i_k xki是第i个粒子的第k维值, u j u_j uj是估计的状态第j维值

#计算协方差
def calc_covariance(x_est, px, pw):
    """
    calculate covariance matrix
    see ipynb doc
    """
    cov = np.zeros((3, 3))
    n_particle = px.shape[1]
    for i in range(n_particle):
        dx = (px[:, i:i + 1] - x_est)[0:3]
        cov += pw[0, i] * dx @ dx.T
    cov *= 1.0 / (1.0 - pw @ pw.T)
    return cov

工程与参考《概率机器人》中有一处差异,粒子的权重更新,参考为似然函数值,参考代码将先前权重与函数值相乘。

重采样的实现

经过重采样,粒子的分布近似后验,重复高权重的粒子,低权重的粒子更有可能被替换掉文章来源地址https://www.toymoban.com/news/detail-837018.html

def re_sampling(px, pw):
    """
    low variance re-sampling
    """

    w_cum = np.cumsum(pw)
    base = np.arange(0.0, 1.0, 1 / NP)
    re_sample_id = base + np.random.uniform(0, 1 / NP)
    indexes = []
    ind = 0
    for ip in range(NP):
        while re_sample_id[ip] > w_cum[ind]:
            ind += 1
        indexes.append(ind)

    px = px[:, indexes]
    pw = np.zeros((1, NP)) + 1.0 / NP  # init weight
    return px, pw

到了这里,关于【机器人状态估计】粒子滤波算法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文献学习-21-DaFoEs:混合数据集以推广微创机器人手术中的视觉状态深度学习力估计

    DaFoEs: Mixing Datasets Towards the Generalization of Vision-State Deep-Learning Force Estimation in Minimally Invasive Robotic Surgery Authors:  Mikel De Iturrate Reyzabal, Graduate Student Member, IEEE, Mingcong Chen, Wei Huang, Sebastien Ourselin, and Hongbin Liu Key words:  Deep learning in grasping and manipulation, surgical robotics: Laparoscopy, com

    2024年03月21日
    浏览(58)
  • 【状态估计】基于线性卡尔曼滤波器和粒子滤波器无人机估计地形高度(Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文模

    2024年02月16日
    浏览(46)
  • 基于 MATLAB GUI 的粒子群算法机器人避障路径规划

    在本文中,我们将探讨如何使用 MATLAB GUI 和粒子群算法(Particle Swarm Optimization,PSO)实现机器人的避障路径规划。我们将详细介绍这个过程,并提供相应的源代码。 一、问题描述: 我们考虑的是一个机器人在给定环境中的自主导航问题。机器人需要从起始点到达目标点,同

    2024年02月06日
    浏览(60)
  • 【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 扩展卡尔曼滤波 2.2 线性卡尔曼滤波 

    2024年02月09日
    浏览(43)
  • 【路径规划】粒子群算法求解机器人障碍物环境的Voronoi图路径规划【含GUI Matlab源码 3748期】

    粒子群算法(Particle Swarm Optimization, PSO)可以用于栅格地图上机器人的最短路径规划。在这种问题中,栅格地图被划分为离散的单元格,每个单元格可以是阻挡或可通过的区域。机器人需要从起始位置移动到目标位置,避免碰到阻挡。 PSO算法中,通过使用一群粒子来搜索最优

    2024年01月17日
    浏览(63)
  • 【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

     效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

    2024年04月14日
    浏览(74)
  • 1.1 机器人运动控制算法专栏介绍

    本博客专栏将从理论到实践进行全面讲解,从机器人运动控制的基础理论到代码实现,读者将能够全面了解机器人运动控制的关键环节。本专栏从数学公式的推理,到代码实现的详细阐述,读者将能够更好地理解和应用机器人运动控制的相关知识。通过实例、图像、代码和解

    2024年02月09日
    浏览(50)
  • 遨博协作机器人高级编程 - 遨博机器人SDK用户自定义算法接口介绍与使用

    目录 一、简介 二、环境版本 三、开发环境部署 1.二次开发资料下载 2. AUBO PE编程仿真环境配置 四、linux C++ SDK示例 1. 编程环境 2. 加载C++ SDK工程 3. linux C++ SDK 文件构成 4.运行SDK示例 五、构建用户自定义算法SDK示例工程 1.Linux C++ SDK透传接口 2.  创建新项目 3.导入遨博机器人

    2024年02月14日
    浏览(58)
  • 机器人连杆惯量参数辨识(估计)

    杆的转动惯量的计算公式是I=mr^2。在经典力学中,转动惯量(又称质量惯性矩,简称惯矩)通常以I 或J表示,SI 单位为 kg·m²。对于一个质点,I = mr²,其中 m 是其质量,r 是质点和转轴的垂直距离。 力矩等于转动惯量乘以角加速度即M=J*a。J是转动惯量,a是角加速度,M是力

    2024年02月06日
    浏览(43)
  • React+Three.js实现粒子包围的安卓机器人

    喜欢做动画的我很早之前就已经开始关注Threejs这个框架了,觉得这个框架老酷炫了,可以在浏览器中展示一个3D场景,奈何时间与精力关系(主要是懒)一直都没有真正花功夫去学,好在最近终于开始简单学了一点Threejs的皮毛,并且写了个安卓机器人的小demo,涉及到的知识点是

    2024年01月25日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包