我是靠谱客的博主 俊秀荔枝,最近开发中收集的这篇文章主要介绍yaw公式_坐标系和yaw, pitch, roll等基础概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

坐标系

右手坐标系:把右手拇指食指中指伸直并正交,拇指X,食指Y,中指Z。一般无特殊说明,都是右手坐标系。

右手坐标系的旋转正方向:从轴的正方向看向原点,逆时针方向即是旋转正向。或者,伸出右手,拇指指向旋转轴正向,四指弯曲,四指指向的旋转方向就是正向。

世界坐标系之NED坐标:X轴向北,Y轴向东,Z轴向下

世界坐标系之ENU坐标:X轴向东,Y轴向北,Z轴向上

世界坐标系之NWU坐标:X轴向北,Y轴向西,Z轴向上(这个坐标系最符合人类想象)

自身坐标系之FRD坐标:X轴向前,Y轴向右,Z轴向下。

自身坐标系之FLU坐标:X轴向前,Y轴向左,Z轴向上。(这个坐标系最符合人类想象)

FRD和NED配合:当自身面北平放的时候,FRD坐标系和NED坐标系重合。

FLU和ENU配合:当自身面东平放的时候,FLU坐标系和ENU坐标系重合。

FLU和NWU配合:当自身面北平放的时候,FLU坐标系和NWU坐标系重合。(最佳配合)

建议:当做一个系统的时候,要先统一系统内部的坐标系,优先统一到FLU+NWU。输入的坐标,在输入的时候,就要转为内部坐标系;输出的坐标,在输出的时候,根据用户的要求转为相应的外部坐标系。

yaw, pitch, roll

yaw:偏航角。是沿世界坐标系的Z轴旋转的角度。0表示面向世界坐标系的X轴正向。

在NED坐标下,0度是面向正北。在ENU做坐标下,0度是面向正东。

面向正北,在NED下,是0度,在ENU下,则是PI/2弧度。

面向正北偏东1度(0.01745弧度),在NED坐标系下,yaw=0.01745,在ENU坐标系中,yaw=PI/2-0.01745

所以,可以推算出来,yaw从END坐标系转到ENU坐标系的转换公式为:yaw_ENU = PI/2 - yaw_END

pitch:俯仰角。就是抬头或低头,和大地水平面的夹角。换句话说,是沿自身坐标系(X轴向前的坐标系)的Y轴旋转的角度。

抬头1度,在FRD坐标系下,pitch=0.01745,在FLU坐标系中,pitch=-0.01745。

所以,可以推算出来,pitch从FRD坐标系转到FLU坐标系的转换公式为:pitch_FLU = - pitch_FRD

roll:翻滚角。就是左倾或右倾,和大地水平面的夹角。换句话说,是沿自身坐标系(X轴向前的坐标系)的X轴旋转的角度。

右倾1度,在FRD坐标系下,roll=0.01745,在FLU坐标系中,roll=0.01745。

所以,可以推算出来,roll从FRD坐标系转到FLU坐标系的转换公式为:roll_FLU = - roll_FRD

注意,不同的惯导设备,采用的坐标系是不同的,有的用FRD,有的用FLU。例如ROS就缺省使用FLU,如果需要将某个FRD设备的数据发布到ROS,就需要做一个转换。

欧拉角

用3次连续转角来描述2个坐标系之间的旋转关系。

设xyz 为全局坐标,保持不动

设XYZ 为局部坐标,随着物体一起运动

那么zXZ的欧拉角为:

1) 物体绕全局的 z 轴旋转 alpha 角

2) 继续绕自己的 X 轴旋转 beta 角

3) 最后绕自己的 Z 轴旋转 gamma 角

Z-Y-X欧拉角

参考 Introduction to Robotics Machanics and Control.pdf P43

ZYX欧拉角是yaw-pitch-roll次序。

1) 先沿着Z轴旋转一个yaw角

2) 再沿着自己的Y轴旋转一个pitch角

3) 再沿着自己的X轴旋转一个roll角

设R为3*3的旋转矩阵,则R = R_yaw * R_pitch * R_roll

R_yaw是旋转后z不变的阵,R_pitch是旋转后y不变的阵,R_roll是旋转后x不变的阵。

求一个点在另一个坐标系中的坐标

参考 Introduction to Robotics Machanics and Control.pdf P27 Mappings involving general frames 公式2.19

设有2个坐标系 A 和 B,现在有一个点P,它在B坐标系中的坐标是P_b,那么求它在A坐标系中的坐标P_a。

已知B的原点在A坐标系中的坐标是O_ba,已知B相对于A的旋转矩阵是R_ab。

那么,我们可以先保持B的原点不动,把B旋转为B1,和A同向。此时该点P的坐标在B1里面是P_b1。而P_a = P_b1 + O_ba。

所以有 P_a = R_ab P_b + O_ba(2.17)

以上的公式,可以写成更酷的一个公式:

[P_a, 1]T = T_ab [P_b, 1] (2.19)

其中,T_ab为1个4*4的矩阵,左上角是R_ab,右上角是O_ba,左下角是 0 0 0,右下角是1。

四元数用于旋转

四元数有x,y,z,w这4个分量。错误的理解是:x,y,z表示旋转轴,w表示旋转角度。但实际上,如果ax,ay,az是旋转轴向量,theta是旋转角度的话,四元数实际是:

w = cos(theta/2)

x = ax * sin(theta/2)

y = ay * sin(theta/2)

z = az * sin(theta/2)

这样定义很不直观,但好处是可以可以插值。

给定两个四元数p和q,分别代表旋转P和Q,则乘积pq表示两个旋转的合成(即旋转了Q之后再旋转P)

举个例子,我们要把一个enu的航向角yaw,转成nwu的yaw,就可以直接用一个表示旋转的四元数乘它既可:

tf::Quanterion enu2nwu;

enu2nwu.setRPY(0, 0, -M_PI_2); // 以目标坐标nwu为基准,看源坐标enu在目标坐标中,是沿z轴正方向旋转了-PI/2。

yaw_nwu = enu2nwu * yaw_enu; // yaw本身表示一个旋转,左边乘以enu2nwu,表示先旋转坐标系得到新的坐标系,然后再旋转本身。

最后

以上就是俊秀荔枝为你收集整理的yaw公式_坐标系和yaw, pitch, roll等基础概念的全部内容,希望文章能够帮你解决yaw公式_坐标系和yaw, pitch, roll等基础概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部