HobbyKing Pocket Quad V1.1 Ultra-Micro C# client

P1010136

Un par de meses que tengo dos de estos equipos. La verdad que son ideales para cualquier tarea de investigacion en Sistemas de Control, Fusion de Sensores, etc. Algunas caracteristicas que los hacen tan utiles son las siguientes:

  • Open Source: Firmware Multiwii
  • MCU Atmega32u4 16Mhz 8-bit
  • Arduino Bootloader
  • MPU-6050: Gyro + Acc = 6DOF
  • USB FTDI onboard

HobbyKing Pocket Quad V1.1 Ultra-Micro DSM2 MultiWii Quadcopter (PNF) (USA Warehouse)

En el marco de un proyecto de Sistemas de Control utilizando Camaras, necesitaba desarrollar un cliente C# para poder recibir y enviar comandos al quadcopter para poder controlar: roll, pitch, yaw y throttlethrotlle.

Multiwii utiliza un protocolo binario con CRC muy sencillo. Ellos lo denominan MSP (Multiwii Serial Protocol).  La estructurade un frame MSP es la siguiente:

  • $M>[data length][data][checksum]

a saber:

  • $M> son 3 bytes que  marcan el comienzo del frame.
  • data length: un byte que representa el numero de bytes que componen el mensaje.
  • code: es un byte que identifica el comando o request
  • data: son los parametros del comando o del request
  • checksum: es el byte de control.

Para mas informacion del protocolo MSP:

 

Ahora bien para conocer los angulos roll, pitch y yaw del quad y poder controlarlo enviandole comandos RC necesito poder intercambiar solo dos tipos de mensajes:

  • MSP_ATTITUDE: Este request hace que Multiwii me responda con un mensaje que contiene los angulos de Euler para roll, pitch y yaw.
  • MSP_SET_RAW_RC: Este comando me permite enviarle al quad los valores de cada canal de la Rx. Estos comandos sobreescriben los de la radio.

Aqui hay un ejemplo de como se ve la estructura de un mensaje en C#:

[Serializable]
public class MSP_ATTITUDE : MSP_IncomingMessage
{
// Range [-180;180] (precision: 1/10 degree)
public float roll;
// Range [-90;90] (precision: 1/10 degree)
public float pitch;
// Range [-180;180] (precision 1 degree)
public float heading;
}
 
 
El problema con la implementacion de Multiwii actual es que los comandos RC enviados MSP_SET_RAW_RC sobre escriben los de la radio pero solo si se encuentran presentes en el buffer del puerto serie. Es decir que si envio mensajes 1 una vez por segundo modificando los canales, estos comandos solo estaran vigente mientras sean procesados, luego la radio retoma el control, esto hace un poco dificil el control desde la maquina porque debo enviar los comandos a mas de 50hz para mantener un control estable. Con lo cual hice una modificacion en el codigo fuente de Multiwii.
Esta modificacion convierte a la radio en un entrenador. Es decir, si la radio esta encendida y el nivel del canal 8 es alto, entonces el quad esta en control desde la PC, pero si activo la palanca de entrenamiento en la radio, tomo el control de quad con la radio.
Esto es util en un escenario en donde el quad esta siendo controlado siempre por la PC y solo requiere maniobras de recuperacion o control manual desde la radio.
 
Las modificaciones las realice en RC.cpp de Multiwii
 
// ALE: Custom code
// Convert RC Channel 7 into a switcher between MSP RC and Radio RC.
// Channel 7+ are the only channels which is not overridden

//if (chan<8 && rcSerialCount > 0) { // rcData comes from MSP and overrides RX Data until rcSerialCount reaches 0
if (chan<6 && rcSerialCount > 0 && rcData4Values[6][rc4ValuesIndex] > 1500) { // rcData comes from MSP and overrides RX Data until rcSerialCount reaches 0
//rcSerialCount --;
#if defined(FAILSAFE)
failsafeCnt = 0;
#endif
if (rcSerial[chan] >900) {rcData[chan] = rcSerial[chan];} // only relevant channels are overridden
}
P1010142
 
 
Ambos proyectos estan en Github.
 
 

Video

2 pensamientos en “HobbyKing Pocket Quad V1.1 Ultra-Micro C# client

  1. Amigo sos grande, yo estoy tratando de enviar comandos a los motores que estan conectados a mi multiwii pero no he tenido ningun resultado positivo, me gustaria hacerte unas preguntas puntuales. Seria genial si me puedes colaborar, necesito tu ayuda enserio, este es mi email jdavortega123@hotmail.com. Muchas gracias.

  2. Hola,
    Yo hice algo parecido con una multiwii, pero fue un control para Android.
    https://github.com/aeracoop/flone

    Mi pregunta es si has encontrado la manera de conectar el RX TX del bluetooth al pocketquad.

    El RX del puerto satellite seria el mismo que el del bluetooth pero la placa no tiene un pin para conectar el TX😦

    Gracias!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s