首页 > 其他分享 >只有经纬高坐标系下的飞行数据,怎么转换得到姿态角?

只有经纬高坐标系下的飞行数据,怎么转换得到姿态角?

时间:2024-09-05 12:54:32浏览次数:6  
标签:phi 经纬 LLA NED psi theta lla 飞行数据 坐标系

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Converts LLA (Latitude, Longitude, Altitude) data to an extended state
% vector including attitude (psi, theta, phi).
%
% Conversion Process:
%   1. Convert LLA to ECEF (Earth-Centered, Earth-Fixed) coordinates.
%   2. Convert ECEF to NED (North, East, Down) coordinates.
%   3. Differentiate NED coordinates to obtain NED velocities (NEDV).
%   4. Compute the attitude angles (psi, theta, phi) based on NED velocities:
%      - theta (pitch):      theta = degrees(asin(-vd/v))
%      - psi (yaw):          psi   = degrees(asin(-ve/sqrt(vn^2+ve^2)))
%      - phi (roll):         phi   = assumed zero in this implementation
%   5. Return [lat, lon, alt, psi, theta, phi].
%
% Usage:
%   llappp = lla2ppp(lla);
%   llappp = lla2ppp(lla, 'h', 0.2);
%
% Inputs:
%   - lla:   Nx3 matrix of Latitude, Longitude, and Altitude data [deg, deg, m].
%   - 'h':   Time interval for differentiation, default is 0.1 seconds.
%
% Outputs:
%   - llappp: Nx6 matrix of [lat, lon, alt, psi, theta, phi].
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function llappp = lla2ppp(lla, varargin)

    % Input Parsing
    ip = inputParser;
    ip.addRequired('lla', @(x) isnumeric(x) && size(x, 2) == 3);  % Ensure LLA is Nx3
    ip.addParameter('h', 0.1, @(x) isnumeric(x) && x > 0);        % Default time step 0.1s
    ip.parse(lla, varargin{:});
    h = ip.Results.h;

    % Convert LLA to NED coordinates relative to the first point as origin
    [nedx, nedy, nedz] = geodetic2ned(lla(:,1), lla(:,2), lla(:,3), ...
                                      lla(1,1), lla(1,2), lla(1,3), ...
                                      wgs84Ellipsoid);
    ned = [nedx, nedy, nedz];
    
    % Calculate NED velocities using numerical differentiation
    vn = gradient(nedx, h); % North velocity
    ve = gradient(nedy, h); % East velocity
    vd = gradient(nedz, h); % Down velocity

    % Calculate the total velocity magnitude
    v = sqrt(vn.^2 + ve.^2 + vd.^2);

    % Attitude Calculations
    % Avoid division by zero for velocity calculations
    theta = asind(-vd ./ max(v, eps));  % Pitch angle calculation
    psi = asind(ve ./ max(sqrt(vn.^2 + ve.^2), eps));  % Yaw angle calculation
    phi = zeros(size(theta));  % Roll angle set to zero, can be modified as needed

    % Combine LLA and attitude into the final output
    llappp = [lla, psi, theta, phi];
end

这段MATLAB程序lla2ppp的主要功能是将飞行器的LLA(Latitude, Longitude, Altitude,即纬度、经度、高度)数据转换为包含姿态信息的扩展状态向量,包括偏航角(psi)、俯仰角(theta)和滚转角(phi)。转换过程包括以下几个步骤:

  1. LLA到NED转换:首先,将给定的LLA数据转换为NED(North, East, Down,即北、东、下)坐标系,该坐标系以地面为参考,通常以初始位置作为原点。这里使用MATLAB中的geodetic2ned函数进行转换,依赖于WGS84椭球体模型。

  2. 计算NED速度:通过对NED坐标进行数值微分,获取对应的NED速度分量(vn, ve, vd),分别表示北向、东向和下向的速度。

  3. 姿态角计算:使用NED速度计算姿态角。俯仰角(theta)是由下向速度与总速度之比计算得到的;偏航角(psi)由东向速度和水平速度(北向与东向速度的合成)之比计算。滚转角(phi)在该实现中被设为零。

  4. 输出结果:最终将计算得到的姿态角与原始的LLA数据组合,生成一个包含位置和姿态的扩展状态矩阵,格式为 [lat, lon, alt, psi, theta, phi]。

程序还包含了一些输入参数的校验和错误处理,如防止除零错误(通过使用max(value, eps))确保计算稳定。用户可以自定义微分时间步长h,默认为0.1秒。该程序适用于需要从位置数据推导出飞行器姿态的应用,如飞行仿真、导航算法验证等。

标签:phi,经纬,LLA,NED,psi,theta,lla,飞行数据,坐标系
From: https://blog.csdn.net/weixin_47115999/article/details/141927936

相关文章

  • 经纬度格式转换-(互转 度转度分秒 度分秒转度……)
    经纬度格式分为三种:度:             (ddd.ddddd°)                十进制小数部分(5位)               百度地图,谷歌地图,手机自带gps经纬度输出度.分:      (ddd°mm.mmm’)            十进制小数部分(3位)  ......
  • ABB工具坐标系报错质心重量不适配问题
    机器人在运行时为了避免机器人(如传动装置和轴承)出现过载。必须输入正确的负载数据(质量、重心位置、惯性矩),也就是进行负载测试。对于ABB机器人来说,负载测试的方法如下:1、在【主菜单】下,打开【程序编辑器】;   2、选择一个程序,如main程序。点击【调试】;  3、点击......
  • 根据地址获取经纬度
      1:安装依赖与引入调用腾讯地图api前需要先去注册并申请key在vue项目中的/public文件夹中的index.html的head中写入安装lodash:npminstall--savelodash安装jsonp:npminstallvue-jsonp--savemain.js引入jsonpimportVuefrom'vue'import{VueJsonp}from'vue-js......
  • 在对数坐标系中绘制函数图象
    本文记述了用Matplotlib在对数坐标系中绘制图象的一种方法,并在以2为底的对数坐标系上展示了选择排序、冒泡排序(二)、快速排序(四)的性能数据图象。笔者按如下布局绘制了12(4x3)幅图象,其中[a,b]代表某幅图象的位置。+---------------+---------------+---------------+|......
  • Java根据经纬度计算两个坐标之间的距离(含SQL计算)
    最近接到两个需求,一个是通过小程序扫码开门的,我这边主要就是根据用户定位判断用户离扫码店铺距离小于多少米的时候才可以调远程调开门接口,另外一个就是获取用户周围有哪些店铺。需求很简单,就是根据定位获取的经度维度计算两个点之间的球面距离,这里我们主要采用Haversine公......
  • 地理信息科学教育的新趋势:探索未来教育的经纬度
    在这个数字化转型的时代,地理信息科学(GIS)作为一门交叉学科,正以前所未有的速度推动着科研创新和社会发展。GIS教育不仅是培养专业人才的关键,更是塑造未来社会智慧化进程的重要基石。本文旨在剖析GIS教育的最新发展趋势与面临的挑战,为教育者、学习者及行业观察者提供洞见。......
  • 283:vue+openlayers 4326和3857坐标系下的分辨率区别
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第283个示例文章目录一......
  • 如何快速将经纬度坐标解析为地址文本?
    GIS数据转换器的"坐标转地址"功能,可以帮助用户将经纬度坐标快速转换为对应的地址文本,广泛用于地图导航、地籍管理、物流追踪、紧急救援等多个领域,提高地理位置信息的实用性和可访问性。下面是详细的使用步骤:方法/步骤1.数据要求(1)数据格式:软件支持DWG、DX......
  • DJI无人机影像地理坐标系校正
    介绍代码简介代码的主要功能是将无人机拍摄的图像中的每个像素位置转换为地理坐标(经纬度),并计算图像的实际物理尺寸。具体包括以下几个步骤:坐标转换:从图像的像素坐标开始,转换为归一化的图像平面坐标。将这些坐标转换为相机坐标系中的坐标,考虑到焦距的影响。坐标系转换......
  • VTK随笔三:坐标系统、空间变换、VTK管线、VTK智能指针
    一、坐标系统 Model坐标系统:定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。World坐标系统:是放置Actor的三维空间坐标系,Actor(vtkActor类)其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模型可以定义自己的Model坐标系统,但World坐标系只有......