python实现全向轮EKF_SLAM

python实现全向轮EKF_SLAM

  • 代码地址及效果
  • 运动预测
  • 观测修正
  • 参考算法

代码地址及效果

代码地址
请添加图片描述

运动预测

简化控制量 u t u_t ut 分别定义为 v x Δ t v_x \Delta t vxΔt v y Δ t v_y \Delta t vyΔt,和 ω z Δ t \omega_z \Delta t ωzΔt。这样,我们将离散时间控制向量 u k u_k uk 表示为:
u k = [ Δ μ 1 Δ μ 2 Δ θ ] = [ v x Δ t v y Δ t ω z Δ t ] u_k = \begin{bmatrix} \Delta \mu_1 \\ \Delta \mu_2 \\ \Delta \theta \end{bmatrix} = \begin{bmatrix} v_x \Delta t \\ v_y \Delta t \\ \omega_z \Delta t \end{bmatrix} uk= Δμ1Δμ2Δθ = vxΔtvyΔtωzΔt

这里, Δ μ 1 \Delta \mu_1 Δμ1 Δ μ 2 \Delta \mu_2 Δμ2 表示在 Δ t \Delta t Δt 时间内沿X和Y轴的速度增量,而 Δ θ \Delta \theta Δθ 是在 Δ t \Delta t Δt 时间内绕Z轴的角速度增量。状态更新方程如下:

[ x y θ ] t ∣ t − 1 = [ x y θ ] t − 1 + [ cos ⁡ ( θ t − 1 ) − sin ⁡ ( θ t − 1 ) 0 sin ⁡ ( θ t − 1 ) cos ⁡ ( θ t − 1 ) 0 0 0 1 ] [ Δ μ 1 Δ μ 2 Δ θ ] \begin{bmatrix} x \\ y \\ \theta \end{bmatrix}_{t|t-1}=\begin{bmatrix} x \\ y \\ \theta \end{bmatrix}_{t-1}+\begin{bmatrix} \cos(\theta_{t-1}) & -\sin(\theta_{t-1}) & 0 \\ \sin(\theta_{t-1}) & \cos(\theta_{t-1}) & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} \Delta\mu_1 \\ \Delta\mu_2 \\ \Delta \theta \end{bmatrix} xyθ tt1= xyθ t1+ cos(θt1)sin(θt1)0sin(θt1)cos(θt1)0001 Δμ1Δμ2Δθ

简化上述方程得到:

[ x y θ ] t ∣ t − 1 = [ x t − 1 + Δ μ 1 cos ⁡ ( θ t − 1 ) − Δ μ 2 sin ⁡ ( θ t − 1 ) y t − 1 + μ 1 sin ⁡ ( θ t − 1 ) + μ 2 cos ⁡ ( θ t − 1 ) θ t − 1 + Δ θ ] \begin{bmatrix} x \\ y \\ \theta \end{bmatrix}_{t|t-1} =\begin{bmatrix} x_{t-1} + \Delta\mu_1 \cos(\theta_{t-1}) - \Delta\mu_2 \sin(\theta_{t-1}) \\ y_{t-1} + \mu_1 \sin(\theta_{t-1}) + \mu_2 \cos(\theta_{t-1}) \\ \theta_{t-1} + \Delta \theta \end{bmatrix} xyθ tt1= xt1+Δμ1cos(θt1)Δμ2sin(θt1)yt1+μ1sin(θt1)+μ2cos(θt1)θt1+Δθ

考虑到 Δ μ 1 \Delta\mu_1 Δμ1 Δ μ 2 \Delta\mu_2 Δμ2 是控制输入的变化量,并不直接依赖于状态 x t − 1 x_{t-1} xt1,雅可比矩阵 G t G_t Gt 可以表示为:

G t = ∂ ∂ x [ x + ( Δ μ 1 cos ⁡ ( θ ) − Δ μ 2 sin ⁡ ( θ ) ) y + ( Δ μ 1 sin ⁡ ( θ ) + Δ μ 2 cos ⁡ ( θ ) ) θ + Δ θ ] = [ 1 0 − Δ μ 1 sin ⁡ ( θ t − 1 ) − Δ μ 2 cos ⁡ ( θ t − 1 ) 0 1 Δ μ 1 cos ⁡ ( θ t − 1 ) − Δ μ 2 sin ⁡ ( θ t − 1 ) 0 0 1 ] G_t = \frac{\partial}{\partial x} \begin{bmatrix} x + (\Delta\mu_1 \cos(\theta) - \Delta\mu_2 \sin(\theta)) \\ y + (\Delta\mu_1 \sin(\theta) + \Delta\mu_2 \cos(\theta)) \\ \theta + \Delta \theta \end{bmatrix} =\begin{bmatrix} 1 & 0 & -\Delta\mu_1 \sin(\theta_{t-1}) - \Delta\mu_2 \cos(\theta_{t-1}) \\ 0 & 1 & \Delta\mu_1 \cos(\theta_{t-1}) - \Delta\mu_2 \sin(\theta_{t-1}) \\ 0 & 0 & 1 \end{bmatrix} Gt=x x+(Δμ1cos(θ)Δμ2sin(θ))y+(Δμ1sin(θ)+Δμ2cos(θ))θ+Δθ = 100010Δμ1sin(θt1)Δμ2cos(θt1)Δμ1cos(θt1)Δμ2sin(θt1)1

此雅可比矩阵 G t G_t Gt 反映了当前状态对下一时刻状态预测的依赖性,将被用于状态协方差矩阵 Σ t \Sigma_t Σt的更新:

Σ t ∣ t − 1 = G t Σ t − 1 ∣ t − 1 G t T + F x R t F x T \Sigma_{t|t-1} = G_t \Sigma_{t-1|t-1} G_t^T + F_x R_t F_x^T Σtt1=GtΣt1∣t1GtT+FxRtFxT

其中 R t R_t Rt 是过程噪声的协方差矩阵,代表了预测模型中的不确定性。 F t F_t Ft是一个空间映射矩阵,除了左上角对应机器人位姿的3乘3矩阵为单位阵,其余都置0。虽然运动过程仅对机器人位姿进行更新,但是机器人和每个地标位置之间的相关性同样会被更新。

观测修正

对于所有观测到的特征 z t i z_t^i zti,我们首先检查地标 j j j 是否是新观测到的。如果是,则初始化该地标的状态,并对应扩展状态矩阵 μ t \mu_t μt 和协方差矩阵 Σ t \Sigma_t Σt。状态向量 μ t \mu_t μt 增加地标的横纵坐标值,而对应的协方差矩阵初始化为无穷。状态向量初始化时将地标距离 r t i r_t^i rti 和地表方向 ϕ t i \phi_t^i ϕti 转为全局坐标:

μ j , x = μ t , x + r t i cos ⁡ ( ϕ t i + μ t , θ ) μ j , y = μ t , y + r t i sin ⁡ ( ϕ t i + μ t , θ ) \begin{align*} \mu_{j,x} &= \mu_{t,x} + r_t^i \cos(\phi_t^i + \mu_{t,\theta}) \\ \mu_{j,y} &= \mu_{t,y} + r_t^i \sin(\phi_t^i + \mu_{t,\theta}) \end{align*} μj,xμj,y=μt,x+rticos(ϕti+μt,θ)=μt,y+rtisin(ϕti+μt,θ)

计算预测和测量之间的差值:

δ = [ δ x δ y ] = [ μ j , x − μ t , x μ j , y − μ t , y ] q = δ T δ \begin{align*} \delta &= \begin{bmatrix} \delta_x \\ \delta_y \end{bmatrix} = \begin{bmatrix} \mu_{j,x} - \mu_{t,x} \\ \mu_{j,y} - \mu_{t,y} \end{bmatrix} \\ q &= \delta^T \delta \end{align*} δq=[δxδy]=[μj,xμt,xμj,yμt,y]=δTδ

计算预测的观测值:

z ^ t i = [ q atan2 ( δ y , δ x ) − μ t , θ ] \hat{z}_t^i = \begin{bmatrix} \sqrt{q} \\ \text{atan2}(\delta_y, \delta_x) - \mu_{t,\theta} \end{bmatrix} z^ti=[q atan2(δy,δx)μt,θ]

构建雅克比矩阵 H t i H_t^i Hti F x , j F_{x,j} Fx,j 是空间映射矩阵,除了机器人位姿和地标 j 的位姿对应位置为单位矩阵,其余为 0:

H t i = 1 q [ − q δ x − q δ y 0 q δ x q δ y δ y − δ x − q − δ y δ x ] F x , j H_t^i = \frac{1}{q} \begin{bmatrix} -\sqrt{q}\delta_x & -\sqrt{q}\delta_y & 0 & \sqrt{q}\delta_x & \sqrt{q}\delta_y \\ \delta_y & -\delta_x & -q & -\delta_y & \delta_x \end{bmatrix} F_{x,j} Hti=q1[q δxδyq δyδx0qq δxδyq δyδx]Fx,j

计算卡尔曼增益 K t i K_t^i Kti,其中 Q t i Q_t^i Qti 是观测误差协方差矩阵:

K t i = Σ t H t i T ( H t i Σ t H t i T + Q t i ) − 1 K_t^i = \Sigma_t H_t^{i^T} \left( H_t^i \Sigma_t H_t^{i^T} + Q_t^i \right)^{-1} Kti=ΣtHtiT(HtiΣtHtiT+Qti)1

最后,更新状态向量 μ t \mu_t μt 和协方差矩阵 Σ t \Sigma_t Σt(这里的 μ t \mu_t μt Σ t \Sigma_t Σt 是由机器人状态和路标状态组成的):

μ t = μ t + K t i ( z t i − z ^ t i ) \mu_t = \mu_t + K_t^i \left( z_t^i - \hat{z}_t^i \right) μt=μt+Kti(ztiz^ti)

Σ t = ( I − K t i H t i ) Σ t \Sigma_t = \left( I - K_t^i H_t^i \right) \Sigma_t Σt=(IKtiHti)Σt

参考算法

改自概率机器人
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/187626.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何设计一个网盘系统的架构

1. 概述 现代生活中已经离不开网盘,比如百度网盘。在使用网盘的过程中,有没有想过它是如何工作的?在本文中,我们将讨论如何设计像百度网盘这样的系统的基础架构。 2. 系统需求 2.1. 功能性需求 用户能够上传照片/文件。用户能…

【华为OD题库-007】代表团坐车-Java

题目 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。 约束: 1.一个团只能上一辆车&#xff0…

Postman基本页面和请求/响应页签介绍

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 一、Postman的界面介绍 Home主页、Workspace工作空间、Collections集合、Environments环境变量、Mock Server虚拟服务器、Mo…

PDF有限制密码,不能复制怎么办?

大家现在接触PDF文件越来越多,有的时候在网上下载的PDF文件打开之后,发现选中文字之后无法复制。甚至其他功能也都无法使用,这是怎么回事?该怎么办? 当我们发现文件打开之后,编辑功能无法使用,很…

传统企业数字化转型都要面临哪些挑战?_数据治理平台_光点科技

数字化转型已经成为传统企业发展的必经之路,但在这个过程中,企业往往会遭遇多方面的挑战。 1.文化和组织惯性 最大的挑战之一是企业文化和组织惯性的阻力。传统企业往往有着深厚的历史和根深蒂固的工作方式,员工和管理层可能对新的数字化工作…

【Java】I/O流—转换流、序列化流的初学者指南及RandomAccessFile类

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:我不在意你曾堕落,我只在意你是否会崛起 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录…

Clickhouse学习笔记(3)—— Clickhouse表引擎

前言: 有关Clickhouse的前置知识详见: 1.ClickHouse的安装启动_clickhouse后台启动_THE WHY的博客-CSDN博客 2.ClickHouse目录结构_clickhouse 目录结构-CSDN博客 Cickhouse创建表时必须指定表引擎 表引擎(即表的类型)决定了&…

HTML点击链接强制触发下载

常见网页中会有很多点击链接即下载的内容&#xff0c;以下示范一下如何实现 <a href"文件地址" download"下载的文件名字&#xff08;不包括后缀&#xff09;">强制下载</a> 下面举个例子&#xff1a; <a href"./image/test.jpg"…

solidworks对电脑要求高吗?2023solidworks配置要求

solidworks对电脑要求高吗&#xff1f;SolidWorks是一款功能强大的三维CAD软件&#xff0c;对电脑配置有一定的要求。一般来说&#xff0c;运行SolidWorks需要的电脑配置包括较高的处理器性能、足够的内存和存储空间&#xff0c;以及一块性能良好的显卡。此外&#xff0c;对于大…

YOLOv5改进 | 添加CA注意力机制 + 增加预测层 + 更换损失函数之GIoU

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在小目标场景的检测中&#xff0c;存在远距离目标识别效果差的情形&#xff0c;本节课提出一种基于改进YOLOv5的小目标检测方法。首先&#xff0c;在YOLOv5s模型的Neck网络层融合坐标注意力机制&#xff0c;以提升模型的特…

成集云 | 英克对接零售O2O+线上商城 | 解决方案

方案介绍 零售O2O线上商城是一种新型的商业模式&#xff0c;它通过线上和线下的融合&#xff0c;提供更加便捷的购物体验。其中&#xff0c;O2O指的是线上与线下的结合&#xff0c;通过互联网平台与实体店面的结合&#xff0c;实现线上线下的互动和协同。线上商城则是指通过互…

flink1.18.0 自适应调度器 资源弹性缩放 flink帮你决定并行度

jobmanager.scheduler Elastic Scaling | Apache Flink 配置文件修改并重启flink后,webui上会显示调整并行度的按钮,他可以自己调整,你也可以通过webUI手动调整: 点击 之后: 调整完成后:

Milvus Cloud——什么是 Agent?

什么是 Agent? 根据 OpenAI 科学家 Lilian Weng 的一张 Agent 示意图 [1] 我们可以了解 Agent 由一些组件来组成。 规划模块 子目标分解:Agent 将目标分为更小的、易于管理的子目标,从而更高效地处理复杂的任务。 反省和调整:Agent 可以对过去的行为进行自我批评和自我反思…

科技云报道:数智化升级,如何跨越数字世界与实体产业的鸿沟?

科技云报道原创。 数智化是当下商业环境下最大的确定性。 2022年&#xff0c;中国数字经济规模达50.2万亿元&#xff0c;占国内生产总值比重提升至41.5%&#xff0c;数字经济成为推动经济发展的重要引擎。从小型创业公司到跨国巨头&#xff0c;数字化转型在企业发展历程中彰显…

Azure 机器学习 - 如何使用模板创建安全工作区

目录 先决条件了解模板配置模板连接到工作区疑难解答错误&#xff1a;Windows 计算机名的长度不能超过 15 个字符&#xff0c;并且不能全为数字或包含以下字符 本教程介绍如何使用 [Microsoft Bicep]和 [Hashicorp Terraform]模板创建以下 Azure 资源&#xff1a; Azure 虚拟网…

划分VOC数据集,以及转换为划分后的COCO数据集格式

1.VOC数据集 LabelImg是一款广泛应用于图像标注的开源工具&#xff0c;主要用于构建目标检测模型所需的数据集。Visual Object Classes&#xff08;VOC&#xff09;数据集作为一种常见的目标检测数据集&#xff0c;通过labelimg工具在图像中标注边界框和类别标签&#xff0c;为…

CSS3 过度效果、动画、多列

一、CSS3过度&#xff1a; CSS3过渡是元素从一种样式逐渐改变为另一种的效果。要实现这一点&#xff0c;必须规定两相内容&#xff1a;指定要添加效果的CSS属性&#xff1b;指定效果的持续时间。如果为指定持续时间&#xff0c;transition将没有任何效果。 <style> div…

2011年09月21日 Go生态洞察:Go图像处理包

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证

近日&#xff0c;超融合异构云原生数据库 MatrixOne企业版软件 V1.0 完成了与 OpenCloudOS 的相互兼容认证&#xff0c;测试期间&#xff0c;整体运行稳定&#xff0c;在功能、性能及兼容性方面表现良好。 一、产品简介 矩阵起源 MatrixOrigin 致力于建设开放的技术开源社区和…

JVM-虚拟机的故障处理与调优案例分析

案例1&#xff1a;大内存硬件上的程序部署策略 一个15万PV/日左右的在线文档类型网站最近更换了硬件系统&#xff0c;服务器的硬件为四路志强处理器、16GB物理内存&#xff0c;操作系统为64位CentOS 5.4&#xff0c;Resin作为Web服务器。整个服务器暂时没有部署别的应用&#…