Prueba de posicionamiento en interiores ESP32 UWB
Hicimos una prueba de posicionamiento en interiores ESP32 UWB, utilizando 2 anclajes UWB y 1 etiqueta UWB, cuando la etiqueta se mueve, la posición en tiempo real de la etiqueta UWB se puede mostrar gráficamente en la PC.
1. Visión general
1.1 Introducir
DW1000es el primer transceptor inalámbrico de un solo chip del mundo basado en técnicas de banda ultra ancha. Proporciona un nuevo enfoque para la ubicación en tiempo real y los sistemas de posicionamiento en interiores, los servicios basados en la ubicación, las redes de sensores inalámbricos. Permite desarrollar soluciones RTLS rentables con un posicionamiento preciso en interiores y exteriores paradentro de 10 cm.ElMakerfabs ESP32 UWBbasado en la solución ESP32 y DW1000, actúa como un radar de escaneo continuo, que se bloquea con precisión en otro dispositivo y se comunica con él, calculando así su propia ubicación, con el ESP32 WiFi / Bluetooth, podría ser una solución para el posicionamiento inalámbrico en interiores.
1.2 Acerca de UWB
La banda ultra ancha es una tecnología para transmitir información a través de un ancho de banda amplio (>500 MHz). Esto permite la transmisión de una gran cantidad de energía de señal sin interferir con la transmisión convencional de banda estrecha y onda portadora en la misma banda de frecuencia. Los límites reglamentarios en muchos países permiten este uso eficiente del ancho de banda de radio y permiten la conectividad inalámbrica de red de área personal (PAN) de alta velocidad de datos, aplicaciones de baja velocidad de datos de mayor alcance y sistemas de radar e imágenes, que coexisten de manera transparente con los sistemas de comunicaciones existentes.Una diferencia significativa entre las transmisiones de radio convencionales y UWB es que los sistemas convencionales transmiten información variando el nivel de potencia, frecuencia y / o fase de una onda sinusoidal. Las transmisiones UWB transmiten información generando energía de radio a intervalos de tiempo específicos y ocupando un gran ancho de banda, lo que permite la posición del pulso o la modulación del tiempo. La información también se puede modular en señales UWB (pulsos) codificando la polaridad del pulso, su amplitud y/o utilizando pulsos ortogonales. Los pulsos UWB se pueden enviar esporádicamente a frecuencias de pulso relativamente bajas para admitir la modulación de tiempo o posición, pero también se pueden enviar a velocidades de hasta la inversa del ancho de banda de pulso UWB. Los sistemas UWB de pulso se han demostrado a velocidades de pulso de canal superiores a 1.300 millones de pulsos por segundo utilizando un flujo continuo de pulsos UWB (pulso continuo UWB o C-UWB), al tiempo que admiten velocidades de datos codificadas de corrección de errores hacia adelante superiores a 675 Mbit/s.
1.3 Rango UWB
Se puede utilizar un sistema de radio UWB para determinar el "tiempo de vuelo" de la transmisión en varias frecuencias. Por supuesto, la velocidad del "vuelo" es como la de la luz, por lo que el problema central es cómo verificar el tiempo de "vuelo" y, por lo tanto, calcular la distancia.Distancia = Velocidad de la luz * TProt
Para el sistema más básico, hay al menos 2 elementos: Device_A (llamado A) y Device_B (llamado B), hay principalmente 2 formas de medición:
1. Rango bidireccional de un solo lado
2. Rango bidireccional de doble cara
1.3.1 Rango bidireccional de un solo lado
Esta es la forma más básica de medir:En primer lugar A enviar el mensaje(TX) y tener un registro de la marca de tiempo, Como B obtener el mensaje, y tener la recodificación de tiempo Mark, después del retraso (Trepetir), B envía el mensaje (TX) y tiene un registro de la marca de tiempo, y finalmente A recibe el mensaje, y tiene el registro de marca de tiempo.
Luego el tiempo de vuelo:
Como la Tredondoy Trespuestase almacenan en el mismo dispositivo, por lo que la compensación de tiempo-error; por supuesto, hay un error entre A(eA) y B(eB), y el error es:
Es decir, el error es lineal a la Trespuesta. Por lo tanto, esta forma no se usa popularmente, solo se adapta a la medición de distancias muy cortas.
1.3.2 Rango bidireccional de doble cara
Después del "Single-sided Two-way Ranging", si A vuelve a responder a B, será:A esta medida la llamamos3 Modo de mensajes.
Después del "Single-sided Two-way Ranging", si B inicia de nuevo otro mensaje y A retroalimentación, será:
A esta medida la llamamos4 Modo de mensajes.
En el modo de 3 mensajes o en el modo de 4 mensajes, el tiempo de vuelo se calcula como:
2. Posicionamiento en interiores con ESP32 UWB
2.1 Vista
En esta aplicación, utilizamos 3 módulos Makerfabs ESP32 UWB, 2 módulos actúan como anclaje UWB y 1 como etiqueta UWB, que se mueve en la habitación. A medida que la etiqueta obtiene su posición, transmite su ubicación a los dispositivos (ya sea el navegador de la PC, o la aplicación en el teléfono), para mostrar la posición en tiempo real.2.2 Algoritmo de orientación plana
Supongamos que los tres módulos UWB están a la misma altura horizontal. UWB puede obtener la distancia entre Tag y dos anclajes, más la distancia de dos anclajes establecidos de antemano, podemos obtener la longitud de tres lados de un triángulo.Dos puntos "AB" son dos anclajes respectivamente, y "C" es el punto de etiqueta. "c" es la distancia de dos anclajes, y UWB obtendrá dos longitudes "a" y "b". La etiqueta está "b" lejos del punto "A" y "a" lejos del punto "B".
Ahora que conocemos la distancia entre los tres lados del triángulo, podemos calcular las coordenadas del punto "C".
Utilicé la ley de los cosenos para calcular el coseno del ángulo "A":
Tengo el teorema de Pitágoras que me da el seno del ángulo "A":
cos_a = (b * b + c * c - a * a) / (2 * b * c)
sin_a = sqrt(1 - cos_a * cos_a)
Si establecemos el punto "A" como el origen del sistema de coordenadas (0,0), entonces obtenemospunto C (bcosα, bsinα).
3. Lista de equipos
●ESP32 UWB*3● Banco de energía
● Fuente de alimentación de 5V *2
4. Explicación del código
4.1 Biblioteca
UtilizamosBiblioteca Arduino-DW1000. Una biblioteca que ofrece funcionalidad básica para usar los chips/módulos DW1000 de Decawave con Arduino.(Biblioteca Arduino-DW1000)Tenga en cuenta que debe modificar la biblioteca DW1000 de acuerdo con Github, de lo contrario no se compilará para ESP32. El guía enESP32 UWB GitHub
El código completo para esta aplicación en:Makerfabs GitHub***
4.2 Device_Anchor
Como hay 2 anclajes en el sistema, necesitamos establecer diferentes direcciones de anclaje para los dos anclajes.#define ANCHOR_ADD "83:17:5B:D5:A9:9A:E2:9C"// modificar la dirección cuando varios anclajes, como 83/82.La biblioteca usa direcciones cortas aleatorias de forma predeterminada, y debemos configurarla para usar las direcciones estáticas que establecemos. Por lo tanto, debemos configurar el módulo UWB en modo de anclaje, modo LONGDATA_RANGE_LOWPOWER y desactivar la dirección corta aleatoria, mediante el siguiente código:
DW1000Ranging.startAsAnchor(ANCHOR_ADD, DW1000. MODE_LONGDATA_RANGE_LOWPOWER, falso);El código de anclaje en://github.com/Makerfabs/Makerfabs-ESP32-UWB/tree/main/example/anchor
4.3 Device_Tag
La etiqueta necesita leer la distancia entre los dos anclajes y enviarla a la PC a través del protocolo UDP.En primer lugar, configure WiFi y la dirección IP de destino (PC).
En Windows cmd, usando "ipconfig" para comprobar la IP local del PC.
Y configure el trabajo de UWB en modo de etiqueta.
Utilicé una lista vinculada para almacenar los anclajes detectados, lo que encaja bien con la forma en que funciona UWB. El contenido de la lista vinculada se convierte al formato JSON.
El formato de cadena JSON obtenido es el siguiente:
Finalmente, los datos se envían a la PC cada segundo a través del protocolo UDP.
El código de etiqueta en://github.com/Makerfabs/Makerfabs-ESP32-UWB/tree/main/example/IndoorPositioning/udp_uwb_tag
4.4 Código Python
Una demo sencilla para calcular la posición de la etiqueta y mostrarla gráficamente. Usando tortuga para dibujar.Al principio quería usar Matplotlib, pero era un poco complicado. Tortuga es fácil, pero las funciones proporcionadas son rudimentarias. Yo mismo agregué algunas funciones de dibujo para dibujar rápidamente líneas, círculos, rectángulos, etc.
Aquí está mi función de cálculo de posición.
De hecho, al principio utilicé la fórmula de Helen para calcular las coordenadas, pero no pude decir si un triángulo era agudo u obtuso.
La función de demostración es recibir los datos de etiqueta transmitidos a través del protocolo UDP, calcular la posición de la etiqueta y dibujarla en la pantalla.
5. Prueba
Después de que todos los anclajes UWB y etiquetas programados OK, primero coloco los dos anclajes UWB a ambos lados de la mesa.Y ejecute el programa Python en el lado de la PC. Conecte la etiqueta UWB al banco de energía y espere a que se conecte al WiFi de la habitación. Después de conectar la etiqueta a la PC, aparece la interfaz gráfica.
Mueva la etiqueta UWB, la posición de la etiqueta se puede monitorear en tiempo real en la PC:
Mira el video:
Si tiene más preguntas para esta aplicación sobre ESP32 UWB Posicionamiento en interiores, o necesita algunasservicio de ensamblaje de PCB personalizado, póngase en contacto conservice@makerfabs.com.
>>> Nuevo: ESP32 UWB Calibración de retardo de antena
Nuevo video:ESP32 UWB Versión de alta potencia con amplificador, hasta 120m ~