载体坐标系详解

一、载体坐标系简称

载体坐标系是指基于机体坐标(或称为平台坐标)确定的以机体中心为坐标原点的惯性坐标系,简称为PC系。

/**
 * 载体坐标系简称PC系
 * 以机体中心为坐标原点的惯性坐标系
 * @param {array} pc 坐标原点的坐标值[x,y,z]
 */
function PC(pc) {
  this.pc = pc;
  // 其他方法和属性
}

二、载体坐标系到东北天坐标

载体坐标系到东北天坐标的转化需引入大地坐标系下的经纬度作为参数,对载体坐标系下的各个方向向量进行坐标变换得到东北天坐标系下的对应方向向量。

/**
 * 载体坐标系到东北天坐标
 * @param {array} pc 坐标原点的坐标值[x,y,z]
 * @param {number} latitude 纬度值
 * @param {number} longitude 经度值
 * @param {number} altitude 高度值
 */
function PC2NED(pc, latitude, longitude, altitude) {
  const N = [-Math.sin(latitude)*Math.cos(longitude), -Math.sin(latitude)*Math.sin(longitude), Math.cos(latitude)];
  const E = [-Math.sin(longitude), Math.cos(longitude), 0];
  const D = [-Math.cos(latitude)*Math.cos(longitude), -Math.cos(latitude)*Math.sin(longitude), -Math.sin(latitude)];
  // 将PC系下的各个方向向量进行坐标变换得到NED系下的对应方向向量
  const n = [N[0]*pc[0] + N[1]*pc[1] + N[2]*pc[2], E[0]*pc[0] + E[1]*pc[1] + E[2]*pc[2], D[0]*pc[0] + D[1]*pc[1] + D[2]*pc[2]];
  return n;
}

三、载体坐标系英语

载体坐标系的英文名称是 Platform Coordinate System,简称PC coordinate system。

const PC_COORDINATE_SYSTEM = "Platform Coordinate System";

四、载体坐标系定义

载体坐标系是一种惯性坐标系,以飞行器自身的参考系为基础,不随外部环境的变化而发生改变。

const PC_DEFINITION = "Platform Coordinate System is an inertial coordinate system based on the reference frame of the aircraft itself, and it does not change with the change of the external environment.";

五、载体坐标系方向定义

载体坐标系的x轴正方向指向飞行方向,y轴正方向指向右侧,z轴正方向指向下方。

const PC_DIRECTION_DEFINITION = "The positive direction of x-axis in the platform coordinate system points to the flight direction, the positive direction of y-axis points to the right side, and the positive direction of z-axis points to the downward direction.";

六、载体坐标系和导航坐标系

载体坐标系和导航坐标系之间需要进行坐标变换。在导航坐标系下,机头指向正北,机侧指向东,垂线于地面的方向指向上。而在载体坐标系下,这些方向的定义是不固定的,需要根据载体的运动状态进行确定。

/**
 * 坐标系变换:载体坐标系到导航坐标系
 * @param {array} pc 坐标原点的坐标值[x,y,z]
 * @param {number} roll 横滚角
 * @param {number} pitch 俯仰角
 * @param {number} yaw 航向角
 */
function PC2Nav(pc, roll, pitch, yaw) {
  // 坐标变换公式
  // 根据载体的运动状态确定各个方向的定义
  const N = [-Math.cos(pitch)*Math.sin(yaw), Math.cos(pitch)*Math.cos(yaw), -Math.sin(pitch)];
  const E = [-Math.cos(roll)*Math.cos(yaw) + Math.sin(pitch)*Math.sin(roll)*Math.sin(yaw), Math.cos(roll)*Math.sin(yaw) + Math.sin(pitch)*Math.sin(roll)*Math.cos(yaw), Math.cos(pitch)*Math.sin(roll)];
  const D = [Math.sin(roll)*Math.cos(yaw) + Math.sin(pitch)*Math.cos(roll)*Math.sin(yaw), -Math.sin(roll)*Math.sin(yaw) + Math.sin(pitch)*Math.cos(roll)*Math.cos(yaw), Math.cos(pitch)*Math.cos(roll)];
  // 将PC系下的各个方向向量进行坐标变换得到导航坐标系下的对应方向向量
  const n = [N[0]*pc[0] + N[1]*pc[1] + N[2]*pc[2], E[0]*pc[0] + E[1]*pc[1] + E[2]*pc[2], D[0]*pc[0] + D[1]*pc[1] + D[2]*pc[2]];
  return n;
}

七、载体坐标系俯仰角计算

载体坐标系的俯仰角是指其y-z投影量的夹角,用于描述载体相对于水平面的倾斜程度。

/**
 * 计算载体坐标系下的俯仰角
 * @param {array} n10 垂线于地面的方向向量
 */
function calcPitch(n10) {
  const { x, y, z } = { x: n10[0], y: n10[1], z: n10[2] };
  let pitch = Math.atan2(-x, Math.sqrt(y*y + z*z));
  return pitch;
}

八、载体坐标系到地理坐标系转换

载体坐标系到地理坐标系的转换需要引入大地坐标系下的经纬度作为参数,通过将载体坐标系下的各点坐标进行坐标变换得到地理坐标系下的对应点坐标。

/**
 * 坐标系变换:载体坐标系到地理坐标系
 * @param {array} pc 坐标原点的坐标值[x,y,z]
 * @param {number} latitude 纬度值
 * @param {number} longitude 经度值
 * @param {number} altitude 高度值
 * @param {number} roll 横滚角
 * @param {number} pitch 俯仰角
 * @param {number} yaw 航向角
 */
function PC2Geo(pc, latitude, longitude, altitude, roll, pitch, yaw) {
  // 将载体坐标系下各点坐标进行坐标变换得到地理坐标系下的对应点坐标
  const n = PC2Nav(pc, roll, pitch, yaw);
  const n10 = [n[0], n[1], 0];
  const pitch_n10 = calcPitch(n10);
  const C_en = CalcC_en(latitude, longitude);
  const en = MatrixMultiply(C_en, n);
  const pitch_en = calcPitch(en);
  const geodetic = CalcGeodetic(latitude, longitude, altitude, en);
  return geodetic;
}

九、导航坐标系

导航坐标系是一种惯性坐标系,以地球为基础,以某一导航引导信号的参考方向和涵盖区域为基础建立。

/**
 * 导航坐标系简介
 */
const NAV_COORDINATE_SYSTEM = "Navigation Coordinate System is an inertial coordinate system, which is established based on the direction and coverage area of a navigation guidance signal with the Earth as the basis.";

十、平台坐标系选取

平台坐标系的选取需要考虑飞行器的运动特点并确定坐标系的原点以及各方向的定义。

/**
 * 平台坐标系选取和定义
 * @param {array} pc 坐标原点的坐标值[x,y,z]
 * @param {number} roll 横滚角
 * @param {number} pitch 俯仰角
 * @param {number} yaw 航向角
 */
function selectPlatformCoordinateSystem(pc, roll, pitch, yaw) {
  // 根据飞行器的运动特点确定坐标系的原点以及各方向的定义
  const N = [1, 0, 0];
  const E = [0, 1, 0];
  const D = [0, 0, 1];
  // 将PC系下的各个方向向量进行坐标变换得到导航坐标系下的对应方向向量
  const n = [N[0]*pc[0] + N[1]*pc[1] + N[2]*pc[2], E[0]*pc[0] + E[1]*pc[1] + E[2]*pc[2], D[0]*pc[0] + D[1]*pc[1] + D[2]*pc[2]];
  const nav = PC2Nav(pc, roll, pitch, yaw);
  // 比较n和nav向量的夹角大小,选择夹角小的作为平台坐标系的x轴正方向
  const dotRes = DotProduct(n, nav);
  if (dotRes > 0) {
    return new PlatformCoordinateSystem(pc, N, E, D);
  } else {
    return new PlatformCoordinateSystem(pc, nav, CrossProduct(nav, N), CrossProduct(nav, CrossProduct(nav, N)));
  }
}

十一、总结

通过对载体坐标系的详细阐述,我们了解了其定义和英文名称,以及和其他坐标系的转换方法,以及俯仰角计算和平台坐标系的选取等方面内容,这些都在航天航空的领域有着广泛的应用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:12
下一篇 2024-12-12 12:12

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25

发表回复

登录后才能评论