slam学习笔记6---样例展示雅可比手推过程

背景:一直在使用模板、自动化求导,对于背后雅可比推导只剩一个基本概念,有必要好好梳理巩固一下。本人水平有限,若推导过程有误,欢迎评论区提出。

假设一个二维slam问题,使用欧式距离观测模型,即观测量 x k x{_k} xk是机器人到特征点之间的距离。

​问题设定

  1. 机器人状态 x i x{_i} xi = ( x i , y i , θ i x{_i},y{_i},\theta{_i} xi,yi,θi),其中( x i , y i x{_i},y{_i} xi,yi)是机器人在时刻 i i i的位置, θ i \theta{_i} θi是机器人的朝向。
  2. 地图中特征点 m j m{_j} mj = ( m x j , m y j m{_x{_j}},m{_y{_j}} mxj,myj)表示特征点。
  3. 观测模型假设机器人可以通过传感器(如激光雷达)观测与特征点之间的欧式距离

一、观测模型

机器人从位置( x i , y j x{_i},y{_j} xi,yj)观测到特征点 m j m{_j} mj = ( m x j , m y j ) (m{_x{_j}},m{_y{_j}}) (mxj,myj)的距离。则观测模型可表示为:
h ( x i , m j ) h(x{_i},m{_j}) h(xi,mj) = ( m x j − x i ) 2 + ( m y j − y i ) 2 \sqrt{(m{_x{_j}} - x{_i})^2 + (m{_y{_j}} - y{_i})^2} (mxjxi)2+(myjyi)2

二、残差函数

残差函数 e k ( x i , m j ) e{_k}(x{_i},m{_j}) ek(xi,mj)表示观测值与预测值之间的误差,表示为:
e ( x i , m j ) = h ( x i , m j ) − z k e(x{_i}, m{_j})=h(x{_i},m{_j})-z{_k} e(xi,mj)=h(xi,mj)zk
其中, z k z{_k} zk是传感器观测到的实际距离。

三、雅可比矩阵推导

需要计算的残差 e k ( x i , m j ) e{_k}(x{_i},m{_j}) ek(xi,mj)对机器人状态 x i x{_i} xi和地图中特征点 m j m{_j} mj的偏导数,依次获取雅可比矩阵。

3.1 计算 e k e{_k} ek对机器人状态 x i = ( x i , y i , θ i ) x{_i}=(x{_i},y{_i},\theta{_i}) xi=(xi,yi,θi)的偏导数

残差函数:

e k ( x i , m j ) = ( m x j − x i ) 2 + ( m y j − y i ) 2 − z k e{_k}(x{_i},m{_j})=\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}-z{_k} ek(xi,mj)=(mxjxi)2+(myjyi)2 zk

首先, e k e{_k} ek x i x{_i} xi y i y{_i} yi进行求偏导。根据该式子, θ i \theta{_i} θi在该观测模型并不参与。因此,只需要进行对 x i x{_i} xi y i y{_i} yi求偏导数。当然,根据残差函数,对 θ i \theta{_i} θi进行求导数:
∂ e k ∂ θ i = 0 \frac {\partial e{_k}}{\partial \theta{_i}}=0 θiek=0

3.1.1对 x i x{_i} xi求偏导
∂ e k ∂ x i = ∂ ( ( m x j − x i ) 2 + ( m y j − y i ) 2 ) ∂ x i \frac {\partial e{_k}}{\partial x{_i}}=\frac{\partial(\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2})}{\partial x{_i}} xiek=xi((mxjxi)2+(myjyi)2 )
利用链式法则和平方根的导数公式:
∂ e k ∂ x i = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( x i − m x j ) \frac {\partial e{_k}}{\partial x{_i}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(x{_i}-m{_x{_j}}) xiek=2(mxjxi)2+(myjyi)2 12(ximxj)

化简得:
∂ e k ∂ x i = x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial x{_i}}=\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} xiek=(mxjxi)2+(myjyi)2 ximxj

3.1.2 对 y i y{_i} yi求偏导
∂ e k ∂ y i = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( y i − m y j ) \frac {\partial e{_k}}{\partial y{_i}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(y{_i}-m{_y{_j}}) yiek=2(mxjxi)2+(myjyi)2 12(yimyj)
化简得:
∂ e k ∂ y i = y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial y{_i}}=\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} yiek=(mxjxi)2+(myjyi)2 yimyj

综合,残差对 x i x{_i} xi的雅可比矩阵 J e k , x i J{_e{_k},{_x{_i}}} Jek,xi矩阵为:
J e k , x i = [ x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 , y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},{_x{_i}}}=[\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,xi=[(mxjxi)2+(myjyi)2 ximxj,(mxjxi)2+(myjyi)2 yimyj]

3.2 计算 e k e{_k} ek关于地图中特征点 m j = ( m x j , m y j ) m{_j}=(m{_x{_j}},m{_y{_j}}) mj=(mxj,myj)的偏导数
3.2.1 对 m x j m{_x{_j}} mxj求导

∂ e k ∂ m x j = ∂ ( ( m x j − x i ) 2 + ( m y j − y i ) 2 ) ∂ m x j \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{\partial(\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2})}{\partial m{_x{_j}}} mxjek=mxj((mxjxi)2+(myjyi)2 )

使用链式法则
∂ e k ∂ m x j = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( m x j − x i ) \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(m{_x{_j}}-x{_i}) mxjek=2(mxjxi)2+(myjyi)2 12(mxjxi)
化简得:
∂ e k ∂ m x j = m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} mxjek=(mxjxi)2+(myjyi)2 mxjxi

3.2.2 对 m y j m{_y{_j}} myj求偏导
类似计算 ∂ e k ∂ m y j \frac {\partial e{_k}}{\partial m{_y{_j}}} myjek:
∂ e k ∂ m y j = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( m y j − y i ) \frac {\partial e{_k}}{\partial m{_y{_j}}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(m{_y{_j}}-y{_i}) myjek=2(mxjxi)2+(myjyi)2 12(myjyi)
化简得:
∂ e k ∂ m y j = m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial m{_y{_j}}}=\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} myjek=(mxjxi)2+(myjyi)2 myjyi
因此,残差 e k e{_k} ek对特征点 m j m{_j} mj的雅可比矩阵 J e k , m j J{_e{_k},_m{_j}} Jek,mj为:
J e k , m j = [ m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 , m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},_m{_j}}=[\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,mj=[(mxjxi)2+(myjyi)2 mxjxi,(mxjxi)2+(myjyi)2 myjyi]

四、雅可比矩阵小结

雅可比矩阵 J e k J{_e{_k}} Jek由两部分组成,一个是对机器人状态 x i x{_i} xi的求偏导,另为一部分是对地图特征点 m j m{_j} mj的求偏导:

J e k = [ J e k , x i , J e k , m j ] J{_e{_k}}=[J{_e{_k},{_x{_i}}},J{_e{_k}},_m{_j}] Jek=[Jek,xi,Jek,mj]
其中:
J e k , x i = [ x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 , y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},{_x{_i}}}=[\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,xi=[(mxjxi)2+(myjyi)2 ximxj,(mxjxi)2+(myjyi)2 yimyj]


J e k , m j = [ m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 , m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},_m{_j}}=[\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,mj=[(mxjxi)2+(myjyi)2 mxjxi,(mxjxi)2+(myjyi)2 myjyi]

至此,样例手推雅可比完毕

公式编辑器参考
###################
好记性不如烂笔头
积跬步期千里
觉得不错的话,记得点赞收藏

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

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

相关文章

基于Vue实现的移动端手机商城项目 电商购物网站 成品源码

📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 📸部分截图 🎬视频演示 五、⚙️网站代码 🧱项目结构 💒vue代码预览 六、🔧完整…

使用 postman 传递 binary 类型的图片到后端接口遇到的坑

使用 psotman 传 binary 类型图片报错: -2024-12-04 [http-nio-9090-exec-1] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required r…

SQL 优化经历:从 30248.271s 到 0.001s

今天分享一篇SQL优化的文,带你深入了解如何提升查询效率、降低系统负载。 无论你是数据库管理员还是开发者,都不能错过这份关于SQL性能优化的实用指南。让我们一起穿越数据库迷宫,发现隐藏在代码背后的优化黄金点! 场景 用的数据…

开发者如何使用GCC提升开发效率Opencv操作

看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…

JavaCV中openCV的拉普拉斯滤波器处理

1、javacv 1.5.10版本 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.opencv.opencv_core.Mat;import javax.swing.*; import java.awt.image.BufferedImage;import static org.bytedeco.openc…

PyQt 中的无限循环后台任务

在 PyQt 中实现一个后台无限循环任务,需要确保不会阻塞主线程,否则会导致 GUI 无响应。常用的方法是利用 线程(QThread) 或 任务(QRunnable 和 QThreadPool) 来运行后台任务。以下是一些实现方式和关键点&a…

项目集成篇:springboot集成redistemple实现自定义缓存,并且可以设置过期时间

在Spring Boot中集成Redis并使用RedisTemplate实现自定义缓存功能,同时能够设置缓存项的过期时间,可以通过以下步骤来完成。我们将创建一个服务层方法,该方法将使用RedisTemplate直接与Redis交互,并为每个缓存项设置特定的过期时间…

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie,token,session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤,⽐如⼏万条数据,放在⼀个⻚⾯显⽰的话显然不友好,这时候就需要采⽤分⻚…

CentOS 离线环境安装 Python2

CentOS离线环境安装Python2,可能在编译源码时因缺少各种依赖而无法编译成功。 此时可以找一台有网的电脑(可以是Linux虚拟机),使用yum管理器的打包命令将Python2的安装包及依赖全部打包成rpm,然后拷贝到离线机器上安装…

ED6H系列FPGA口袋实验室

一、产品概述 ED6H系列FPGA口袋实验室是中科亿海微自主研发的基于“FPGA在线教学平台”的教学实践工具,专为高校电子相关专业师生打造,旨在为高校师生创造更具创新性与高效性的教学场景。具有高集成度、小巧便携、可扩展设计及自主可控等特点。本系列共…

实验三:Mybatis-动态 SQL

目录: 一 、实验目的: 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求: 预习 if、choose、 when、where 等标签的用法 三、实验内容: 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

pytorch加载预训练权重失败

问题 给当前模型换了个开源的主干网络,并且删除了某些层后,但是发现预训练权重一直加载不上。strict为True时加载报错,strict为False时又什么都加载不上,然后不知道哪里出问题了。 解决 当strict为False时,load_sta…

python 笔记之线程同步和死锁

同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…

Python爬虫——猫眼电影

用python中requests库爬取猫眼电影信息并保存到csv文件中 猫眼专业版 爬取界面 效果预览 代码 import requests import jsonurl1https://piaofang.maoyan.com/dashboard-ajax?orderType0&uuid1938bd58ddac8-02c2bbe3b009ed-4c657b58-144000-1938bd58ddac8&timeStamp…

python 三钱筮法项目开发

三钱筮法项目技术说明 1. 技术栈 GUI框架: CustomTkinter 现代化的Tkinter扩展提供美观的界面组件支持主题定制 数据存储: JSON 卦象数据: gua_info.json记忆数据: memory.json易经解释: detail.json 图像处理: PIL (Python Imaging Library) 处理图标和图片资源 2. 主要功…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…

NLP 的研究任务

自然语言处理(Natural Language Processing, NLP) NLP 的研究任务 自然语言处理(Natural Language Processing, NLP)1. **机器翻译**2. **情感分析**3. **智能问答**4. **文摘生成**5. **文本分类**6. **舆论分析**7. **知识图谱*…

无人机的计算机仿真模拟控制

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月3日10点24分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

vue+mars3d给影像底图叠加炫酷效果

话不多说,直接上效果图: 在这里墙体其实是有一个不太明显的流动效果 实现方式:这里我使用了PolylineEntityWallPrimitive,开始我用的是polygonEntity但是发现实现效果并不好,所有直接改用了线 map.vue文件&#xff1…

浅谈volatile

volatile有三个特性: (1)可见性 (2)不保证原子性 (3)禁止指令重排 下面我们一一介绍 (一)可见性 volatile的可见性是说共享变量只要修改,就可以被其他线…