Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos,
Estoy realizando un controlador de posición para un cuadróptero (es mi PFC), quiero que sea Open-Hardware así que iré publicando por aquí y en el blog los avances que vaya haciendo. Se que ya existen alternativas comerciales y abiertas (el openPilot, el KK o el multiWii por ejemplo), pero mi idea es que al final sea totalmente autónomo.
Por otra parte quiero hacer el sistema lo más general posible para que pueda aplicarse a todo tipo de drones (áereos, terrestre, acuaticos, submarinos o espaciales).
He partido el proyecto en varios trozos:
- Piloto --> controlador de posición (mi PFC) evita que el cuadróptero se vaya al traste, controlará los sensores y enviará las señales a los drivers para controlar la estabilidad del conjunto.
- Navegador --> Es el que toma las decisiones para que sea autónomo. Por falta de tiempo no voy a realizarlo dentro del PFC, pero iré avanzando en él cuando tenga la parte del piloto hecha.
- Maquinista --> Mi idea es desarrollar unos drivers para motores brushless (los famosos ESC) que se controlen por bus SPI que den una mayor velocidad de respuesta al sistema (los 20ms del PWM me parecen mucho en una situación crítica).
- Controlador --> Servicio de telemetría en tierra para la recepción de la telemetría y el control (indicaciones) del equipo.
Las sugerencias serán bienvenidas.
S2
Ranganok Schahzaman
Protocolo de comunicaciones:
Voy a realizar uno sencillo de utilizar del tipo:
ID | LEN | DATA
ID (1 byte): identificador
LEN (1 byte): longitud de los datos
DATA (0 a 255 bytes): datos
Esto permite enviar hasta 255 señales distintas, de datos variables. Este protocolo viene encapsulado para radio tal que así:Preámbulo | SINCRO WORD | DESTINO | ORIGEN | SECUENCIA | ID | LEN | DATA | CRC-16
- El preámbulo (16-64 bits) y el sincro word (2 bytes) sirven para sincronizar el Tx y el Rx, corregir la frecuencia, marcar el inicio del paquete, etc.
- DESTINO (1 byte) y ORIGEN (1 byte) es para identificar a los que se comunican entre ellos (por si hay más de un aparato o central de tierra).
- SECUENCIA (1 byte) Numero de paquete permite saber si nos hemos saltado un paquete.
- CRC-16 son dos bytes de control de errores.
S2
Ranganok Schahzaman
PD: una vez terminado el PFC intentaré integrar el MAVLink
Idea:
En lugar de usar un CRC16, para la radio, puedes usar un código con corrección de errores tipo Reed-Solomon BCH4863 ó BCH3121 y garantizas una mejor comunicación en entornos ruidosos o con poca señal, sobre todo si no tienes canal de retorno. Los algoritmos que te he comentado antes no sonsumen mucha memoria ni potencia de cálculo... Además para un PFC mola mas.
Mándame un privado si necesitas fuentes en C del código opimizado...
Heli, sí me interesa el código (aunque para otros proyectos), no se si tienes mi correo sino te lo mando.
He cogido el CRC-16 porque es el que implementa automáticamente el chip de radio y así me lo ahorro de tener que hacer yo. Además había pensado hacer la comunicación bidirecional (con ACK o NACK para las pérdidas de paquetes). También es el que se utiliza en el MAVLink.
De todas formas dado que este encapsulamiento lo hace el propio chip, si cambiamos de chip de RF podemos cambiar de encapsulamiento sin cambiar el protocolo principal (ID | LEN | DATA).
S2
Ranganok Schahzaman
EDITO:
Heli, me has dado una idea, voy a separar la RF del chip principal, de esta forma el chip de RF (con la lógica asociada) se encargará de encapsular el protocolo, de los reintentos y de controlar los paquetes, y el micro pincipal sólo de enviar y recibir los datos.
Siguiendo con el diseño:
Las entradas del control de posición que quiero poner son:
- IMU 10 Ejes (I2C/SPI):
- Giroscopio 3 ejes
- Acelerómetro 3 ejes
- Magnetómetro 3 ejes
- Barómetro/Altímetro
- GPS (RS232)
- RTC
- Hasta 8 x Sonar (I2C/SPI?)
- Centralita RF 9Ch (9 entradas de PWM)
- Telemetría (RS232 o SPI)
Salidas:
- Hasta 8 motores (PWM / SPI)
- 12 Salidas para LEDs (PWM)
- Salidas Digitales para interruptores, etc.
- Targeta MMC para logging
S2
Ranganok Schahzaman