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

传感器数据处理笔记

里程计模型:

  • 两轮差分地盘的运动学模型
  • 三轮全向底盘的运动学模型
  • 航迹推算(Dead Reckoning)

里程计标定

  • 线性最小二乘的基本原理
  • 最小二乘的直线拟合
  • 最小二乘在里程计标定中的应用

差分底盘的优势就是:

  • 结构简单
  • 便宜(2个电机)
  • 模型简单

两轮差分地盘的运动学模型:

欠驱动系统:xy θ \theta θ三个自由度,vl和vr(两个xx)(意味着运动是耦合的)

(相关过程直接省略)使用的是 V L r − d = V R r + d \frac{V_L}{r-d}=\frac{V_R}{r+d} rdVL=r+dVR然后得到 r = v R + v L v R − v L d r=\frac{v_R+v_L}{v_R-v_L}d r=vRvLvR+vLd

公式:
v = v R + v L 2 ω = v R − v L 2 d \begin{align} \mathbf{v} &= \frac{v_R + v_L}{2} \\ \omega &= \frac{v_R - v_L}{2d} \end{align} vω=2vR+vL=2dvRvL
从上面两式解出 v R , v L v_R,\,v_L vR,vL
{ v R = v + ω d , v L = v − ω d . \begin{cases} v_R = v + \omega\,d,\\ v_L = v - \omega\,d. \end{cases} {vR=v+ωd,vL=vωd.

三轮全向底盘

具有以下的特点:

  • 任何方向平移
  • 全驱动系统: 3个自由度xy θ \theta θ 和 v1、v2、v3输入–》可以向任意方向运动
  • 可进行运动学分解

image-20250504172723447

分解的方法就是假设只有一个方向

image-20250504173043822

第一个:直接相加

第二个:是第一个的矩阵形式

第三个:第二个的逆矩阵

运动学预测(Prediction)——从增量到全局位姿

image-20250504212456405

  1. 概述

在移动机器人导航与定位中(如 EKF、粒子滤波等),预测步骤就是把机器人在自身坐标系下测得的运动增量 ( d x , d y , d θ ) (dx,dy,d\theta) (dx,dy,dθ),转换到全局坐标系并更新全局位姿 ( x , y , θ ) (x,y,\theta) (x,y,θ)

  1. 坐标系与示意图
    markdown复制编辑     机器人自身坐标系             全局坐标系▲ y_body                    ▲ Y│                          /│                        /│                      /└───► x_body        ●───► X
    
    • 自身坐标系:机器人车体前进方向为 x b o d y x_{body} xbody,左侧为 y b o d y y_{body} ybody
    • 全局坐标系:环境中的固定参考系,机器人初始位姿为 ( x , y , θ ) (x,y,\theta) (x,y,θ)
  2. 运动增量与同质变换

    机器人在自身坐标系下运动一小段距离,测得增量向量
    Δ p b o d y = [ d x d y d θ ] . \Delta \mathbf{p}_{body} = \begin{bmatrix} dx \\ dy \\ d\theta \end{bmatrix}. Δpbody= dxdydθ .
    要将它叠加到全局位姿,使用 3×3 同质坐标变换:
    $$
    T(\theta) ;=;
    \begin{bmatrix}
    \cos\theta & -\sin\theta & 0\[4pt]
    \sin\theta & ;\cos\theta & 0\[4pt]
    0 & 0 & 1
    \end{bmatrix},
    \quad
    \begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}

    \begin{bmatrix} x \ y \ \theta \end{bmatrix}
    ;+;
    T(\theta),\Delta \mathbf{p}_{body}.
    展开即得: 展开即得: 展开即得:
    \begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}

    \begin{bmatrix} x \ y \ \theta \end{bmatrix}
    +
    \begin{bmatrix}
    \cos\theta & -\sin\theta & 0\
    \sin\theta & ;\cos\theta & 0\
    0 & 0 & 1
    \end{bmatrix}
    \begin{bmatrix} dx \ dy \ d\theta \end{bmatrix}.
    $$

    • 第一行 x ′ = x + cos ⁡ θ ⋅ d x − sin ⁡ θ ⋅ d y x' = x + \cos\theta\cdot dx - \sin\theta\cdot dy x=x+cosθdxsinθdy
    • 第二行 y ′ = y + sin ⁡ θ ⋅ d x + cos ⁡ θ ⋅ d y y' = y + \sin\theta\cdot dx + \cos\theta\cdot dy y=y+sinθdx+cosθdy
    • 第三行 θ ′ = θ + d θ \theta' = \theta + d\theta θ=θ+dθ
  3. 旋转矩阵详解

    同质矩阵 T ( θ ) T(\theta) T(θ) 中的前 2×2 子矩阵
    R ( θ ) = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \;\cos\theta \end{bmatrix} R(θ)=[cosθsinθsinθcosθ]

    • 用途:将自身坐标系下的平移增量 ( d x , d y ) T (dx,dy)^T (dx,dy)T 旋转到全局坐标系下。
    • 逆变换:若要把全局系增量映回自身系,使用 R − 1 = R T R^{-1}=R^T R1=RT

    $$
    R(\theta)^{-1}
    =R(\theta)^T

    \begin{bmatrix}
    \cos\theta & \sin\theta\
    -\sin\theta & \cos\theta
    \end{bmatrix}.
    $$

  4. 含噪声的运动模型

    实际测量与执行存在误差,引入高斯噪声向量 ε = [ ε x , ε y , ε θ ] T \varepsilon=[\varepsilon_x,\varepsilon_y,\varepsilon_\theta]^T ε=[εx,εy,εθ]T
    $$
    \Delta \mathbf{p}_{body}^{noisy}

    \begin{bmatrix} dx \ dy \ d\theta \end{bmatrix}
    +
    \begin{bmatrix}\varepsilon_x\\varepsilon_y\\varepsilon_\theta\end{bmatrix}.
    完整预测更新为: 完整预测更新为: 完整预测更新为:
    \begin{bmatrix} x’ \ y’ \ \theta’ \end{bmatrix}

    \begin{bmatrix} x \ y \ \theta \end{bmatrix}
    +
    T(\theta),\Delta \mathbf{p}_{body}^{noisy}.
    $$

里程计标定

使用线性最小二乘法进行标定

image-20250504213812355

对于不同规模关系的线性方程组 A x = b A x = b Ax=b,常用的求解或近似方法如下:

  1. 适定方程组( m = n m = n m=n
  • 矩阵可逆 det ⁡ A ≠ 0 \det A \neq 0 detA=0)时
    x = A − 1 b x = A^{-1} b x=A1b
    或者更稳定地用 LU 分解QR 分解等数值方法直接求解。

  • 矩阵不可逆 det ⁡ A = 0 \det A = 0 detA=0)时
    退化为欠定/超定的情形,见下面。

  1. 欠定方程组( m < n m < n m<n,方程少于未知数)
  • 无穷多解:通解可以写成
    x = x 0 + N ( A ) , x = x_0 + N(A), x=x0+N(A),
    其中 x 0 x_0 x0 是任意一个特解, N ( A ) N(A) N(A) 是齐次解空间(维度 n − m n-m nm)。

  • 最小范数解(最常用)
    取唯一的 “最小二乘范数” 解(Moore–Penrose 伪逆),即
    x ∗ = A T ( A A T ) − 1 b , x^* = A^T (A A^T)^{-1} b, x=AT(AAT)1b,
    它也是所有解中 ∥ x ∥ \|x\| x 最小者。

  1. 超定方程组( m > n m > n m>n,方程多于未知数)
  • 无精确解:通常不存在满足所有方程的 x x x

  • 最小二乘解
    求解
    min ⁡ x ∥ A x − b ∥ 2 , \min_x \|A x - b\|^2, xminAxb2,
    通解为正规方程
    A T A x = A T b ⟹ x ∗ = ( A T A ) − 1 A T b . A^T A\,x = A^T b \quad\Longrightarrow\quad x^* = (A^T A)^{-1} A^T b. ATAx=ATbx=(ATA)1ATb.
    在数值上,推荐使用 QR 分解SVD 求解最小二乘,以保证稳定性。

  • m = n m=n m=n:直接求逆或分解;
  • $m:参数化通解,常取伪逆给出最小范数解;
  • m > n m>n m>n:最小二乘,正规方程或分解方法。

一般来说通解是 x ∗ = ( A T A ) − 1 A T b . x^* = (A^T A)^{-1} A^T b. x=(ATA)1ATb.但是会出现一些问题

  1. 超定方程组( m > n m>n m>n,方程多于未知数)
  • 最小二乘解
    x ∗ = ( A T A ) − 1 A T b x^* = (A^T A)^{-1} A^T b x=(ATA)1ATb

  • 数值问题

    1. 条件数放大 κ ( A T A ) ≈ κ ( A ) 2 \kappa(A^TA)\approx\kappa(A)^2 κ(ATA)κ(A)2,小的浮点误差被平方放大,解可能极不准确。
    2. b b b 的微小扰动敏感:当 b → b + δ b b\to b+\delta b bb+δb 时, x ∗ x^* x 的变化往往远大于 δ b \delta b δb
    3. A T A A^TA ATA 不可逆或病态:若 A A A 列不满秩, A T A A^TA ATA 奇异;即便可逆,也可能因病态(高条件数)而不可靠。
  • 改进方法

    • QR 分解:令 A = Q R A=Q R A=QR,解 R x = Q T b R\,x=Q^T b Rx=QTb,避免直接构造并求逆 A T A A^TA ATA

    • SVD/伪逆 A = U Σ V T A=U \Sigma V^T A=UΣVT,取
      x ∗ = V Σ + U T b , x^* = V\,\Sigma^+\,U^T b, x=VΣ+UTb,
      可处理秩亏且更稳定。

    • 正则化(Ridge)
      x ∗ = ( A T A + λ I ) − 1 A T b , λ > 0 x^* = (A^T A + \lambda I)^{-1}A^T b,\quad \lambda>0 x=(ATA+λI)1ATb,λ>0
      对抗病态与噪声。


http://www.xdnf.cn/news/3832.html

相关文章:

  • Linux中的粘滞位和开发工具和文本编辑器vim
  • 马小帅面试遇“灵魂拷问“
  • hot100:链表倒数k个节点- 力扣(LeetCode)
  • 研0大模型学习(第11天)
  • FFT实现(Cooley-Tukey算法)
  • WEB 前端学 JAVA(二)Java 的发展与技术图谱简介
  • TS 字面量类型
  • Mybatis学习(下)
  • LabVIEW开发风量智能监测系统
  • 【杂谈】-探索 NVIDIA Dynamo 的高性能架构
  • 牛客周赛90 C题- Tk的构造数组 题解
  • STM32智能垃圾桶:四种控制模式实战开发
  • 58认知干货:创业经验分享及企业形式的汇总
  • 【AI面试准备】逻辑思维、严谨性、总结能力、沟通协作、适应力与目标导向
  • 文件一键解密软件工具(支持pdf、word、excel、ppt、rar、zip格式文件)
  • 链接文件及功能安全:英飞凌官方文档摘录 - Tasking链接文件
  • 开上“Python跑的车”——自动驾驶数据可视化的落地之道
  • 使用python写多文件#inlcude
  • Spring AI Advisors API:AI交互的灵活增强利器
  • ES6入门---第三单元 模块三:async、await
  • 网络:TCP三次握手、四次挥手
  • 介词:连接名词与句子其他成分的桥梁
  • 互联网大厂Java面试:从基础到实战
  • 【漫话机器学习系列】239.训练错误率(Training Error Rate)
  • vulkanscenegraph显示倾斜模型(6.4)-多线程下的记录与提交
  • Dalvik虚拟机和ART虚拟机
  • ART 下 Dex 加载流程源码分析 和 通用脱壳点
  • 【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?
  • 学习黑客Linux权限
  • 【中间件】brpc_基础_用户态线程中断