Ir al contenido

Navegación visual

La navegación visual es la tecnología clave para que el drone se localice en entornos sin GPS. En este proyecto aprenderás a implementar la localización en interiores con los datos de flujo óptico de la cámara.

  • Bases de la visión por computadora
  • Algoritmo de flujo óptico
  • Odometría visual-inercial (VIO)
  • Fusión de sensores
Artículo Cantidad Descripción
Drone ESP32-S3 1 -
Módulo de cámara OV2640 1 -
Sensor de flujo óptico PMW3901 1 Opcional
  • Cámara OV2640 → interfaz DVP del ESP32-S3
  • PMW3901 (opcional) → interfaz SPI del ESP32-S3

Descomprime optical_flow.zip y ábrelo con VS Code.

Paso 3: Implementar la función de cálculo de flujo óptico

Sección titulada «Paso 3: Implementar la función de cálculo de flujo óptico»

Abre optical_flow.c e implementa el cálculo de flujo óptico:

void optical_flow_calculate(uint8_t* prev_frame, uint8_t* curr_frame,
int width, int height, float* dx, float* dy) {
// 1. Extraer puntos de característica (esquinas)
FeaturePoint features[100];
int feature_count = extract_corners(prev_frame, width, height, features, 100);
// 2. Hacer seguimiento de los puntos de característica
FeaturePoint tracked_features[100];
int tracked_count = track_features(prev_frame, curr_frame, width, height,
features, feature_count, tracked_features);
// 3. Calcular el desplazamiento medio
*dx = 0;
*dy = 0;
for (int i = 0; i < tracked_count; i++) {
*dx += tracked_features[i].x - features[i].x;
*dy += tracked_features[i].y - features[i].y;
}
if (tracked_count > 0) {
*dx /= tracked_count;
*dy /= tracked_count;
}
}

Paso 4: Implementar la odometría visual-inercial (VIO)

Sección titulada «Paso 4: Implementar la odometría visual-inercial (VIO)»

Abre vio.c e implementa la VIO:

void vio_update(float gx, float gy, float gz,
float ax, float ay, float az,
float dt, float flow_dx, float flow_dy) {
// 1. Predecir la posición con los datos de la IMU
predict_position(gx, gy, gz, ax, ay, az, dt);
// 2. Corregir la posición con los datos de flujo óptico
correct_position(flow_dx, flow_dy, dt);
// 3. Sacar la posición fusionada
update_estimated_position();
}
  1. Vuela en interiores y observa si el drone mantiene la posición estable (sin GPS)
  2. Reto: dibuja una línea recta en el suelo y haz que el drone vuele a lo largo de ella
  • Mejora las condiciones de iluminación
  • Optimiza el algoritmo de extracción de puntos de característica
  • Ajusta los parámetros de la VIO
  • Añade más fusión de sensores

¡Enhorabuena! Has implementado un sistema de navegación visual, ¡la tecnología clave para que el drone se localice en entornos sin GPS!

En el siguiente proyecto aprenderás a implementar la planificación autónoma de trayectorias del drone con el algoritmo A*.

Publicado por primera vez endrone.imagrove.com/es/advanced/visual-navigation/Al citar o reproducir, indica la fuente Imagrove y enlaza a esta página.

¿Dudas o problemas con este tutorial?

Inicia sesión con GitHub para comentar. Si un paso te falla, avísanos: lo verificamos y actualizamos el tutorial.

ImagroveMás tutoriales sobre ESP32 · ESP32 IoT Tutorial

© 2026 ESP32 Drone. Todos los derechos reservados.