Skip to content

About

Sistema de calibración de IMU mediante GPS RTK para obtener orientación absoluta en robots móviles. Elimina la dependencia del magnetómetro usando trayectorias controladas y precisión centimétrica RTK.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IMU Satellital Calibration Ros 1 Noetic

Sistema de calibración de IMU mediante GPS RTK para obtener orientación absoluta en robots móviles autónomos.

ROS Version Python Version License


📋 Tabla de Contenidos


🎯 Descripción General

imu_satellital_calibration es un paquete ROS Noetic que resuelve uno de los desafíos fundamentales en robótica móvil autónoma: obtener la orientación absoluta (norte verdadero) de un robot sin depender de magnetómetros.

El sistema utiliza GPS RTK de alta precisión para calibrar una IMU, permitiendo que robots móviles naveguen de forma autónoma con orientación absoluta referenciada a coordenadas geográficas (ENU/UTM).

¿Por qué es importante?

En navegación autónoma, conocer la orientación absoluta del robot es crucial para:

  • Fusión de sensores (GPS + IMU) en robot_localization
  • Planificación de trayectorias en move_base
  • Localización global sin puntos de referencia artificiales
  • Navegación en exteriores donde no hay landmarks confiables

❌ El Problema

Limitaciones de las IMUs convencionales

Las IMUs tradicionales (acelerómetro + giroscopio + magnetómetro) presentan varios problemas:

1. Deriva del Giroscopio

  • Las IMUs solo entregan orientación relativa
  • El error se acumula con el tiempo (deriva)
  • Sin referencia absoluta, la orientación se vuelve inútil en minutos

2. Interferencia Magnética

  • Los magnetómetros son extremadamente sensibles a:
    • Motores eléctricos del robot
    • Estructuras metálicas
    • Cables de potencia
    • Baterías
    • Electrónica cercana
  • Calibración magnética compleja y poco confiable
  • Variación magnética geográfica

3. Problemas en Robótica Móvil

Robot con IMU convencional:
   ┌─────────────┐
   │  Orientación│  ← Solo relativa, sin norte verdadero
   │  relativa   │  ← Deriva con el tiempo
   │  (magnética)│  ← Interferencias magnéticas
   └─────────────┘
         ↓
   ⚠️ No apta para navegación autónoma de largo plazo

✅ La Solución

Calibración Satelital con GPS RTK

Este paquete implementa un método innovador que elimina completamente la dependencia del magnetómetro:

┌─────────────────────────────────────────────────────────┐
│         CALIBRACIÓN SATELITAL IMU                       │
│                                                         │
│  GPS RTK (±2cm) + Trayectoria Controlada               │
│              ↓                                          │
│     Orientación Absoluta (Norte Verdadero)              │
│              ↓                                          │
│     IMU con Orientación Absoluta ENU/UTM                │
└─────────────────────────────────────────────────────────┘

Proceso de Calibración

FASE 1: Datum P1                FASE 2: Trayectoria         FASE 3: Datum P2
┌──────────────┐               ┌──────────────┐            ┌──────────────┐
│ GPS RTK      │               │ Robot avanza │            │ GPS RTK      │
│ Punto Origen │  ────────────▶│ en línea     │───────────▶│ Punto Destino│
│ (2 min)      │               │ recta (30m)  │            │ (2 min)      │
└──────────────┘               └──────────────┘            └──────────────┘
  Lat1, Lon1                    Control PID                 Lat2, Lon2
      │                              │                           │
      └──────────────────────────────┴───────────────────────────┘
                                     │
                          FASE 4: Cálculo Ángulo
                         ┌──────────────────────┐
                         │ Bearing P1 → P2      │
                         │ (Norte Verdadero)    │
                         └──────────────────────┘
                                     │
                          FASE 5: Republicador IMU
                         ┌──────────────────────┐
                         │ /imu/data_absolute   │
                         │ Orientación Absoluta │
                         │ + Integración Gyro   │
                         └──────────────────────┘

Ventajas del Método

✅ Sin magnetómetro - Elimina interferencias electromagnéticas
✅ Precisión centimétrica - RTK FIX proporciona ±2-5 cm
✅ Norte verdadero - Orientación geodésica absoluta
✅ Integración de giroscopio - Mantiene orientación entre mediciones GPS
✅ Compatible con ROS - Funciona con robot_localization, move_base, etc.
✅ Automático - Un solo comando ejecuta todo el proceso


🚀 Características Principales

1. Validación RTK Automática

  • Verifica calidad RTK FIX antes de recolectar datos
  • Requiere N muestras consecutivas estables
  • Timeout configurable
  • Detección de pérdida de señal

2. Filtrado Robusto de Outliers

  • Algoritmo MAD (Median Absolute Deviation)
  • Elimina mediciones espurias
  • Threshold configurable
  • Estadísticas de calidad

3. Control de Trayectoria

  • PID para mantener línea recta
  • Perfil de velocidad trapezoidal
  • Parámetros configurables
  • Monitoreo en tiempo real

4. Cálculo Geodésico Preciso

  • Fórmula Haversine para distancia
  • Bearing inicial entre puntos
  • Conversión GPS → ENU/UTM
  • Normalización angular

5. Republicador IMU con Integración

  • Orientación absoluta inicial
  • Integración de velocidades angulares
  • Covarianzas apropiadas
  • Frame absoluto /imu/data_absolute

📦 Requisitos

Hardware

Componente Especificación Requerido
GPS RTK Receptor con correcciones RTK, topic NMEA GGA ✅ Sí
IMU Con giroscopio (BNO080, MPU9250, etc.) ✅ Sí
Robot Móvil Capacidad de movimiento controlado ✅ Sí
Espacio Abierto 50m mínimo, vista despejada al cielo ✅ Sí
Estación Base RTK O servicio NTRIP para correcciones ✅ Sí

Software

Dependencia Versión Instalación
ROS Noetic (Ubuntu 20.04) sudo apt install ros-noetic-desktop-full
Python 3.8+ Incluido en Ubuntu 20.04
NumPy - sudo apt install python3-numpy
PyYAML - sudo apt install python3-yaml
TF - sudo apt install ros-noetic-tf

Paquetes ROS

sudo apt install \
  ros-noetic-sensor-msgs \
  ros-noetic-geometry-msgs \
  ros-noetic-nmea-msgs

🔧 Instalación

Método 1: Instalación Rápida

# 1. Navegar al workspace de catkin
cd ~/catkin_ws/src

# 2. Clonar el repositorio
git clone https://github.com/tu-usuario/imu_satellital_calibration.git

# 3. Compilar
cd ~/catkin_ws
catkin_make

# 4. Source del workspace
source devel/setup.bash

Método 2: Instalación Manual

# 1. Crear el paquete
cd ~/catkin_ws/src
mkdir -p imu_satellital_calibration/{scripts,launch,src/imu_satellital_calibration}

# 2. Copiar archivos
cd imu_satellital_calibration
# Copiar CMakeLists.txt, package.xml, setup.py

# 3. Copiar scripts Python
cp *.py scripts/
chmod +x scripts/*.py

# 4. Copiar launch files
cp *.launch launch/

# 5. Crear __init__.py
touch src/imu_satellital_calibration/__init__.py

# 6. Compilar
cd ~/catkin_ws
catkin_make
source devel/setup.bash

Verificación de Instalación

# Verificar que el paquete se encuentre
rospack find imu_satellital_calibration

# Listar nodos disponibles
rospack list-names | grep imu_satellital

# Verificar dependencias
rosdep check imu_satellital_calibration

🎮 Uso

Calibración Completa (Automática)

El proceso completo se ejecuta con un solo comando:

roslaunch imu_satellital_calibration launch_imu_calibration.launch

Este comando ejecutará automáticamente las 5 fases:

  1. ⏳ Validación RTK (hasta 5 minutos)
  2. 📍 Datum P1 (2 minutos de recolección)
  3. 🚗 Trayectoria (30 metros en línea recta)
  4. 📍 Datum P2 (2 minutos de recolección)
  5. 🧭 Cálculo de ángulo + Republicador IMU

Tiempo total estimado: ~10-15 minutos

Con Parámetros Personalizados

roslaunch imu_satellital_calibration launch_imu_calibration.launch \
  nmea_topic:=/ublox/gngga \
  gps_topic:=/ublox/fix \
  imu_topic:=/bno080/imu \
  travel_distance:=40.0 \
  v_max:=1.0 \
  collection_time:=180.0 \
  require_rtk:=true \
  rtk_quality:=4

🏗️ Arquitectura del Sistema

Diagrama de Flujo Completo

┌─────────────────────────────────────────────────────────────────┐
│                    COORDINADOR PRINCIPAL                        │
│              (calibration_coordinator.py)                       │
└────────────────────────┬────────────────────────────────────────┘
                         │
        ┌────────────────┼────────────────┐
        │                │                │
        ▼                ▼                ▼
┌───────────────┐ ┌──────────────┐ ┌─────────────────┐
│  DATUM P1     │ │ TRAYECTORIA  │ │   DATUM P2      │
│  Collector    │ │  Controlada  │ │   Collector     │
└───────┬───────┘ └──────┬───────┘ └────────┬────────┘
        │                │                   │
        │  datum_p1.yaml │                   │ datum_p2.yaml
        │                │                   │
        └────────────────┼───────────────────┘
                         │
                         ▼
              ┌─────────────────────┐
              │  DEGREE COLLECTOR   │
              │ Cálculo de Ángulo   │
              └──────────┬──────────┘
                         │
                         │ yaw_offset.yaml
                         ▼
              ┌─────────────────────┐
              │  IMU REPUBLISHER    │
              │ Orientación Absoluta│
              └──────────┬──────────┘
                         │
                         ▼
                  /imu/data_absolute

⚙️ Parámetros de Configuración

Tópicos ROS

Parámetro Tipo Default Descripción
nmea_topic string /gngga Tópico NMEA con mensajes GGA para RTK
gps_topic string /fix Tópico GPS NavSatFix
imu_topic string /imu/data Tópico IMU de entrada

Parámetros RTK

Parámetro Tipo Default Descripción
require_rtk bool true Requiere RTK FIX antes de iniciar
rtk_quality int 4 Quality mínimo (4=FIX, 5=FLOAT)
rtk_samples int 10 Muestras consecutivas para validar
rtk_timeout float 300.0 Timeout en segundos (5 min)

✅ Validación y Precisión

Precisión Esperada

Condición Precisión Lateral Precisión Angular Calidad
RTK FIX (Quality 4) ±2-5 cm ±0.1° ⭐⭐⭐ Excelente
RTK FLOAT (Quality 5) ±10-30 cm ±0.3° ⭐⭐ Buena
DGPS (Quality 2) ±1-5 m ±2° ⭐ Aceptable

🐛 Troubleshooting

Problema: No se obtiene RTK FIX

Soluciones:

  1. Verificar señal GPS: rostopic echo /gngga
  2. Verificar correcciones RTK (estación base/NTRIP)
  3. Mejorar vista al cielo (>8 satélites)
  4. Aumentar timeout: rtk_timeout:=600.0

Problema: Robot no se mueve en línea recta

Soluciones:

  1. Ajustar ganancias PID: kp:=1.0 kd:=1.0
  2. Reducir velocidad: v_max:=0.5
  3. Verificar IMU: rostopic echo /imu/data/angular_velocity

🤝 Contribución

¡Las contribuciones son bienvenidas! Por favor:

  1. Fork del repositorio
  2. Crear rama: git checkout -b feature/nueva-funcionalidad
  3. Commit: git commit -m "Descripción clara"
  4. Push: git push origin feature/nueva-funcionalidad
  5. Crear Pull Request

📄 Licencia

MIT License - Ver LICENSE para más detalles.


👥 Autores

Pablo Vallejos

Manuel Molina


⭐ Si este proyecto te resultó útil, considera darle una estrella en GitHub ⭐

Hecho con ❤️ por Pablo Vallejos y Manuel Molina

About

Sistema de calibración de IMU mediante GPS RTK para obtener orientación absoluta en robots móviles. Elimina la dependencia del magnetómetro usando trayectorias controladas y precisión centimétrica RTK.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages