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.rhkb.cn/news/486592.html

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

相关文章

部署loki,grafana 以及springcloud用法举例

文章目录 场景docker 部署grafanadocker-compose部署loki维护配置文件 local-config.yaml维护docker-compose.yml配置启动 grafana 添加loki数据源springcloud用法举例查看loki的explore,查看日志 场景 小公司缺少运维岗位,需要研发自己部署日志系统,elk…

非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4

三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…

Leetcode—1133. 最大唯一数【简单】Plus

2024每日刷题&#xff08;205&#xff09; Leetcode—1133. 最大唯一数 C 实现代码 class Solution { public:int largestUniqueNumber(vector<int>& nums) {constexpr int MAX 1000;vector<int> count(MAX 1, 0);for(int num: nums) {count[num];}for(int…

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…

GCC/G++ Centos离线安装

方式一&#xff08;推荐&#xff09; 官方地址&#xff1a;https://gcc.gnu.org/releases.html 镜像站点1&#xff1a;http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 镜像站点2&#xff1a;https://vault.centos.org/7.5.1804/os/x86_64/Packages/ gcc &#xff1a…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为

【GoLang】文件操作中perm参数的用法

我们在创建文件时&#xff0c; perm 参数主要用于设置新创建文件的权限&#xff0c;有时是0755&#xff0c;有时是0644。那你知道这些数字都代表什么意思吗&#xff1f; 让我们一个个数字拆开了说&#xff0c;现在从左到右给每个数字一个编号 编号1&#xff1a;通常是0&…

【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面

0x00 前言 朋友做标书&#xff0c;需要用到每日温度&#xff0c;他的老板让在这个网页手动复制做一个长期表出来&#xff1a;http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙&#xff0c;做个爬虫脚本吧&#xff0c;忽然发现这个页面很有意思&#xf…

fpga vga

因为 如果是减1的话是会少减1的 因为piel_x会延迟 timescale 1ns / 1psmodule vga(//系统侧input wire clk_sys ,input wire rst_n ,input wire clk ,//在顶层例化的pll产生的input wire locked ,/…

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现&#xff0c;它继承了Nacos的所有核心功能&#xff0c;并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务&#xff0c;RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能&#xff0c;还支持单机和集…

如何做好一份技术文档?-中小企实战运营和营销工作室博客

做好一份技术文档需要考虑文档的目的、受众、内容结构、表达清晰度等多个方面&#xff0c;以下是详细步骤&#xff1a; 一、明确文档目的和受众 确定目的 技术文档的目的可能多种多样&#xff0c;例如记录软件系统的功能和操作流程&#xff0c;便于用户使用&#xff1b;或是作为…

【Java语言】内部类

可以将一个类的定义在另一个类或者一个方法内部&#xff08;一般都是定义在类里面&#xff09;&#xff0c;在内部的类就称为内部类&#xff0c;在内部类的外部的类称为外部类。内部类可以在数据结构实现链表的结点等还有很多的地方使用它。然而内部类又分四种&#xff1a;静态…

DemoFusion 技术浅析(三):渐进式上采样

渐进式上采样模块&#xff08;Progressive Upsampling Module&#xff09; 是 DemoFusion 框架的核心组件之一&#xff0c;其主要目标是逐步提高图像分辨率&#xff0c;同时保留和增强图像细节。为了实现这一目标&#xff0c;该模块结合了多种上采样技术、扩散模型以及精细化的…

软件工程 测试

软件测试是根据从用户和系统规范收集的需求对软件进行评估。测试在软件开发生命周期的阶段级别或程序代码的模块级别进行。软件测试包括验证和确认。 软件验证 验证是检查软件是否满足用户要求的过程。它在 SDLC 结束时执行。如果软件符合它的要求&#xff0c;他就会被验证。…

在CANoe中Ping多播地址的若干问题

在CANoe中添加网络节点Dut,作为加入多播组的主机,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.17MAC地址:02:00:00:00:00:17在CANoe中添加网络节点Tester,作为发送多播报文的数据源,配置TCP/IP Stack和网卡参数: IP地址:192.168.0.52MAC地址:02:00:00:00:00:52Dut…

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0095 1. 主要功能&#xff1a; 基于51单片机的病床呼叫系统proteus仿…

【机器学习算法】——逻辑回归

目录 逻辑回归理解损失函数代码练习1. 房屋价格与面积的关系2.基于学生特征的录取概率预测 逻辑回归理解 逻辑回归是用来二分类的&#xff01; 是在线性回归模型之后加了一个激活函数&#xff08;Sigmoid)将预测值归一化到【0~1】之间&#xff0c;变成概率值。 一般计算其中一…

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别 一、背景 财务数据是指企业经营活动和财务结果的数据记录&#xff0c;反映了企业的财务状况 与经营成果。对行业、企业的财务数据进行分析&#xff0c;就是要评价其过去的经营业绩、 衡量现在的财务状况、预测…

【Android】View的工作流程——measure

1.View的工作流程入口 1.1DecorView被加载到Window中 看到这里你对Activity的构成有一定的了解&#xff0c;每个 Activity 都有一个与之关联的 Window 对象&#xff0c;而 DecorView 是这个 Window 的根视图。当DecorView被创建以及加载资源的时候&#xff0c;此时它的内容还…

4.opengl中变换

变换 1.向量 向量有一个方向(Direction)和大小(Magnitude&#xff0c;也叫做强度或长度)。 数学家喜欢在字母上面加一横表示向量&#xff0c;比如说vv。当用在公式中时它们通常是这样的&#xff1a; 1.1.向量相乘 1.1.1.点乘 我们该如何计算点乘呢&#xff1f;点乘是通过将…