【刚体运动几何】(一)刚体速度转换

参考:《A Mathematical Introduction to Robotic Manipulation》

疑问:

  • 刚体的速度只有在选定坐标系时才有谈论意义,比如一台小车可以看作是一个刚体,其上有三个传感器,Camera有一个速度,IMU有一个速度,轮子有一个速度,首先它们的速度是不同的(比如把地球看作一个刚体,地心的速度与地球表面的速度是不同的),那么这些速度的关系是什么呢?
  • VIO中为何不使用Camera系而是IMU作为body系,如果使用Camera作为body系,IMU的测量值(角速度和加速度)要如何转化到Camera坐标系下?

1. 转动速度

刚体上任意一点 q q q在空间坐标系中的运动轨迹为:
q a ( t ) = R a b ( t ) q b \mathbf{q}_{a}(t)=\mathbf{R}_{a b}(t) \mathbf{q}_{b} qa(t)=Rab(t)qb

其中,A为空间坐标系,B为物体坐标系,坐标 q b \mathbf{q}_b qb是在物体坐标系中固定不变的,该点在空间坐标系中的速度为:
v q a ( t ) = d d t q a ( t ) = R ˙ a b ( t ) q b \mathbf{v}_{\mathbf{q}_{a}}(t)=\frac{d}{d t} \mathbf{q}_{a}(t)=\dot{\mathbf{R}}_{a b}(t) \mathbf{q}_{b} vqa(t)=dtdqa(t)=R˙ab(t)qb

因此, R a b \mathbf{R}_{a b} Rab将一点的刚体坐标变换为该点的空间速度,类似 R a b \mathbf{R}_{a b} Rab这种表示需要九个参数,不是很方便,转换成下面的简洁形式:
v q a ( t ) = R ˙ a b ( t ) R a b − 1 ( t ) R a b ( t ) q b v_{q_{a}}(t)=\dot{R}_{a b}(t) R_{a b}^{-1}(t) R_{a b}(t) q_{b} vqa(t)=R˙ab(t)Rab1(t)Rab(t)qb

我们已经知道 R ˙ a b ( t ) R a b − 1 ( t ) ∈ so ⁡ ( 3 ) \dot{R}_{a b}(t) R_{a b}^{-1}(t) \in \operatorname{so}(3) R˙ab(t)Rab1(t)so(3),是反对陈矩阵,记为:
ω ^ a b s : = R ˙ a b R a b − 1 \widehat{\omega}_{a b}^{s}:=\dot{R}_{a b} R_{a b}^{-1} ω abs:=R˙abRab1

其中, ω ^ a b s \widehat{\omega}_{a b}^{s} ω abs表示 b b b系在 a a a系下的速度在空间坐标系下的表示,描述为物体相对空间坐标系A的瞬时角速度

1.1 刚体上一点的速度(A系与B系之间只有纯旋转运动)
图片名称

现在就可以使用物体的瞬时角速度来表示一点的速度,如下:
v q a ( t ) = ω ^ a b s R a b ( t ) q b = ω a b s ( t ) × q a ( t ) v_{q_{a}}(t)=\widehat{\omega}_{a b}^{s} R_{a b}(t) q_{b}=\omega_{a b}^{s}(t) \times q_{a}(t) vqa(t)=ω absRab(t)qb=ωabs(t)×qa(t)

对应的物理含义为:刚体的转速与刚体上一点到坐标系原点的距离的叉乘即为这一点的瞬时速度, q b q_{b} qb这个向量的长度越长,速度就越大,反之亦然,当长度为0时(该点与坐标系原点重合时),速度为0

这样,只要知道物体的瞬时角速度和物体坐标上任意一点的位置,就可以得到该点在空间坐标下的速度

1.2 (瞬时)物体坐标系下的转动速度

同理也可得到 ω ^ a b b \widehat{\omega}_{a b}^{b} ω abb,如下:
ω ^ a b b : = R a b − 1 R ˙ a b \widehat{\omega}_{a b}^{b}:=R_{a b}^{-1} \dot{R}_{a b} ω abb:=Rab1R˙ab

它描述的是相对于瞬时物体坐标系B的角速度( b b b系在 a a a系下的速度在物体坐标系下的表示),该角速度可以直接通过陀螺仪直接测量得到

由以上两式可得两种角速度之间的关系:
ω ^ a b b = R a b − 1 ω ^ a b s R a b  or  ω a b b = R a b − 1 ω a b s \widehat{\omega}_{a b}^{b}=R_{a b}^{-1} \widehat{\omega}_{a b}^{s} R_{a b} \quad \text { or } \quad \omega_{a b}^{b}=R_{a b}^{-1} \omega_{a b}^{s} ω abb=Rab1ω absRab or ωabb=Rab1ωabs

因此,物体角速度为将空间角速度旋转到瞬时物体坐标系而得到的

2. 刚体速度

对于运动轨迹为为单参数曲线 g a b ( t ) ∈ S E ( 3 ) g_{a b}(t) \in S E(3) gab(t)SE(3)的一般情况
g a b ( t ) = [ R a b ( t ) p a b ( t ) 0 1 ] g_{a b}(t)=\left[\begin{array}{cc} R_{a b}(t) & p_{a b}(t) \\ 0 & 1 \end{array}\right] gab(t)=[Rab(t)0pab(t)1]

可得,
g ˙ a b g a b − 1 = [ R ˙ a b p ˙ a b 0 0 ] [ R a b T − R a b T p a b 0 1 ] = [ R ˙ a b R a b T − R ˙ a b R a b T p a b + p ˙ a b 0 0 ] \dot{g}_{a b} g_{a b}^{-1}=\left[\begin{array}{cc} \dot{R}_{a b} & \dot{p}_{a b} \\ 0 & 0 \end{array}\right]\left[\begin{array}{cc} R_{a b}^{T} & -R_{a b}^{T} p_{a b} \\ 0 & 1 \end{array}\right]=\left[\begin{array}{cc} \dot{R}_{a b} R_{a b}^{T} & -\dot{R}_{a b} R_{a b}^{T} p_{a b}+\dot{p}_{a b} \\ 0 & 0 \end{array}\right] g˙abgab1=[R˙ab0p˙ab0][RabT0RabTpab1]=[R˙abRabT0R˙abRabTpab+p˙ab0]

定义 V a b s ∈ s e ( 3 ) V_{ab}^s \in se(3) Vabsse(3)表示 b b b系在 a a a系下的速度在空间坐标系下的表示
V ^ a b s = g ˙ a b g a b − 1 , V a b s = [ v a b s ω a b s ] = [ − R ˙ a b R a b T p a b + p ˙ a b ( R ˙ a b R a b T ) ∨ ] \widehat{V}_{a b}^{s}=\dot{g}_{a b} g_{a b}^{-1} ,\quad V_{a b}^{s}=\left[\begin{array}{c} v_{a b}^{s} \\ \omega_{a b}^{s} \end{array}\right]=\left[\begin{array}{c} -\dot{R}_{a b} R_{a b}^{T} p_{a b}+\dot{p}_{a b} \\ \left(\dot{R}_{a b} R_{a b}^{T}\right)^{\vee} \end{array}\right] V abs=g˙abgab1,Vabs=[vabsωabs]=[R˙abRabTpab+p˙ab(R˙abRabT)]

虽然 V a b s ∈ s e ( 3 ) V_{ab}^s \in se(3) Vabsse(3),但这里的移动分量 v a b s v_{a b}^{s} vabs却是以m/s为单位的平移速度,因为 p ˙ a b \dot{p}_{a b} p˙ab的单位是m/s

注意,移动分量 v a b s ( t ) v_{ab}^s(t) vabs(t) 并不是刚体坐标系原点的速度,而是刚体上一点在 t t t时刻经过空间坐标系原点时(可能是想象的)的速度。即,如果一个人站在空间坐标系的原点处去测量刚体上正好经过原点的一点的瞬时速度,那么该瞬时速度即为 v a b s ( t ) v_{ab}^s(t) vabs(t)

2.1 刚体上一点的速度
图片名称

在空间坐标系中,固联在刚体上的一点 q q q的坐标为
q a ( t ) = g a b ( t ) q b q_{a}(t)=g_{a b}(t) q_{b} qa(t)=gab(t)qb

两边微分得
v q a = q ˙ a = g ˙ a b q b = g ˙ a b g a b − 1 q a v_{q_{a}}=\dot{q}_{a}=\dot{g}_{a b} q_{b}=\dot{g}_{a b} g_{a b}^{-1} q_{a} vqa=q˙a=g˙abqb=g˙abgab1qa

进一步得到
v q a = V ^ a b s q a = ω a b s × q a + v a b s v_{q_{a}}=\widehat{V}_{a b}^{s} q_{a}=\omega_{a b}^{s} \times q_{a}+v_{a b}^{s} vqa=V absqa=ωabs×qa+vabs

其中 v q a v_{q_{a}} vqa由两部分构成, ω a b s × q a \omega_{a b}^{s} \times q_{a} ωabs×qa表示因旋转产生的速度, v a b s v_{a b}^{s} vabs表示平移产生的速度,两个向量相加即为最终的合成速度

2.2 (瞬时)物体坐标系下的刚体速度

向量可以直接通过坐标系之间旋转外参进行转换

由于 v q a v_{q_{a}} vqa是向量,使用旋转矩阵进行转换,可得物体坐标系中一点的速度为:
[ v q b 0 ] = g a b − 1 [ v q a 0 ] \begin{bmatrix} v_{q_{b}} \\ 0 \end{bmatrix}=g_{a b}^{-1} \begin{bmatrix} v_{q_{a}} \\ 0 \end{bmatrix} [vqb0]=gab1[vqa0]

忽略矩阵维度,简写成:
v q b = g a b − 1 v q a = g a b − 1 g ˙ a b q b = V ^ a b b ( t ) q b v_{q_{b}}=g_{a b}^{-1} v_{q_{a}}=g_{a b}^{-1} \dot{g}_{a b} q_{b}=\widehat{V}_{a b}^{b}(t) q_{b} vqb=gab1vqa=gab1g˙abqb=V abb(t)qb

物体坐标系下的刚体速度定义为:
V ^ a b b = g a b − 1 g ˙ a b = [ R a b T R ˙ a b R a b T p ˙ a b 0 0 ] , V a b b = [ v a b b ω a b b ] = [ R a b T p ˙ a b ( R a b T R ˙ a b ) ∨ ] \widehat{V}_{a b}^{b}=g_{a b}^{-1} \dot{g}_{a b}=\left[\begin{array}{cc} R_{a b}^{T} \dot{R}_{a b} & R_{a b}^{T} \dot{p}_{a b} \\ 0 & 0 \end{array}\right] ,\quad V_{a b}^{b}=\left[\begin{array}{c} v_{a b}^{b} \\ \omega_{a b}^{b} \end{array}\right]=\left[\begin{array}{c} R_{a b}^{T} \dot{p}_{a b} \\ \left(R_{a b}^{T} \dot{R}_{a b}\right)^{\vee} \end{array}\right] V abb=gab1g˙ab=[RabTR˙ab0RabTp˙ab0],Vabb=[vabbωabb]=[RabTp˙ab(RabTR˙ab)]

需要指出的是,物体速度并不是物体相对于物体坐标系的速度(此速度总是零

2.3 空间坐标下的刚体速度与(瞬时)物体坐标系下的刚体速度的关系

V ^ a b s = g ˙ a b g a b − 1 = g a b ( g a b − 1 g ˙ a b ) g a b − 1 = g a b V ^ a b b g a b − 1 \widehat{V}_{a b}^{s}=\dot{g}_{a b} g_{a b}^{-1}=g_{a b}\left(g_{a b}^{-1} \dot{g}_{a b}\right) g_{a b}^{-1}=g_{a b} \widehat{V}_{a b}^{b} g_{a b}^{-1} V abs=g˙abgab1=gab(gab1g˙ab)gab1=gabV abbgab1

可得,
V a b s = [ v a b s ω a b s ] = [ R a b p ^ a b R a b 0 R a b ] [ v a b b ω a b b ] = A d ( g a b ) V a b b V_{a b}^{s}=\left[\begin{array}{c} v_{a b}^{s} \\ \omega_{a b}^{s} \end{array}\right]=\left[\begin{array}{cc} R_{a b} & \widehat{p}_{a b} R_{a b} \\ 0 & R_{a b} \end{array}\right]\left[\begin{array}{c} v_{a b}^{b} \\ \omega_{a b}^{b} \end{array}\right] = \mathbf{Ad}(g_{ab}) V_{a b}^{b} Vabs=[vabsωabs]=[Rab0p abRabRab][vabbωabb]=Ad(gab)Vabb

3. 刚体速度的坐标转换

假如知道了IMU与底盘坐标系之间的外参以及IMU的速度,如何得到底盘坐标系的速度

3.1 空间坐标系下的转换

假设存在A、B、C三个坐标系,它们在空间坐标系下的刚体速度存在下述关系:
V ^ a c s = g ˙ a c g a c − 1 = ( g ˙ a b g b c + g a b g ˙ b c ) ( g b c − 1 g a b − 1 ) = g ˙ a b g a b − 1 + g a b ( g ˙ b c g b c − 1 ) g a b − 1 = V ^ a b s + g a b V ^ b c b g a b − 1 \begin{aligned} \widehat{V}_{a c}^{s} &=\dot{g}_{a c} g_{a c}^{-1} \\ &=\left(\dot{g}_{a b} g_{b c}+g_{a b} \dot{g}_{b c}\right)\left(g_{b c}^{-1} g_{a b}^{-1}\right) \\ &=\dot{g}_{a b} g_{a b}^{-1}+g_{a b}\left(\dot{g}_{b c} g_{b c}^{-1}\right) g_{a b}^{-1} \\ &=\widehat{V}_{a b}^{s}+g_{a b} \widehat{V}_{b c}^{b} g_{a b}^{-1} \\ \end{aligned} V acs=g˙acgac1=(g˙abgbc+gabg˙bc)(gbc1gab1)=g˙abgab1+gab(g˙bcgbc1)gab1=V abs+gabV bcbgab1

注意,这里使用的是 V ^ b c b \widehat{V}_{b c}^{b} V bcb,而书里面使用的是 V ^ b c s \widehat{V}_{b c}^{s} V bcs,好像是书里写的有问题

转换成向量的形式,
V a c s = V a b s + A d ( g a b ) V b c b {V}_{a c}^{s} = {V}_{a b}^{s} + \mathbf{Ad}(g_{a b}) {V}_{b c}^{b} Vacs=Vabs+Ad(gab)Vbcb

如果 g b c g_{bc} gbc是常量,相当于刚体上两个坐标系B和C之间的外参,此时二者的速度关系为
V a c s = V a b s {V}_{a c}^{s} = {V}_{a b}^{s} Vacs=Vabs

由于两个坐标系B和C同属于一个刚体,所以两个坐标系B和C在空间坐标系下的刚体速度是相同的

将上式转换到物体坐标系
A d ( g a c ) V a c c = A d ( g a b ) V a b s V a c c = A d ( g a c ) − 1 A d ( g a b ) V a b s V a c c = A d ( g c b ) V a b s \begin{aligned} \mathbf{Ad}(g_{ac}){V}_{a c}^{c} = \mathbf{Ad}(g_{ab}) {V}_{a b}^{s} \\ {V}_{a c}^{c} = \mathbf{Ad}(g_{ac})^{-1} \mathbf{Ad}(g_{ab}) {V}_{a b}^{s} \\ {V}_{a c}^{c} = \mathbf{Ad}(g_{cb}) {V}_{a b}^{s} \end{aligned} Ad(gac)Vacc=Ad(gab)VabsVacc=Ad(gac)1Ad(gab)VabsVacc=Ad(gcb)Vabs

即,刚体上两个坐标系B和C在各自的物体坐标系下的刚体速度关系

3.2 物体坐标系下的转换

同理可得,
V ^ a c c = g a c − 1 g ˙ a c = ( g b c − 1 g a b − 1 ) ( g ˙ a b g b c + g a b g ˙ b c ) = g b c − 1 g a b − 1 g ˙ a b g b c + g b c − 1 g ˙ b c = g b c − 1 V ^ a b b g b c + V ^ b c c \begin{aligned} \widehat{V}_{a c}^{c} &=g_{a c}^{-1} \dot{g}_{a c} \\ &=\left(g_{b c}^{-1} g_{a b}^{-1}\right) \left(\dot{g}_{a b} g_{b c}+g_{a b} \dot{g}_{b c}\right) \\ &= g_{b c}^{-1} g_{a b}^{-1} \dot{g}_{a b} g_{b c} + g_{b c}^{-1} \dot{g}_{b c} \\ &= g_{b c}^{-1} \widehat{V}_{a b}^{b} g_{b c} + \widehat{V}_{b c}^{c} \end{aligned} V acc=gac1g˙ac=(gbc1gab1)(g˙abgbc+gabg˙bc)=gbc1gab1g˙abgbc+gbc1g˙bc=gbc1V abbgbc+V bcc

转换成向量的形式,
V a c c = A d ( g b c − 1 ) V a b b + V b c c {V}_{a c}^{c} = \mathbf{Ad}(g_{bc}^{-1}) {V}_{ab}^{b} + {V}_{bc}^{c} Vacc=Ad(gbc1)Vabb+Vbcc

如果 g b c g_{bc} gbc是常量,相当于刚体上两个坐标系B和C之间的外参,此时二者的速度关系为
V a c c = A d ( g b c − 1 ) V a b b {V}_{a c}^{c} = \mathbf{Ad}(g_{bc}^{-1}) {V}_{ab}^{b} Vacc=Ad(gbc1)Vabb


@leatherwang
二零二零年九月二十日

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
讲述机器人运动规划原理的经典书籍。 《规划算法》目录: 第Ⅰ部分 介绍性的资料  第1章 绪论   1.1 从规划(的过程)到规划(的结果)   1.2 实例与应用   1.3 规划的基本组成   1.4 算法、规划器与规划    1.4.1 算法    1.4.2 规划器    1.4.3 规划   1.5 本书的组织安排  第2章 离散规划   2.1 离散可行规划简介    2.1.1 问题表述    2.1.2 离散规划的实例    2.2 可行规划的搜索    2.2.1 一般前向搜索    2.2.2 特殊前向搜索    2.2.3 其他搜索方案    2.2.4 搜索方法的统一描述   2.3 离散最优规划    2.3.1 最优定长规划    2.3.2 不指定长度的最优规划    2.3.3 再论Dijkstra算法   2.4 用逻辑来表示离散规划    2.4.1 类似STRIPS的表示    2.4.2 转换到状态空间表示   2.5 基于逻辑的规划方法    2.5.1 部分规划空间中的搜索    2.5.2 建立规划图    2.5.3 满足性规划   进一步阅读   习题   实现 第Ⅱ部分 运动规划  第3章 几何表示与变换   3.1 几何建模    3.1.1 多边形与多面体模型    3.1.2 半代数模型    3.1.3 其他模型   3.2 刚体变换    3.2.1 一般概念    3.2.2 二维变换    3.2.3 三维变换   3.3 物体运动链的变换    3.3.1 二维运动链    3.3.2 三维运动链   3.4 运动树的变换   3.5 非刚体的变换   进一步阅读   习题   实现  第4章 位形空间   4.1 拓扑的基本概念    4.1.1 拓扑空间    4.1.2 流形    4.1.3 路径与连通   4.2 位形空间    4.2.1 二维刚体:SE(2)    4.2.2 三维刚体:SE(3)    4.2.3 物体的链与树   4.3 位形空间障碍物    4.3.1 基本运动规划问题    4.3.2 显式建模Cobs:加:平移情况    4.3.3 显式建模Cobs:一般情形   4.4 闭运动链    4.4.1 数学概念    4.4.2 R2上的运动链    4.4.3 定义一般连杆组的簇   进一步阅读   习题   实现  第5章 基于采样的运动规划  第6章 组合运动规划  第7章 基本运动规划的扩展  第8章 反馈运动规划 第Ⅲ部分 决策论规划  第9章 基本永生理论  第10章 序贯决策理论  第11章 传感器与信息空间  第12章 存在感测不确定性条件下的规则 第Ⅳ部分 微分约束条件下的规划   第13章 微分模型  第14章 微分约束条件下基于采样的规划  第15章 系统理论与分析技术
以下是一个简单的 MATLAB 有限元刚体运动代码示例: ```matlab % 定义常数 E = 2.0e11; % 弹性模量 rho = 7800; % 密度 A = 0.01; % 横截面积 L = 1; % 杆长 T = 1; % 时间 dt = 0.01; % 时间步长 nsteps = T/dt; % 时间步数 % 定义节点和单元 node = [0 0; L 0]; % 节点坐标矩阵 elem = [1 2]; % 单元矩阵 % 定义质点的初始状态 x0 = [L/2; 0]; % 初始位置 v0 = [0; 0]; % 初始速度 m = rho*A*L; % 质量 % 定义刚体的初始状态 pos0 = [x0; pi/2]; % 初始位置和朝向 vel0 = [v0; 0]; % 初始速度 % 定义力和力矩 F = [0; -9.8*m]; % 重力 M = 0; % 没有外部力矩 % 初始化刚体状态 pos = pos0; vel = vel0; % 循环模拟刚体运动 for i = 1:nsteps % 计算单元应力和应变 [stress, strain] = truss_stress_strain(node, elem, pos, E); % 计算单元力 f = stress*A; % 计算质点加速度 a = (F + sum(f,2))/m; % 更新质点位置和速度 x = pos(1:2) + vel(1:2)*dt + 0.5*a*dt^2; v = vel(1:2) + a*dt; % 计算刚体角加速度 alpha = M/I; % 更新刚体位置和速度 theta = pos(3) + vel(3)*dt + 0.5*alpha*dt^2; omega = vel(3) + alpha*dt; % 更新刚体状态 pos = [x; theta]; vel = [v; omega]; end % 绘制刚体运动轨迹 plot(pos(:,1), pos(:,2), '-o'); xlabel('x'); ylabel('y'); ``` 在这个示例中,我们使用了一个简单的杆件模型来表示刚体,其中质点的运动和杆件的变形通过有限元方法进行计算。我们还考虑了重力对质点的影响,并使用牛顿第二定律和牛顿第三定律计算质点的加速度和单元的力,以及刚体的角加速度和力矩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值