无人机坐标系和角度基本概念

1 无人机坐标系和角度基本概念

1.1 基本概念

大地坐标系
大地坐标系将地球表面假设成一张平面,通常以多旋翼起飞位置或地心作为坐标原点 (O_e)。在该坐标系中,(x_e) 轴在水平面内指向某一方向,(z_e) 轴垂直于地面向下;然后,按照右手定则确定 (y_e) 轴。

机体坐标系
机体坐标系的原点 (O_b) 设在多旋翼的重心位置上,(x_b) 轴在多旋翼对称平面内指向机头(机头方向与多旋翼的字形或X字形相关),(z_b) 轴在飞机对称平面内,垂直向下;同样地,按照右手定则确定 (y_b) 轴。

  • 下标 (e) 表示地理坐标系(Earth)。
  • 下标 (b) 表示机体坐标系(Body)。

姿态角

机体坐标系与地理坐标系之间的夹角即为无人机的姿态角,又称欧拉角,可用横滚角(roll)、俯仰角(pitch)和偏航角(yaw)三个角表示。

姿态角定义
  • 横滚角 (ϕ):飞机对称平面与通过飞机机体纵轴的铅垂平面间的夹角,右滚为正。

  • 俯仰角 (θ):机体轴与地平面(水平面)之间的夹角,飞机抬头为正。

  • 偏航角 (ψ):机体轴在水平面上的投影与地轴之间的夹角,以机头右偏为正。

### 无人机坐标系变换的实现方法 #### 1. 基本概念 无人机坐标系变换的核心在于理解不同坐标系之间的关系以及如何通过数学工具完成这些转换。常见的坐标系包括机体坐标系(Body Frame)、导航坐标系(NED, North-East-Down),以及其他可能的世界坐标系。 欧拉角被广泛用于描述无人机的姿态变化,具体涉及三个角度:滚转角(Roll)、俯仰角(Pitch)偏航角(Yaw)。这三个角度定义了从一个坐标系到另一个坐标系的旋转顺序[^1]。 #### 2. 数学基础 为了实现坐标系间的变换,通常会用到旋转矩阵或四元数这两种表示方式: ##### (a) 使用旋转矩阵 假设有一个向量 \( \mathbf{v} \),其在原始坐标系中的表达形式为 \( \mathbf{v}_b \),而在目标坐标系中的表达形式为 \( \mathbf{v}_n \)。两者的关系可以通过旋转矩阵 \( R_{nb} \) 表达如下: \[ \mathbf{v}_n = R_{nb} \cdot \mathbf{v}_b \] 其中,\( R_{nb} \) 是由欧拉角计算得出的一个正交矩阵。对于标准的 ZYX 欧拉角序列(即先绕 Z 轴旋转 yaw 角度,再绕 Y 轴旋转 pitch 角度,最后绕 X 轴旋转 roll 角度),对应的旋转矩阵可以写成: \[ R_{nb} = \begin{bmatrix} c_\psi c_\theta & s_\phi s_\psi c_\theta - c_\phi s_\theta & c_\phi s_\psi c_\theta + s_\phi s_\theta \\ c_\psi s_\theta & s_\phi s_\psi s_\theta + c_\phi c_\theta & c_\phi s_\psi s_\theta - s_\phi c_\theta \\ -s_\psi & s_\phi c_\psi & c_\phi c_\psi \end{bmatrix} \] 此处,\( c_x = \cos(x), s_x = \sin(x) \)。 ##### (b) 使用四元数 相比于旋转矩阵,四元数能够更高效地处理连续旋转操作并避免奇异点问题。设四元数 \( q = [w, x, y, z]^T \),则任意矢量 \( v_b \) 的旋转可通过以下公式完成: \[ v_n = Q(q) \otimes v_b \otimes Q(-q) \] 其中,\( Q(q) \) \( Q(-q) \) 分别代表单位化后的四元数及其共轭[^3]。 #### 3. 实际应用案例 当需要将雷达获取的数据从局部坐标系映射至全球坐标系时,需考虑外部环境因素的影响。例如,在自动驾驶领域中提到的一种常见做法是利用 GPS 提供的位置信息作为参考基准,并结合 IMU 数据估算当前时刻车辆/无人机相对于地面的真实方位[^2]。 以下是基于 Python 编写的简单示例程序展示如何使用 NumPy 库构建上述过程所需的函数功能模块之一部分代码片段: ```python import numpy as np def euler_to_rotation_matrix(roll, pitch, yaw): """ Convert Euler angles to a rotation matrix. Parameters: roll : float Roll angle in radians. pitch : float Pitch angle in radians. yaw : float Yaw angle in radians. Returns: ndarray A 3x3 rotation matrix corresponding to the given Euler angles. """ cr = np.cos(roll); sr = np.sin(roll) cp = np.cos(pitch); sp = np.sin(pitch) cy = np.cos(yaw); sy = np.sin(yaw) R_z = np.array([[cy,-sy,0], [sy,cy,0], [0 , 0,1]]) R_y = np.array([[cp ,0,sp], [0 ,1,0 ], [-sp,0,cp]]) R_x = np.array([[1 ,0 ,0], [0 ,cr,-sr], [0 ,sr,cr]]) return R_z @ R_y @ R_x if __name__ == "__main__": # Example usage of function with sample values for roll, pitch and yaw roll_angle = np.radians(10) pitch_angle= np.radians(20) yaw_angle = np.radians(30) rot_mat = euler_to_rotation_matrix(roll_angle,pitch_angle,yaw_angle) print(rot_mat) ``` 此脚本实现了从给定的欧拉角生成相应的旋转矩阵的功能。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值