SLAM数学篇:位姿表述

本文深入探讨了机器人在三维空间中的位姿表示,包括旋转矩阵、旋转向量、欧拉角和四元数等方法。通过分析各种表示的优缺点,强调了四元数在SLAM中的应用。此外,还讨论了坐标变换、奇异性问题和群的概念,为理解机器人运动学提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  研究机器人的运动,离不开三维空间。三维空间由3个轴组成,一个空间点位置便可以由三个坐标确定,但机器人作为刚体不光有位置,还有自身的姿态。

机器人位姿示意图

基本概念

点、向量、坐标系

为了描述三维空间中的点 ( a 1 , a 2 , a 3 ) T (a_1,a_2,a_3)^T (a1,a2,a3)T,我们在该空间中选定一组基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3),然后可以找一向量 a a a满足:
a = [ e 1 , e 2 , e 3 ] [ a 1 , a 2 , a 3 ] T a=[e_1,e_2,e_3][a_1,a_2,a_3]^T a=[e1,e2,e3][a1,a2,a3]T
则点可由该向量在该基下的坐标来描述。

基又被称为坐标系,作为描述的载体存在,三维空间可以有很多坐标系,拿机器人问题来说,不同的传感器都有自身的坐标系,则同一点在不同坐标系下将有不同的描述。坐标系又可分为左手系、右手系,第三个轴方向相反,使用的时候要特别注意。

注:此处基使用行向量,坐标使用列向量。

内积、外积、反对称矩阵

a ⋅ b = a T b = ∣ a ∣ ∣ b ∣ c o s < a , b > a \cdot b=a^Tb=|a||b|cos<a,b> ab=aTb=a∣∣bcos<a,b>

a × b = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = a ∧ b , a = [ a 1 , a 2 , a 3 ] T , ∣ a × b ∣ = ∣ a ∣ ∣ b ∣ s i n < a , b > a \times b=\begin{bmatrix} 0 & -a_3 & a_2 \\\\ a_3 & 0 & -a_1 \\\\ -a_2 & a_1 & 0 \end{bmatrix}b=a^ \wedge b,a=[a_1,a_2,a_3]^T,|a \times b|=|a||b|sin<a,b> a×b= 0a3a2a30a1a2a10 b=ab,a=[a1,a2,a3]T,a×b=a∣∣bsin<a,b>

n × n n \times n n×n 阶矩阵 A A A 满足 A T = − A A^T=-A AT=A ,则 A A A 为反对称矩阵。考虑矩阵的重复元素,可将反对称矩阵与向量对应起来,可表示为 a ∧ = A a^\wedge=A a=A A ∨ = a A^\vee=a A=a

欧式变换

  • 旋转

    为了统一描述问题,通常我们需要选择一个共同的坐标系,将其它坐标系的数据变换到该坐标系。
    [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ , a 2 ′ , a 3 ′ ] T = [ e 1 , e 2 , e 3 ] [ a 1 , a 2 , a 3 ] T [e'_1,e'_2,e'_3][a'_1,a'_2,a'_3]^T=[e_1,e_2,e_3][a_1,a_2,a_3]^T [e1,e2,e3][a1,a2,a3]T=[e1,e2,e3][a1,a2,a3]T
    左乘 [ e 1 ′ , e 2 ′ , e 3 ′ ] T [e'_1,e'_2,e'_3]^T [e1,e2,e3]T,由内积性质得到单位矩阵,可得:
    [ a 1 ′ , a 2 ′ , a 3 ′ ] T = R [ a 1 , a 2 , a 3 ] T [a'_1,a'_2,a'_3]^T=R[a_1,a_2,a_3]^T [a1,a2,a3]T=R[a1,a2,a3]T

    R R R为旋转矩阵,行列式为1的正交矩阵( R R T = I , ∣ R ∣ = 1 RR^T=I,|R|=1 RRT=I,R=1),其中 R T = R − 1 R^T=R^{-1} RT=R1,描述了相反的旋转。两个旋转矩阵相乘仍是旋转矩阵。
    R z , ψ = [ c o s ψ − s i n ψ 0 s i n ψ c o s ψ 0 0 0 1 ] , R y , θ = [ c o s θ 0 s i n θ 0 1 0 − s i n θ 0 c o s θ ] , R x , φ = [ 1 0 0 0 c o s φ − s i n φ 0 s i n φ c o s φ ] R_{z,\psi}=\begin{bmatrix} cos\psi & -sin\psi & 0 \\\\ sin\psi & cos\psi & 0 \\\\ 0 & 0 & 1 \end{bmatrix},R_{y,\theta}=\begin{bmatrix} cos\theta & 0 & sin\theta \\\\ 0 & 1 & 0 \\\\ -sin\theta & 0 & cos\theta \end{bmatrix},R_{x,\varphi}=\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & cos\varphi & -sin\varphi \\\\ 0 & sin\varphi & cos\varphi \end{bmatrix} R

### SLAM算法的数学模型解释 #### 定义与目标 同步定与地图构建(SLAM)旨在解决机器人在未知环境中移动的同时创建环境的地图并确定自身置的问题。这一过程中涉及大量的传感器数据处理以及复杂的计算方法,其核心在于通过一系列观测建立关于环境的一致性描述,并估计机器人的轨迹。 #### 数学框架下的SLAM问题表述 在一个典型的SLAM设置中,假设存在一组时刻\( t_0, t_1,...,t_n \),其中每一个时间戳对应于一次新的测量到来。令\(\mathbf{x}_k\)代表机器人在时刻\( k \)的状态向量(通常包括姿参数如置和方向角)[^1];而\(\mathbf{z}_{kj}\)则表示由传感器获取到有关地标\( j \)的信息,在该特定瞬间被观察到了。因此,整个系统的状态可以定义为所有已知路标的集合加上各个时间节点上的姿态: \[ X=\left[\begin{array}{c} \mathbf{x}_{0} \\ \vdots \\ \mathbf{x}_{n} \end{array}\right], Z=\left[\begin{array}{ccc} \mathbf{z}_{01}, & \ldots, & \mathbf{z}_{m n} \end{array}\right]^{\top } \] 这里\( m \)指的是总共检测到的不同特征的数量[^2]。 #### 概率视角下SLAM建模 从贝叶斯推断的角度出发,SLAM的任务就是寻找最优解使得给定所有历史观测条件下当前系统配置的可能性最大: \[ P(X|Z)=\frac{P(Z | X) p_{X}(X)}{p_Z (Z )} \] 此表达式包含了两个重要组成部分——似然函数\( P(Z | X)\),它反映了基于现有路径预测得到的数据如何匹配实际收到的感觉输入;先验分布\( p_X(X)\),表达了对于尚未接收到任何外部提示前我们对可能存在的世界布局有何预期。 #### 图优化视图中的SLAM 另一种广泛采用的方法是将SLAM视为一种最小二乘优化问题。在这种情况下,每一对连续的姿态之间都存在着相对运动约束,同时每个识别出来的静态物体也会引入额外的置关联条件。这些关系可以用因子图的形式直观展示出来,节点分别代表着变量(比如某次扫描的结果或者是某个固定点的空间坐标),边则是连接它们之间的不确定性度量。最终目的是调整所有顶点的置直到整体误差降到最低限度为止。 ```python import numpy as np from scipy.optimize import least_squares def cost_function(params): # 假设params是一个包含所有待估参数的大数组 errors = [] # 计算每一项残差... for i in range(len(measurements)): predicted_measurement = compute_prediction(params[i]) error_vector = measurements[i] - predicted_measurement errors.append(error_vector) return np.concatenate(errors) result = least_squares(cost_function, initial_guess) optimized_parameters = result.x ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值