Interpretación del programa KF-GINS de la biblioteca de navegación integrada de código abierto de la Universidad de Wuhan (por GPT3.5)

Informe de análisis KF-GINS (Por GPT3.5)

Código fuente de KF-GINS:
https://github.com/i2Nav-WHU/KF-GINS

A continuación, analice el siguiente proyecto archivo por archivo

[0/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\common\angle.h

Este archivo es un archivo de encabezado de C++ que define constantes y funciones para la conversión de ángulos.

El archivo primero define dos constantes: D2R representa la relación entre el ángulo y los radianes (es decir, π/180) y R2D representa la relación entre los radianes y el ángulo (es decir, 180/π).

A continuación, se define una clase denominada Angle, que define cuatro funciones estáticas: rad2deg y deg2rad realizan la conversión entre radianes y ángulos, y rad2deg y deg2rad también tienen dos funciones cuyos parámetros formales son matrices propias, que pueden convertir cada elemento de la matriz correspondiente en radianes-ángulos o ángulos-radianes.

Finalmente, el archivo está protegido con encabezados para evitar múltiples inclusiones.

[1/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\common\earth.h

Este archivo de programa define una Earthclase llamada , que contiene algunas funciones y constantes relacionadas con la Tierra.

Entre ellas, las funciones miembro son:

  • gravity: Calcular la aceleración normal debida a la gravedad en un lugar determinado.
  • meridianPrimeVerticalRadius: Calcule el radio del círculo meridiano y el radio del círculo de Maoyou.
  • RN: Calcular el radio del círculo unitario.
  • cne: Calcule la matriz de transformación del sistema de coordenadas de navegación al sistema de coordenadas fijo en tierra centrado en la tierra.
  • qne: Calcule el cuaternión de conversión del sistema de coordenadas de navegación al sistema de coordenadas fijo en tierra centrado en la Tierra.
  • blh: Convierta el cuaternión del sistema de coordenadas de navegación al sistema de coordenadas fijo en la Tierra centrado en la Tierra para obtener la latitud y la longitud.
  • blh2ecef: Coordenadas geodésicas (latitud, longitud y elevación) a coordenadas terrestres centradas en la tierra.
  • ecef2blh: Coordenadas fijas en la Tierra centradas en la Tierra a coordenadas terrestres.
  • DRi: La posición relativa del sistema n se convierte en la posición relativa de las coordenadas terrestres.
  • DR: La posición relativa de las coordenadas terrestres se convierte en la posición relativa del sistema n.
  • local2global: Convierta las coordenadas locales (expandidas en el origen) en coordenadas terrestres.
  • global2local: Coordenadas terrestres a coordenadas locales (expandir en el origen).
  • local2global: Convierta las coordenadas locales (expandidas en el origen) en coordenadas terrestres y matriz de rotación.
  • global2local: Coordenadas terrestres y matriz de rotación a coordenadas locales (expandir en el origen).
  • iewe: La velocidad angular de rotación de la tierra se proyecta al sistema e.
  • iewn: La velocidad angular de rotación de la tierra se proyecta al sistema n.
  • iewn: La velocidad angular de rotación del sistema n relativa al sistema e se proyecta al sistema n.

Las constantes definidas en esta clase son:

  • WGS84_WIE: Velocidad angular de rotación de la Tierra.
  • WGS84_F: Planitud.
  • WGS84_RA: semieje mayor a.
  • WGS84_RB: semieje menor b.
  • WGS84_GM0: constante gravitacional de la Tierra.
  • WGS84_E1: Primera excentricidad al cuadrado.
  • WGS84_E2: segunda excentricidad al cuadrado.

[2/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\common\logging.h

El archivo del programa es un archivo de encabezado llamado "logging.h", que proporciona una clase de registro cuyas funciones principales son:

  • Inicialice el sistema de registro de glog;
  • Se definen algunas macros, como LOGI, LOGW, LOGE, LOGF y DLOGI, etc., para generar registros;
  • Se definen algunas funciones de salida de impresión y formato, como printMatrix() y doubleData(), que se utilizan para convertir datos de matriz y punto flotante en formato de cadena;

En concreto, el archivo del programa contiene las siguientes secciones:

  • Declaraciones de archivos de cabecera y espacios de nombres;
  • Definición de macro de salida de registro;
  • Definición de la clase Logging;
  • Definición de función miembro de la clase Logging;

En resumen, las funciones principales de este archivo de programa son: proporciona funciones como salida de registro, impresión de matriz y salida en formato de datos de punto flotante.Es una biblioteca de herramientas de salida de registro general y conveniente.

[3/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\common\rotation.h

Este archivo de programa es un archivo de encabezado de C++ llamado "rotation.h". Este archivo define una clase llamada "Rotación", que contiene múltiples métodos estáticos para la conversión entre matriz y cuaternión, conversión entre ángulo de Euler y matriz, operación de producto cruzado de vector, etc. El método específico es el siguiente:

  • matrix2quaternion(): convierte la matriz de rotación en un cuaternión;
  • quaternion2matrix(): Convierte el cuaternión en matriz de rotación;
  • matrix2euler(): Convierte la matriz de rotación a ángulos de Euler (orden ZYX, IMU frontal inferior derecha);
  • quaternion2euler(): Convierte el cuaternión en ángulo de Euler (orden ZYX, IMU en la parte delantera inferior derecha);
  • rotvec2quaternion(): convierte el vector de rotación en un cuaternión;
  • quaternion2vector(): Convierte el cuaternión en un vector de rotación;
  • euler2matrix(): Convierte los ángulos de Euler en matriz de rotación (orden ZYX);
  • euler2quaternion(): Convierte ángulos de Euler en cuaterniones;
  • skewSymmetric(): Calcula la matriz de productos cruzados del vector;
  • quaternionleft(): Calcula la matriz de multiplicación izquierda del cuaternión;
  • quaternionright(): Calcula la matriz de multiplicación derecha del cuaternión.

Las funciones relacionadas con la operación de matrices y vectores en la biblioteca Eigen se llaman en el archivo de encabezado. Además, este archivo de encabezado contiene una declaración de la Licencia pública general de GNU.

[4/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\common\types.h

El archivo de programa common\types.h define tres tipos de datos: GNSS, IMU y Pose, que representan datos del sistema global de navegación por satélite, datos de la unidad de medición inercial y datos de actitud, respectivamente. Estas estructuras contienen diferentes variables miembro, que se utilizan para representar la información requerida por cada tipo de datos. En las estructuras GNSS e IMU, el tiempo representa la marca de tiempo, blh y std representan la posición y la desviación estándar, dtheta y dvel representan la velocidad angular y la velocidad lineal, y odovel representa la velocidad original. En la estructura Pose, R representa la matriz de rotación y t representa el vector de traslación. Además, el archivo de programa también hace referencia a algunos tipos en la biblioteca Eigen y utiliza la palabra clave typedef para definir nuevos nombres de tipos, lo que simplifica la escritura de códigos.

[5/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\fileio\filebase.h

Este es un archivo de programa C++ llamado fileio\filebase.h. Este archivo define una clase FileBase para operaciones de lectura y escritura de archivos. Esta clase tiene las siguientes funciones miembro:

  • Constructor: constructor predeterminado.
  • Destructor: El destructor de una clase.
  • close(): Cierra la función de operación de archivos.
  • isOpen(): Función para determinar si el archivo está abierto.
  • isEof(): Función para determinar si el archivo ha llegado al final del archivo.
  • fstream (): obtiene la función de flujo de archivos.
  • columnas (): devuelve la función de número de columna del archivo.

Esta clase también tiene las siguientes variables miembro:

  • filefp_: puntero de archivo.
  • filetype_: tipo de archivo, TEXTO o BINARIO.
  • columnas_: número de columnas del archivo.

La función principal de este archivo es encapsular la función de operación de archivos, lo cual es conveniente para que otros archivos llamen.

[16/6] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\fileio\fileloader.h

El archivo del programa es un archivo de encabezado llamado fileloader.h.

Este archivo define una clase FileLoader, que hereda de la clase FileBase. La función principal de la clase FileLoader es leer y cargar archivos que contienen datos. Esta clase contiene las siguientes funciones miembro públicas:

  • Constructor: se utiliza para crear un objeto FileLoader.
  • Función open(): se utiliza para abrir el archivo especificado y establecer el número de columnas y el tipo de archivo necesarios para la lectura.
  • Función load(): utilizada para cargar un bloque de datos continuo.
  • función loadn(): se utiliza para cargar archivos que contienen múltiples bloques de datos.
  • Función load(): se utiliza para cargar datos del archivo especificado en el vector especificado.
  • función loadn(): se utiliza para cargar varios bloques de datos del archivo especificado en el vector bidimensional especificado.

La clase FileLoader también incluye una función miembro privada load_(), que se usa para realizar la operación de lectura del archivo. También contiene una variable miembro privada data_, que se utiliza para almacenar temporalmente los bloques de datos cargados.

La información de copyright del archivo y los términos de uso de la Licencia pública general de GNU se describen en los comentarios a lo largo del archivo.

[7/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\fileio\filesaver.h

Este archivo de programa define una clase llamada FileSaver, que es una subclase de la clase FileBase. Esta clase proporciona funciones para abrir archivos y escribir datos en archivos. Esta clase se utiliza para el almacenamiento de datos. El programa está escrito en lenguaje C++ y depende de las bibliotecas estándar fstream, string y vector, así como de la clase absl::strings::string_view en la biblioteca absl. La clase definida en este archivo escribe datos en un archivo de disco local en formato de texto o binario en forma de flujo de archivos. Entre ellas, la función dump escribe un vector unidimensional en un archivo y la función dumpn escribe un vector bidimensional en un archivo.

[8/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\fileio\gnssfileloader.h

El archivo del programa es un archivo de encabezado basado en el lenguaje C++, denominado gnssfileloader.h, que se utiliza principalmente para leer el contenido de los archivos GNSS. Se define una clase GnssFileLoader en el archivo, que hereda de la clase FileLoader e implementa una función miembro next() para leer los siguientes datos GNSS. Esta función carga los datos en el vector data_, luego asigna la estructura gnss_ y la devuelve. También hay un constructor definido en el archivo que toma un nombre de archivo y un número de columnas y lo abre como texto. Los datos leídos del archivo contienen las coordenadas de posición GNSS y la información de velocidad dentro de las 24 horas.

[9/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\fileio\imufileloader.h

El archivo de programa se llama imufileloader.h y define una clase llamada ImuFileLoader, que hereda la clase FileLoader y se utiliza para cargar datos IMU (unidad de medida inercial) de archivos de texto o binarios. La clase contiene un constructor, un método next(), un método starttime() y un método endtime().

La función del constructor ImuFileLoader es abrir un archivo con un nombre de archivo determinado, almacenar el tipo de archivo (archivo de texto o archivo binario), la cantidad de datos contenidos en cada línea y la frecuencia de muestreo. A continuación, se calcula el tiempo de muestreo dt a partir de la tasa de muestreo.

El método next() lee la siguiente línea en el archivo de datos y la analiza en un objeto IMU. Este método también calcula el dt entre los dos tiempos de IMU y lo almacena en la variable miembro dt del objeto IMU. Si el intervalo de tiempo de IMU es superior a 0,1 segundos, el dt del objeto IMU se establecerá en dt_. Si hay un octavo elemento en el archivo de datos, se almacenará en la variable miembro odovel del objeto IMU.

El método starttime() mueve el puntero de lectura del archivo al principio del archivo y devuelve la marca de tiempo de la primera línea de datos.

El método endtime() mueve el puntero de lectura del archivo al final del archivo y devuelve la marca de tiempo de la última línea de datos. Si el tipo de archivo es un archivo de texto, la posición de la última línea se determina leyendo un retorno de carro.

[10/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf-gins\gi_engine.h

El nombre del archivo del programa es "gi_engine.h", que pertenece a un archivo de encabezado en el paquete del programa KF-GINS e incluye principalmente la declaración y definición de la clase GIEngine. GIEngine es un algoritmo de navegación integrado GNSS/INS (Global Positioning System/Inertial Navigation System) basado en EKF (Extended Kalman Filter). Sus funciones principales incluyen agregar nuevos datos de IMU (unidad de medida inercial) y datos de GNSS (sistema global de navegación por satélite), procesar nuevos datos de IMU, interpolar datos de IMU, obtener la hora actual, obtener el estado actual de la IMU, obtener la covarianza del estado actual, etc. Entre ellos, la predicción de Kalman y la actualización de Kalman son el proceso de filtrado de Kalman basado en EKF. Además, se incluyen algunas funciones auxiliares, como compensación de errores de IMU, actualización de estado, verificación de covarianza, etc.

[11/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf-gins\insmech.h

El archivo del programa es un archivo de encabezado de C++ llamado kf-gins\insmech.h. Este archivo define una clase de C++ llamada INSMech, que contiene funciones estáticas para calcular la combinación mecánica interna (Mecanización INS). calcularMecanizaciónInterna. Esta clase de C++ define las siguientes tres funciones estáticas: posUpdate, velUpdate y attUpdate. Cada función toma dos datos IMU y el estado PVA del segundo anterior como entrada y el estado PVA actual como salida. En general, el archivo del programa implementa un algoritmo para calcular la Mecanización del INS.

[12/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf-gins\kf_gins_types.h

Este es un archivo de programa C++, llamado kf_gins_types.h, que contiene principalmente la definición de algunas estructuras. Las estructuras comúnmente utilizadas incluyen:

  1. Actitud: Indica la actitud, incluyendo cuaternión, matriz de coseno director y ángulo de Euler;
  2. PVA: Representa posición, velocidad y actitud, incluidos tres vectores, donde actitud se define por Actitud;
  3. NavState: indica el estado de navegación, incluida la posición, la velocidad, el ángulo de Euler y el error de IMU;
  4. ImuError: Indica la desviación del error y el error del factor de escala de la IMU;
  5. ImuNoise: indica el ruido de la IMU (caminata aleatoria de velocidad angular, caminata aleatoria de aceleración, polarización del giroscopio, polarización del acelerómetro, error del factor de escala del giroscopio, error del factor de escala del acelerómetro y elementos relacionados con el tiempo);
  6. GINSOptions: Indica las opciones del sistema de navegación GNSS/INS, incluido el estado inicial y la desviación estándar del estado, los parámetros de ruido de la IMU y los parámetros de instalación.

Además, el archivo del programa también contiene algunas constantes y definiciones de funciones.

[13/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf_gins.cpp

Este programa es un sistema de navegación integrado GNSS/INS (nombre completo Sistema global de navegación por satélite/Sistema de navegación inercial) basado en el filtro de Kalman extendido (EKF). Este programa encapsula una GIEngineclase, que implementa funciones como el algoritmo de filtrado EKF, la actualización del estado de navegación y la compensación de errores. El programa proporciona una interfaz que puede leer datos IMU y datos GNSS, procesarlos y generar resultados de estimación del estado de navegación e indicadores estadísticos relacionados.

El programa consta de una función principal en la que mainse utilizan bibliotecas externas, como Eigenbibliotecas (para operaciones matriciales) y bibliotecas (para medir el tiempo y mostrar el progreso del procesamiento). abslLa función principal primero lee un archivo de configuración en formato YAML, luego lee datos IMU y datos GNSS (leídos del archivo), carga los parámetros de configuración en la GINSOptionsestructura y construye GIEngineel objeto. Luego, el programa establecerá la ruta y el formato del archivo de salida, alineará y procesará los datos y finalmente generará el estado de navegación y las estadísticas relacionadas.

Las funciones del programa loadConfigse utilizan para leer el archivo de configuración, almacenar los parámetros relevantes en GINSOptionsla estructura y convertirlos a las unidades estándar utilizadas en el programa. writeNavResultLa función se usa para guardar el estado de navegación en el archivo de resultados de navegación y writeSTDla función se usa para guardar la desviación estándar de la matriz de covarianza en el archivo correspondiente.

[14/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf-gins\gi_engine.cpp

El archivo de programa es una implementación de un sistema de navegación integrado GNSS/INS basado en el filtro Kalman extendido (EKF) y el nombre del archivo es "gi_engine.cpp". Al fusionar las mediciones de GNSS e IMU, el sistema puede proporcionar estimaciones del estado de navegación más precisas que GNSS o IMU por sí solos.

El programa comienza definiendo una clase denominada "GIEngine", cuyo constructor recibe opciones de configuración del sistema, y ​​establece unos valores iniciales y una matriz de covarianza, así como la inicialización de la matriz de ruido del sistema. Se implementa una función llamada "inicializar" para inicializar la posición, la velocidad, la actitud y el error de IMU. La siguiente función "newImuProcess" es la parte central de todo el programa. En esta función, al juzgar si los datos GNSS son válidos, se decide si actualizar el estado de navegación GNSS y retroalimentar el estado del sistema. Al mismo tiempo, la propagación del estado del sistema y la actualización de la matriz de covarianza se calculan a través del valor de medición de IMU. La función "imuCompensate" se usa para compensar el error en la IMU y pasar los datos de la IMU a la función "insPropagation" para la propagación del estado. La última función "insPropagation" realiza la inicialización de la matriz de transición de estado, la matriz de ruido de propagación y la matriz de control de ruido, y calcula la actualización de estado y la propagación del error de actitud de la IMU a través del algoritmo de arreglo mecánico, actualizando así el estado y la matriz de covarianza.

Este programa realiza las funciones básicas de la navegación de fusión GNSS/INS y proporciona un método para la fusión efectiva de mediciones GNSS e IMU.

[15/16] Proporcione una descripción general del siguiente archivo de programa: .\KF-GINS-main\src\kf-gins\insmech.cpp

Este archivo de programa forma parte de KF-GINS (sistema de navegación integrado GNSS/INS basado en EKF), que realiza los tres pasos principales de la parte mecánica del INS: actualización de velocidad, actualización de posición y actualización de actitud. En la actualización de velocidad, la velocidad se actualiza de acuerdo con el elemento integral de fuerza específica y el elemento integral de gravedad/gótico; en la actualización de posición, la posición se actualiza de acuerdo con la extrapolación de velocidad al tiempo intermedio; en la actualización de actitud, la velocidad y la posición en el tiempo intermedio se obtienen de acuerdo con la actualización de velocidad, y luego se calcula el cuaternión de rotación para actualizar la matriz de actitud.

Este archivo de programa incluye varias subfunciones y cálculos matriciales, algunas de las cuales incluyen partes importantes:

  • Actualización de Velocidad por Término Integral de Fuerza Específica
  • Extrapolación de velocidad y posición
  • Cálculo de parámetros geográficos como radios de meridianos y círculos de Maoyou
  • Velocidad de actualización de los términos integrales de gravedad/gótica
  • Cálculo de matriz de actitud y cuaternión de rotación

Estos cálculos implementan pasos clave en el procesamiento de mediciones IMU y cálculos de navegación.

Con base en su propio análisis anterior, resuma la función general y la estructura del programa. Luego use una tabla de rebajas para organizar las funciones de cada archivo (incluyendo common\angle.h, common\earth.h, common\logging.h, common\rotation.h, common\types.h, fileio\filebase.h, fileio\fileloader.h, fileio\filesaver.h, fileio\gnssfileloader.h, fileio\imufileloader.h, kf-gins\gi_eng ine.h, kf-gins\insmech. h, kf-gins\kf_gins_types.h, kf_gins.cpp, kf-gins\gi_engine.cpp, kf-gins\insmech.cpp).

El diseño funcional general del programa.

Este programa es un sistema de navegación basado en la fusión GNSS/INS, que puede leer datos GNSS e IMU, calcular el estado de navegación combinando los dos y enviarlos a un archivo. La estructura general se divide en dos partes:

  1. Los archivos de encabezado ubicados en la carpeta común se utilizan para proporcionar algunas funciones básicas de herramientas matemáticas y definiciones de tipos de datos, etc.
  2. Los archivos fuente ubicados en las carpetas fileio y kf-gins se utilizan para proporcionar entrada y salida de datos y cálculo e implementación del sistema de navegación GNSS/INS.

Resumen de funciones de archivo

Nombre del archivo Función
ángulo.h Proporciona funciones para convertir entre radianes y ángulos.
tierra.h Proporciona la definición de parámetros relacionados con la tierra, como la velocidad angular de rotación, semieje mayor y semieje menor, constante gravitacional, etc.
registro.h Proporciona funciones como salida de registro, impresión de matriz y salida formateada de datos de coma flotante.
rotación.h Proporciona algunas funciones para los cálculos de matriz de rotación.
tipos.h Se definen algunos tipos de datos básicos y constantes utilizadas en el programa.
base de archivos.h La función de operación de archivos está encapsulada, lo cual es conveniente para que otros archivos la llamen.
cargador de archivos.h Lea el archivo y guarde los datos en la memoria.
ahorrador de archivos.h Guarde los datos en la memoria como un archivo.
gnssfileloader.h Leer archivos de datos GNSS.
imufileloader.h Leer archivos de datos IMU.
motor_gi.h Implementada la inicialización y cálculo de covarianza del motor de navegación GNSS/INS.
insmech.h Implementó un algoritmo de orquestación mecánica que resuelve las mediciones de IMU en estados de PVA.
kf_gins_types.h Se definen las opciones para los sistemas de navegación GNSS/INS, incluido el estado inicial y la desviación estándar del estado, los parámetros de ruido de la IMU, los parámetros de instalación, etc.
kf_gins.cpp La función principal, lee el archivo de configuración y ejecuta el sistema de navegación GNSS/INS.
gi_engine.cpp Implementadas las funciones del motor de navegación GNSS/INS.
insmech.cpp Algoritmo de orquestación mecánica implementado.

Supongo que te gusta

Origin blog.csdn.net/kanhao100/article/details/129890678
Recomendado
Clasificación