当前位置: 首页 > news >正文

四元数 (Quaternion)中的扰动知识(6)

1. 左扰动定义

左乘扰动(left-multiplicative)的形式为:

qnew=δq⊗q, q_{\text{new}} = \delta q \otimes q, qnew=δqq,

其中 q=[w,v]q=[w,\mathbf v]q=[w,v](写作 www 为标量部分,v∈R3\mathbf v\in\mathbb R^3vR3 为向量部分),并把小扰动 δθ∈R3\delta\theta\in\mathbb R^3δθR3 用四元数近似表示为

δq≈[1,  12 δθ] \delta q \approx \left[1,\; \tfrac{1}{2}\,\delta\theta\right] δq[1,21δθ]

(这是指数映射在小角近似下的常用一阶展开: exp⁡(12[δθ])≈[1,12δθ]\exp(\tfrac12[\delta\theta])\approx[1,\tfrac12\delta\theta]exp(21[δθ])[1,21δθ])。


2. 四元数乘法公式约定

写成分块形式,若

p=[pw,  p],r=[rw,  r], p = [p_w, \; \mathbf p],\qquad r=[r_w,\; \mathbf r], p=[pw,p],r=[rw,r],

p⊗r=(pwrw−p⊤r,  pwr+rwp+p×r). p \otimes r = \big(p_w r_w - \mathbf p^\top \mathbf r,\; p_w \mathbf r + r_w \mathbf p + \mathbf p \times \mathbf r\big). pr=(pwrwpr,pwr+rwp+p×r).

将上式用于 δq⊗q\delta q \otimes qδqq,设 δq=[δw,  δv]\delta q=[\delta_w,\; \delta\mathbf v]δq=[δw,δv](后面代入 δw≈1,  δv≈12δθ\delta_w \approx 1,\; \delta\mathbf v \approx \tfrac12\delta\thetaδw1,δv21δθ):

  • 标量部分:

    (δq⊗q)w=δw  w−δv⊤v. (\delta q \otimes q)_w = \delta_w\; w - \delta\mathbf v^\top \mathbf v. (δqq)w=δwwδvv.

  • 向量部分:

    (δq⊗q)v=δwv+w δv+δv×v. (\delta q \otimes q)_{\mathbf v} = \delta_w \mathbf v + w\,\delta\mathbf v + \delta\mathbf v \times \mathbf v. (δqq)v=δwv+wδv+δv×v.


3. 左扰动线性化(小扰动展开)

δw=1+O(∥δθ∥2)\delta_w = 1 + O(\|\delta\theta\|^2)δw=1+O(δθ2)δv=12δθ+O(∥δθ∥3)\delta\mathbf v = \tfrac12\delta\theta + O(\|\delta\theta\|^3)δv=21δθ+O(δθ3) 代入,并忽略二阶以上项:

  • 标量部分:

    (δq⊗q)w≈(1)⋅w−(12δθ)⊤v=w−12 v⊤δθ. (\delta q \otimes q)_w \approx (1)\cdot w - \left(\tfrac12\delta\theta\right)^\top \mathbf v = w - \tfrac12\,\mathbf v^\top \delta\theta. (δqq)w(1)w(21δθ)v=w21vδθ.

    所以标量部分的线性增量为 −12v⊤δθ-\tfrac12 \mathbf v^\top \delta\theta21vδθ

  • 向量部分:

    (δq⊗q)v≈1⋅v+w⋅(12δθ)+(12δθ)×v=v+12(w δθ+δθ×v). (\delta q \otimes q)_{\mathbf v} \approx 1\cdot\mathbf v + w\cdot\left(\tfrac12\delta\theta\right) + \left(\tfrac12\delta\theta\right)\times \mathbf v = \mathbf v + \tfrac12\Big( w\,\delta\theta + \delta\theta\times \mathbf v \Big). (δqq)v1v+w(21δθ)+(21δθ)×v=v+21(wδθ+δθ×v).

    向量部分的线性增量为 12(w δθ+δθ×v)\tfrac12\big( w \, \delta\theta + \delta\theta \times \mathbf v\big)21(wδθ+δθ×v)

把标量与向量线性增量合并为矩阵形式:

qnew≈[wv]12[−v⊤wI3+[v]×]δθ. q_{\text{new}} \approx \begin{bmatrix} w \\ \mathbf v \end{bmatrix}\tfrac12 \begin{bmatrix} -\mathbf v^\top \\ w I_3 + [\mathbf v]_\times \end{bmatrix} \delta\theta. qnew[wv]21[vwI3+[v]×]δθ.

这就是 S(q)S(q)S(q) 的来源:第一行是 −v⊤-\mathbf v^\topv,下三行是 wI3+[v]×w I_3 + [\mathbf v]_\timeswI3+[v]×

因此

  ∂qnew∂δθ∣δθ=0  =  12S(q)   \boxed{\; \frac{\partial q_{\text{new}}}{\partial \delta\theta}\Big|_{\delta\theta=0} \;=\; \tfrac12 S(q)\; } δθqnewδθ=0=21S(q)

S(q)=[vx−vy−vzw−vzvyvzw−vxvyvxw] S(q)=\begin{bmatrix}v_x & - v_y & - v_z \\ w & -v_z & v_y \\ v_z & w & -v_x \\v_y & v_x & w \end{bmatrix} S(q)=vxwvzvyvyvzwvxvzvyvxw

(上式按列为对应 δθx,δθy,δθz\delta\theta_x,\delta\theta_y,\delta\theta_zδθx,δθy,δθz 的系数;注意行顺序:第一行为标量分量,接下 3 行为向量分量)。


4. 左扰动显式矩阵(

v=(vx,vy,vz)⊤v=(v_x,v_y,v_z)^\topv=(vx,vy,vz),记 [v]×[v]_\times[v]×

[v]×=[0−vzvyvz0−vx−vyvx0]. [v]_\times = \begin{bmatrix} 0 & -v_z & v_y\\ v_z & 0 & -v_x\\ -v_y & v_x & 0 \end{bmatrix}. [v]×=0vzvyvz0vxvyvx0.

S(q)=[−vx−vy−vzw−vzvyvzw−vx−vyvxw][−v⊤wI3+[v]×]. S(q)= \begin{bmatrix} -v_x & - v_y & - v_z \\ w & -v_z & v_y \\ v_z & w & -v_x \\ -v_y & v_x & w \end{bmatrix} \begin{bmatrix} -v^\top \\ w I_3 + [v]_\times \end{bmatrix}. S(q)=vxwvzvyvyvzwvxvzvyvxw[vwI3+[v]×].


5. 代数一致性验证

下面从代数角度用四元数乘法的左乘矩阵 L(δq)L(\delta q)L(δq) 展开:

δq⊗q=L(δq) q \delta q \otimes q = L(\delta q)\, q δqq=L(δq)q

δq≈[1,12δθ]\delta q \approx [1,\tfrac12\delta\theta]δq[1,21δθ] 时,把 L(δq)L(\delta q)L(δq) 线性化,对 qqq 作用后得到同样的 12S(q)δθ\tfrac12 S(q)\delta\theta21S(q)δθ 结果。两种方法等价。


6. 左扰动代码实现

下面的函数返回矩阵 S(q)S(q)S(q)(4×3),以及封装好的计算 12S(q)δθ\tfrac12 S(q)\delta\theta21S(q)δθ 用法:

#include <Eigen/Core>
#include <Eigen/Geometry>// q assumed to be unit quaternion (Eigen::Quaterniond)
Eigen::Matrix<double,4,3> S_of_q(const Eigen::Quaterniond &q) {Eigen::Matrix<double,4,3> S;Eigen::Vector3d v(q.x(), q.y(), q.z());// first row: -v^TS.row(0) = -v.transpose();// lower 3x3: w * I + [v]_xEigen::Matrix3d v_x;v_x <<    0, -v.z(),  v.y(),v.z(),     0, -v.x(),-v.y(),  v.x(),     0;S.block<3,3>(1,0) = q.w() * Eigen::Matrix3d::Identity() + v_x;return S;
}// 使用示例: compute q_new ≈ q + 0.5 * S(q) * delta_theta
Eigen::Quaterniond left_update_quat(const Eigen::Quaterniond &q, const Eigen::Vector3d &delta_theta) {Eigen::Matrix<double,4,3> S = S_of_q(q);Eigen::Matrix<double,4,1> dq_lin = 0.5 * S * delta_theta; // linearized incrementEigen::Quaterniond q_new;q_new.w() = q.w() + dq_lin(0);q_new.x() = q.x() + dq_lin(1);q_new.y() = q.y() + dq_lin(2);q_new.z() = q.z() + dq_lin(3);q_new.normalize(); // optional: enforce unit length (error is O(|delta|^2))return q_new;
}

7. 右扰动定义

设:

qnew=q⊗δq,δq≈[1,12δθ],  δθ∈R3 q_{\text{new}} = q \otimes \delta q, \quad \delta q \approx [1, \frac{1}{2} \delta\theta],\; \delta\theta \in \mathbb{R}^3 qnew=qδq,δq[1,21δθ],δθR3

四元数乘法公式(分块):

q⊗δq=[wv]⊗[δwδv][wδw−v⊤δvwδv+δwv+v×δv]. q \otimes \delta q = \begin{bmatrix} w \\ \mathbf v \end{bmatrix} \otimes \begin{bmatrix} \delta_w \\ \delta\mathbf v \end{bmatrix} \begin{bmatrix} w \delta_w - \mathbf v^\top \delta\mathbf v \\ w \delta\mathbf v + \delta_w \mathbf v + \mathbf v \times \delta\mathbf v \end{bmatrix}. qδq=[wv][δwδv][wδwvδvwδv+δwv+v×δv].


8. 右扰动线性化(小角近似)

δw≈1,δv≈12δθ\delta_w \approx 1, \delta\mathbf v \approx \frac12 \delta\thetaδw1,δv21δθ,忽略二阶项:

  • 标量部分:

(q⊗δq)w≈w−v⊤12δθ=w−12v⊤δθ (q \otimes \delta q)_w \approx w - \mathbf v^\top \frac12 \delta\theta = w - \frac12 \mathbf v^\top \delta\theta (qδq)wwv21δθ=w21vδθ

  • 向量部分:

(q⊗δq)v≈v+w12δθ+12δθ×v=v+12(wI3−[v]×)δθ (q \otimes \delta q)_{\mathbf v} \approx \mathbf v + w \frac12 \delta\theta + \frac12 \delta\theta \times \mathbf v = \mathbf v + \frac12 (w I_3 - [\mathbf v]_\times) \delta\theta (qδq)vv+w21δθ+21δθ×v=v+21(wI3[v]×)δθ

注意与左扰动的区别:

  • 左扰动向量增量是 wI3+[v]×w I_3 + [\mathbf v]_\timeswI3+[v]×
  • 右扰动向量增量是 wI3−[v]×w I_3 - [\mathbf v]_\timeswI3[v]×

9. 右扰动矩阵形式

qnew≈q+12[v⊤wI3−[v]×]⏟Sr(q)δθ q_{\text{new}} \approx q + \frac12 \underbrace{ \begin{bmatrix}\mathbf v^\top \\ w I_3 - [\mathbf v]_\times \end{bmatrix}}_{S_r(q)} \delta\theta qnewq+21Sr(q)[vwI3[v]×]δθ

其中:

Sr(q)=[−vx−vy−vzwvz−vyvzwvxvy−vxw]. S_r(q) = \begin{bmatrix} -v_x & - v_y & - v_z \\ w & v_z & -v_y \\v_z & w & v_x \\ v_y & -v_x & w \end{bmatrix}. Sr(q)=vxwvzvyvyvzwvxvzvyvxw.

这是右扰动对应的 4×3 雅可比矩阵。


10. 右扰动代码示例

Eigen::Matrix<double,4,3> S_right_of_q(const Eigen::Quaterniond &q) {Eigen::Matrix<double,4,3> S;Eigen::Vector3d v(q.x(), q.y(), q.z());// first row: -v^TS.row(0) = -v.transpose();// lower 3x3: w*I - [v]_xEigen::Matrix3d v_x;v_x <<    0, -v.z(),  v.y(),v.z(),     0, -v.x(),-v.y(),  v.x(),     0;S.block<3,3>(1,0) = q.w() * Eigen::Matrix3d::Identity() - v_x;return S;
}

11.对比

左扰动 δq⊗q\delta q \otimes qδqq右扰动 q⊗δqq \otimes \delta qqδq
矩阵形式S(q)=[−v⊤wI3+[v]×]S(q) = \begin{bmatrix}-v^\top\\ w I_3 + [v]_\times\end{bmatrix}S(q)=[vwI3+[v]×]Sr(q)=[−v⊤wI3−[v]×]S_r(q) = \begin{bmatrix}-v^\top\\ w I_3 - [v]_\times\end{bmatrix}Sr(q)=[vwI3[v]×]
更新公式qnew≈q+12S(q)δθq_{\text{new}} \approx q + \frac12 S(q) \delta\thetaqnewq+21S(q)δθqnew≈q+12Sr(q)δθq_{\text{new}} \approx q + \frac12 S_r(q) \delta\thetaqnewq+21Sr(q)δθ
对应于旋转方向左扰动右扰动

注意:Ceres 默认使用 右扰动 的 LocalParameterization,如果你在 Ceres 中定义四元数参数化,实际上它内部使用的就是 Sr(q)S_r(q)Sr(q)


http://www.dtcms.com/a/578693.html

相关文章:

  • 代刷网站建设青海省建设厅官方网站建设云
  • 南山网站优化建设网站安全措施
  • 推动品牌建设的网站网络宣传方案
  • 图片类网站如何做优化WordPress众筹源码
  • 电影网站是怎么做的陕西做天然气公司网站
  • 从零开始MySQL-第5章 函数
  • 广东网站建设十大品牌网站调用新浪微博
  • 邢台集团网站建设价格十大免费行情软件视频
  • React 发送短信验证码和验证码校验功能组件
  • 做视频解析网站犯法荆州网站推广怎么做
  • 中国网站优化公司关键词分析工具
  • Temp Mail4.09 | 生成匿名临时邮箱地址,避免垃圾邮件,保护隐私
  • 可以把网站服务器放在哪里wordpress代码添加
  • 使用Requests和LXML实现安居客二手房数据高效爬取
  • 办公用品十大购物网站排名辞职做网站
  • 威海外贸网站建设联系方式网站域名后缀代表什么意思
  • 从生产到质量: RFID 技术赋能汽车制造全链路管控
  • redis中的offset是什么意思
  • soho做网站谷歌推广短视频推广渠道有哪些
  • 广州微信网站建设报价表网站技术方案
  • 【论文精读】Lumiere:重塑视频生成的时空扩散模型
  • 黑龙江住房和城乡建设厅网站襄城县做网站的
  • 外贸网站vps服务器gstatic wordpress
  • 陕西省建设安全协会网站wordpress采集中文
  • 标签Labels、Scheduler:调度器、k8s污点与容忍度
  • 网站开发询价单重庆网站建设报价
  • [论文阅读] AI + 软件工程 | 3340个Python ML项目实证:PyQu工具+61种代码变更,精准提升软件质量!
  • 【数据结构+算法】进栈顺序推算、卡特兰数与逆波兰表达式
  • 网站源码 一品资源网电龙网站建设
  • 文山网站建设代理成都品牌形象设计