什么是姿态角(Euler角)pitch yaw roll

本文详细介绍了飞行器姿态控制的基本概念,包括地面坐标系和机体坐标系的定义,以及欧拉角(俯仰角、偏航角和滚转角)的具体含义。通过对这些基本概念的理解,读者可以更好地掌握飞行器姿态调整的技术细节。

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

Z轴正方向为前进方向pitch():俯仰,将物体绕X轴旋转(localRotationX)
百度上居然搜不到俯仰滚转和偏航的定义,可见大家的浮躁了,没事摇一摇都不干正事了,整理了一下资料,公布给大家。
要了解飞机姿态,需要首先知道什么是地面坐标系和机体坐标系。
■地面坐标系(earth-surface inertial reference frameSg--------Oxgygzg


①在地面上选一点Og
②使xg轴在水平面内并指向某一方向
zg轴垂直于地面并指向地心
yg轴在水平面内垂直于xg轴,其指向按右手定则确定

■机体坐标系(Aircraft-body coordinate frame)Sb-------oxyz



①原点O取在飞机质心处,坐标系与飞机固连
x轴在飞机对称平面内并平行于飞机的设计轴线指向机头
y轴垂直于飞机对称平面指向机身右方
z轴在飞机对称平面内,与x轴垂直并指向机身下方
■欧拉角/姿态角(Euler Angle
 
机体坐标系与地面坐标系的关系是三个Euler角,反应了飞机相对地面的姿态。
俯仰角θ(pitch)机体坐标系X轴与水平面的夹角。当X轴的正半轴位于过坐标原点的水平面之上(抬头)时,俯仰角为正,否则为负。
\
偏航角ψ(yaw)
机体坐标系xb轴在水平面上投影与地面坐标系xg轴(在水平面上,指向目标为正)之间的夹角,由xg轴逆时针转至机体xb的投影线时,偏航角为正,即机头右偏航为正,反之为负。
\
滚转角Φ(roll):
机体坐标系zb轴与通过机体xb轴的铅垂面间的夹角,机体向右滚为正,反之为负。
\
void Get_Angles_ICM(void) { // 存储四元数的四个分量 float q0,q1,q2,q3; // 获取ICM42688陀螺仪加速度计数据 Get_Acc_ICM42688(); // 获取ICM42688陀螺仪陀螺仪数据 Get_Gyro_ICM42688(); // 陀螺仪数据滤波和转化为实际物理值 Get_Values_ICM(); // 使用陀螺仪和加速度计的数据更新AHRS(姿态和航向参考系统)算法得到当前的四元数 Update_AHRS_ICM(icm_data.gyro_x, icm_data.gyro_y, icm_data.gyro_z, icm_data.acc_x, icm_data.acc_y, icm_data.acc_z); // 从更新后的姿态信息中获取四元数的四个分量 q0 = q_info.q0; q1 = q_info.q1; q2 = q_info.q2; q3 = q_info.q3; // 四元数计算欧拉 euler_angle.pitch = asin(-2 * q1 * q3 + 2 * q0 * q2) * 180 / M_PI - 180;//俯仰角,对应y轴 euler_angle.roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2 * q2 + 1) * 180 / M_PI;//横滚,对应x轴 euler_angle.yaw = atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2 * q2 - 2 * q3 * q3 + 1) * 180 / M_PI;//偏航,对应z轴 // 姿态限制 if (euler_angle.pitch > 0) { euler_angle.pitch = 180 - euler_angle.pitch; } else if (euler_angle.pitch < 0) { euler_angle.pitch = -(180 + euler_angle.pitch); } if (euler_angle.roll > 0) { euler_angle.roll = 180 - euler_angle.roll; } else if (euler_angle.roll < 0) { euler_angle.roll = -(180 + euler_angle.roll); } if (euler_angle.yaw > 360) { euler_angle.yaw -= 360; } else if (euler_angle.yaw < 0) { euler_angle.yaw += 360; } }用这个代码算出来的pitch,显示的数据变化非常慢
03-28
当然可以!你可以使用Python中的OpenCV库来计算图像的偏航俯仰角和翻滚。以下是一个示例代码: ```python import cv2 import numpy as np def calculate_yaw_pitch_roll(image_path): # 加载图像 image = cv2.imread(image_path) # 定义相机内参 focal_length = image.shape[1] center = (image.shape[1] / 2, image.shape[0] / 2) camera_matrix = np.array([[focal_length, 0, center[0]], [0, focal_length, center[1]], [0, 0, 1]], dtype=np.float64) # 定义畸变系数 dist_coeffs = np.zeros((4, 1)) # 检测点 # 注意:这里假设你的图像中包含了一个棋盘格,你可以根据你的实际情况进行更改 pattern_size = (9, 6) ret, corners = cv2.findChessboardCorners(image, pattern_size, None) # 解析点 if ret is True: # 解析点位置 corners2 = cv2.cornerSubPix(image, corners, (11, 11), (-1, -1), criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) # 解析点姿态 _, rvecs, tvecs, inliers = cv2.solvePnPRansac(world_points, corners2, camera_matrix, dist_coeffs) # 计算旋转矩阵 rotation_matrix, _ = cv2.Rodrigues(rvecs) # 计算欧拉 projection_matrix = np.hstack((rotation_matrix, tvecs)) euler_angles, _ = cv2.decomposeProjectionMatrix(projection_matrix) yaw, pitch, roll = euler_angles[1], euler_angles[0], euler_angles[2] return yaw, pitch, roll else: print("无法检测到棋盘格点") return None # 调用函数并打印结果 image_path = "path_to_your_image.jpg" yaw, pitch, roll = calculate_yaw_pitch_roll(image_path) print("偏航 (Yaw):", yaw) print("俯仰角 (Pitch):", pitch) print("翻滚 (Roll):", roll) ``` 请确保在运行代码之前安装了OpenCV库,并将`image_path`替换为你的图像路径。此代码假设输入图像中包含一个9x6的棋盘格,你可以根据你的实际情况进行更改。 希望这可以帮助到你!如果你有任何其他问题,请随时问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值