On-Manifold Optimization: Local Parameterization

Overview

Manifold Space vs Tangent Space

Jacobian w.r.t Error State

Jacobian w.r.t Error State vs True State

According 1 2.4,

The idea is that for a x ∈ N x \in N xN the function g ( δ ) : = f ( x ⊞ δ ) g(\delta) := f (x \boxplus \delta) g(δ):=f(xδ) behaves locally in 0 0 0 like f f f does in x x x. In particular ∥ f ( x ) ∥ 2 \|f(x)\|^2 f(x)2 has a minimum in x x x if and only if ∥ g ( δ ) ∥ 2 \|g(\delta)\|^2 g(δ)2 has a minimum in 0 0 0. Therefore finding a local optimum of g g g, δ = arg ⁡ min ⁡ δ ∥ g ( δ ) ∥ 2 \delta = \arg \min_{\delta} \|g(\delta)\|^2 δ=argminδg(δ)2 implies x ⊞ δ = arg ⁡ min ⁡ ξ ∥ f ( ξ ) ∥ 2 x \boxplus \delta = \arg \min_{\xi} \|f(\xi)\|^2 xδ=argminξf(ξ)2.

f ( x ⊞ δ ) = f ( x ) + J x δ + O ( ∥ δ ∥ 2 ) f(x \boxplus \delta)=f(x)+J_x \delta+\mathcal{O}\left(\|\delta\|^2\right) f(xδ)=f(x)+Jxδ+O(δ2)

where

J = ∂ f ( x ⊞ δ ) ∂ δ ∣ δ = 0 ⟷ J = ∂ f ( x ) ∂ x ∣ x J = \left. \frac{\partial f(x \boxplus \delta)}{\partial \delta} \right|_{\delta=0} \quad \longleftrightarrow \quad J = \left. \frac{\partial f(x)}{\partial x} \right|_{x} J=δf(xδ) δ=0J=xf(x) x

ESKF 2 6.1.1: Jacobian computation

H ≜ ∂ h ∂ δ x ∣ x = ∂ h ∂ x t ∣ x ∂ x t ∂ δ x ∣ x = H x X δ x \left.\mathbf{H} \triangleq \frac{\partial h}{\partial \delta \mathbf{x}}\right|_{\mathbf{x}}=\left.\left.\frac{\partial h}{\partial \mathbf{x}_t}\right|_{\mathbf{x}} \frac{\partial \mathbf{x}_t}{\partial \delta \mathbf{x}}\right|_{\mathbf{x}}=\mathbf{H}_{\mathbf{x}} \mathbf{X}_{\delta \mathbf{x}} Hδxh x=xth xδxxt x=HxXδx

  • x t x_t xt: true state
  • x x x: normal state
  • δ x \delta x δx: error state

lifting and retraction:

X δ x ≜ ∂ x t ∂ δ x ∣ x = [ I 6 0 0 0 Q δ θ 0 0 0 I 9 ] \left.\mathbf{X}_{\delta \mathbf{x}} \triangleq \frac{\partial \mathbf{x}_t}{\partial \delta \mathbf{x}}\right|_{\mathbf{x}}=\left[\begin{array}{ccc} \mathbf{I}_6 & 0 & 0 \\ 0 & \mathbf{Q}_{\delta \boldsymbol{\theta}} & 0 \\ 0 & 0 & \mathbf{I}_9 \end{array}\right] Xδxδxxt x= I6000Qδθ000I9

the quaternion term

Q δ θ ≜ ∂ ( q ⊗ δ q ) ∂ δ θ ∣ q = ∂ ( q ⊗ δ q ) ∂ δ q ∣ q ∂ δ q ∂ δ θ ∣ δ θ ^ = 0 = ∂ ( [ q ] L δ q ) ∂ δ q ∣ q ∂ [ 1 1 2 δ θ ] ∂ δ θ ∣ δ ^ = 0 = [ q ] L 1 2 [ 0 0 0 1 0 0 0 1 0 0 0 1 ] \begin{aligned} \left.\mathbf{Q}_{\delta \boldsymbol{\theta}} \triangleq \frac{\partial(\mathbf{q} \otimes \delta \mathbf{q})}{\partial \delta \boldsymbol{\theta}}\right|_{\mathbf{q}} &=\left.\left.\frac{\partial(\mathbf{q} \otimes \delta \mathbf{q})}{\partial \delta \mathbf{q}}\right|_{\mathbf{q}} \frac{\partial \delta \mathbf{q}}{\partial \delta \boldsymbol{\theta}}\right|_{\delta \hat{\boldsymbol{\theta}}=0} \\ &=\left.\left.\frac{\partial\left([\mathbf{q}]_L \delta \mathbf{q}\right)}{\partial \delta \mathbf{q}}\right|_{\mathbf{q}} \frac{\partial\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta} \end{array}\right]}{\partial \delta \boldsymbol{\theta}}\right|_{\hat{\delta}=0} \\ &=[\mathbf{q}]_L \frac{1}{2}\left[\begin{array}{lll} 0 & 0 & 0 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right] \end{aligned} Qδθδθ(qδq) q=δq(qδq) qδθδq δθ^=0=δq([q]Lδq) qδθ[121δθ] δ^=0=[q]L21 010000100001

Least Squares on a Manifold 3

Local Parameterization in Ceres Solver 4 5 6 7 8

class LocalParameterization {public:virtual ~LocalParameterization() = default;virtual bool Plus(const double* x,const double* delta,double* x_plus_delta) const = 0;virtual bool ComputeJacobian(const double* x, double* jacobian) const = 0;virtual bool MultiplyByJacobian(const double* x,const int num_rows,const double* global_matrix,double* local_matrix) const;virtual int GlobalSize() const = 0;virtual int LocalSize() const = 0;
};

Plus

Retraction

⊞ ( x , Δ ) = x Exp ⁡ ( Δ ) \boxplus(x, \Delta)=x \operatorname{Exp}(\Delta) (x,Δ)=xExp(Δ)

ComputeJacobian

global w.r.t local

J G L = ∂ x G ∂ x L = D 2 ⊞ ( x , 0 ) = ∂ ⊞ ( x , Δ ) ∂ Δ ∣ Δ = 0 J_{GL} = \frac{\partial x_G}{\partial x_L} = D_2 \boxplus(x, 0) = \left. \frac{\partial \boxplus(x, \Delta)}{\partial \Delta} \right|_{\Delta = 0} JGL=xLxG=D2(x,0)=Δ(x,Δ) Δ=0

参考 9

r r r w.r.t x L x_{L} xL

ceres::CostFunction 处提供 residuals 对 Manifold 上变量的导数

J r G = ∂ r ∂ x G J_{rG} = \frac{\partial r}{\partial x_G} JrG=xGr

则 对 Tangent Space 上变量的导数

J r L = ∂ r ∂ x L = ∂ r ∂ x G ⋅ J G L J_{rL} = \frac{\partial r}{\partial x_L} = \frac{\partial r}{\partial x_G} \cdot J_{GL} JrL=xLr=xGrJGL

Sub Class

  • QuaternionParameterization
  • EigenQuaternionParameterization

自定义 QuaternionParameterization

参考 7

Summary

  • QuaternionParameterization 的 Plus 与 ComputeJacobian 共同决定使用左扰动或使用右扰动形式

Quaternion in Eigen


Quaterniond q1(1, 2, 3, 4);           // wxyz
Quaterniond q2(Vector4d(1, 2, 3, 4)); // xyzw
Quaterniond q3(tmp_q);                // xyzw, double tmp_q[4];
q.coeffs();                           // xyzw

Quaternion in Ceres Solver

  • order: wxyz
  • Ceres Solver 中 Quaternion 是 Hamilton Quaternion,遵循 Hamilton 乘法法则
  • 矩阵 raw memory 存储方式是 Row Major

  1. A Framework for Sparse, Non-Linear Least Squares Problems on Manifolds ↩︎

  2. Quaternion kinematics for the error-state Kalman filter, Joan Solà ↩︎

  3. A Tutorial on Graph-Based SLAM ↩︎

  4. http://ceres-solver.org/nnls_modeling.html#localparameterization ↩︎

  5. On-Manifold Optimization Demo using Ceres Solver ↩︎

  6. Matrix Manifold Local Parameterizations for Ceres Solver ↩︎

  7. [ceres-solver] From QuaternionParameterization to LocalParameterization 😄 ↩︎ ↩︎

  8. LocalParameterization子类说明:QuaternionParameterization类和EigenQuaternionParameterization类 ↩︎

  9. 优化库——ceres(二)深入探索ceres::Problem ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

DeforGAN:用GAN实现星际争霸开全图外挂!

点击上方“机器学习与生成对抗网络”,关注"星标" 获取有趣、好玩的前沿干货! 文章来源:机器之心 作者:Yonghyun Jeong等 参与:李诗萌、Geek AI 对于广大星际争霸迷来说,地图全开作弊代码「Black …

局域网联机_七日杀v17.2(B27)版/支持局域网联机/多项修改器/初始存档/局域网联机教程...

点击蓝字关注我们,每日提供优质游戏 游戏介绍 那时地球表面已经变成废墟,更糟的是,没有人知道到底是因为辐射、生化武器还是天灾,导致地面上出现了一群僵尸。玩家将扮演在美国亚历桑纳地区的一名幸存者,那里是地球最后…

魔兽争霸 / 星际争霸 无法使用 CTRL + 1 进行编队

打游戏时发现不好编队, 应该是快捷键冲突导致。 查了一下,是输入法的问题。 目前用的QQ五笔输入法里用到了 CTRL 1,所以在游戏里就用不了了。 如下面所示,把最后的 CTRL 1 的复选框勾掉就可以了。

DeepMind《星际争霸2》AI碾压人类遭Gary Marcus猛怼:通用智能就是空谈

来源:新智元 本文 3635 字 ,建议阅读 10分钟 。 本文介绍了Marcus对AI碾压人类以及未来通用智能研究意义的质疑。 针对DeepMind前几日发布的《星际争霸2》智能体AlphaStar进化版,他在Twitter再次提出了自己的质疑。不过这次,Marcu…

星际2数据编辑器

转自:https://blog.csdn.net/xoyojank/article/details/8122886 只列了技能的划分,其余的参考链接 对象类型 星际2就对象有很多类型, 这里只说一下比较常见的. 这些类型还有子类型, 对象的实例之间是可以进行数据拷贝和派生的. Units(单位) 大多数人应…

nodejs里面的event loop

1. event loop 1.1 什么是event-loop js的标准文档定义如下 https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#event_loop https://javascript.info/event-loop html的标准定义 https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-proc…

chatgpt赋能python:如何用Python编写炒股软件

如何用Python编写炒股软件 随着股票投资的普及和互联网技术的发展,越来越多的人开始尝试使用计算机辅助炒股,以获取更好的投资回报。Python作为一种简单易学、高效实用的编程语言,受到了众多股票投资者的青睐。本文将介绍如何用Python编写炒…

单例模式:保证一个类仅有一个实例

单例模式:保证一个类仅有一个实例 欢迎来到设计模式系列的第二篇文章!在上一篇中,我们已经对设计模式有了初步的了解,今天让我们深入研究第一个模式——单例模式。 什么是单例模式? 在软件开发中,我们经…

RabbitMQ从原理到实战—基于Golang【万字详解】

文章目录 前言一、MQ是什么?优势劣势 二、MQ的用途1、应用解耦2、异步加速3、削峰填谷4、消息分发 三、RabbitMQ是什么1、AMQP 协议2、RabbitMQ 包含的要素3、RabbitMQ 基础架构 四、实战1、Simple模式(即最简单的收发模式)2、Work Queues 模型3、Publish/Subscribe…

lnmp架构-mysql

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

Tornado服务器连接数据库

环境 python3.6.1 vscode mysql navicat 安装需要的包 pip install torndb_for_python3 pip install pymysql0.8.0 #请安装pymysql的0.8.0版本,否则可能出现一个FLAG不存在的bug。亲测0.8.0可用。 tornadb不适用于python3,torndb_for_python3 是修改过的…

Tornado框架入门教程

Tornado框架入门教程 Tornado在知乎广为使用,当你用Chrome打开网页版本的知乎,使用开发者工具仔细观察Network里面的请求,就会发现有一个特别的状态码为101的请求,它是用浏览器的websocket技术和后端服务器建立了长连接用来接收服…

Tornado自定义路由

默认路由规则 代码 由下述代码可知,路由规则都在放在 tornado.web.Application 中,强迫症的我看着不舒服不说,而且如果有多级路由的话就很难搞了,比如说用户模块、不同视图模块等等,前一级路由是固定的,后…

Tornado重定向(三)

为什么需要重定向呢?比较常见的就是当网站内部结构变动,如栏目、网址等等的变动就需要进行301重定向,还有内部一些错误的页面也可以做301重定向,提高用户体验。当因网站内部结构变动,需要删除网站中的某些目录时&#…

Tornado介绍

文章目录 特点结构Tornado实现异步原理模块Tornado服务器的三个底层核心模块设计模型 Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的 Tornado是使用Python编写的Web服务器兼Web应用框架与主流Web服务器框架不同…

Tornado初见(一)

在之前的其他博客中介绍了Django,这里介绍一下Tornado。两者的区别可以总结为: django大而全,适合小型的压力不大的项目,一旦压力上来其是扛不住的,毕竟一是太重,而是非异步。 但是好处就是什么都有&#…

Tornado框架学习

目录 底层原理 select epoll 运行机制 Tornado中的Ioloop模块的作用 获取请求方式 文件上传与展示 通过请求头信息的判断来进行反爬验证 注册功能demo 重定向 用户登录 以及自己设置的错误界面跳转 Cookie Tornado 异步服务器端方式 客户端异步请求 Tornado基于epoll…

tornado入门必备知识总结——异步事件循环与协程

文章目录 前言同步、异步、阻塞和非阻塞socket的非阻塞io请求htmlselect、poll和epoll协程异步http请求tornado实现高并发的爬虫 前言 要想走得远,基础就得牢,路漫漫其修远兮,吾将上下而求索。 tornado简介 python web编程三剑客Django&…

【Tornado】Tornado入门教程

目录 Tornado特点结构三个底层核心模块 安装1. 安装python32. 安装tornado3. 编写简单server4. 运行流程 核心组件1. ioloop实例2. app实例3. urls路由表4. handler类 异步协程async 和 await如何工作的怎样调用 协程模式结合 callbacks调用阻塞函数交叉存取技术循环在后台运行…

【数据结构与算法篇】手撕八大排序算法之交换排序

​👻内容专栏: 《数据结构与算法篇》 🐨本文概括:常见交换排序包括冒泡排序与快速排序,本篇讲述冒泡排序与快速排序的思想及实现、复杂度分析。 🐼本文作者: 花 蝶 🐸发布时间&#…