利用python通过双矢量计算两坐标系相对姿态

calOrientationFrom2Vectors

功能

根据两个不共线的矢量分别在两个坐标系下的矢量坐标求解这两个坐标系之间的旋转矩阵。

原理

若已知两个不共线的矢量分别在两个坐标系下的方向矢量,即可以方向矢量构建参考坐标系从而求得两个坐标系之间的旋转矩阵。

如图所示,两个坐标系分别为坐标系C、坐标系S,两个矢量分别为V1、V2,参考坐标系(坐标系n)根据矢量V1、V2建立。

在这里插入图片描述

参考坐标系在坐标系C下的正交坐标基为
{ a =   V 1 c b =   ( V 1 c × V 2 c ) ∣ V 1 c × V 2 c ∣ c =   a × b \left\{ \begin{aligned} a & = \ V_1^c \\ b & = \ \frac{(V_1^c \times V_2^c)}{|V_1^c \times V_2^c|} \\ c & = \ a \times b \end{aligned} \right. abc= V1c= V1c×V2c(V1c×V2c)= a×b
坐标系C到参考坐标系的姿态转换矩阵为
R c n = [ a T b T c T ] R_c^n = \begin{bmatrix} a^T\\ b^T\\c^T\end{bmatrix} Rcn=aTbTcT
同理,参考坐标系在坐标系S下的正交坐标基为
{ A =   V 1 s B =   ( V 1 s × V 2 s ) ∣ V 1 s × V 2 s ∣ C =   A × B \left\{ \begin{aligned} A & = \ V_1^s \\ B & = \ \frac{(V_1^s \times V_2^s)}{|V_1^s \times V_2^s|} \\ C & = \ A \times B \end{aligned} \right. ABC= V1s= V1s×V2s(V1s×V2s)= A×B
坐标系S到参考坐标系的姿态转换矩阵为
R s n = [ A T B T C T ] R_s^n = \begin{bmatrix} A^T\\ B^T\\C^T\end{bmatrix} Rsn=ATBTCT
坐标系S到坐标系C的旋转矩阵
R s c = ( R c n ) − 1 ⋅ R s n R_s^c=(R_c^n)^{-1} \cdot R_s^n Rsc=(Rcn)1Rsn

使用

输入

两个矢量在坐标系s下的坐标: V s 1 ( x s 1 , y s 1 , z s 1 ) Vs1(xs1,ys1,zs1) Vs1(xs1,ys1,zs1) V s 2 ( x s 2 , y s 2 , z s 2 ) Vs2(xs2,ys2,zs2) Vs2(xs2,ys2,zs2)

在坐标系n下的坐标: V n 1 ( x n 1 , y n 1 , z n 1 ) Vn1(xn1,yn1,zn1) Vn1(xn1,yn1,zn1) V n 2 ( x n 2 , y n 2 , z n 2 ) Vn2(xn2,yn2,zn2) Vn2(xn2,yn2,zn2)

输出

坐标系n到坐标系s的旋转矩阵 R n s R_n^s Rns

DEMO

import algorithm as al
import numpy as np

meas = al.Test()
Vs1 = np.array([0.55397988, 0.82791962, -0.08749517])
Vs2 = np.array([0.02063334, -0.26258813, -0.96468738])
Vn1 = np.array([0.97066373, 0.20744552, 0.12156592])
Vn2 = np.array([0, 0, -1])

print(meas.calOrientationFrom2Vectors(Vs1, Vs2, Vn1, Vn2))

代码链接

https://gitee.com/huangzhexiaohao/geo-meas/blob/master/src/geomeas.py

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hunter206206

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值