Comunicación inalámbrica con robot

2

Estoy haciendo un robot simple, y estoy usando un transmisor y receptor de RF relativamente barato para enviar comandos a mi robot. Esencialmente, el extremo del transmisor enviaría datos desde un AVR MCU a través de su UART al transmisor de RF, y una configuración similar en el robot recogería los datos.

Por lo que estoy confundido acerca de cómo funciona todo este proceso. Quiero decir, supongo que tengo cuatro motores en mi robot que todos deben controlarse individualmente y al mismo tiempo. ¿Cómo lograría esto? ¿Codificaría mi información en un byte (por ejemplo, 1111000) donde los primeros cuatro bits representan la posición de encendido o apagado de los cuatro motores, y el receptor descodificaría esto y realizaría la tarea necesaria? ¿O hay otra forma mejor de hacer esto?

Esto lleva a mi siguiente pregunta relacionada con esto. Supongamos que se usa el método que acabo de describir, entonces, ¿cómo está programado normalmente el robot para manejar los comandos? Digamos que recibe el paquete 11110000 y enciende los cuatro motores. ¿Acabo de dejar que el robot mantenga los motores encendidos hasta que se reciba un nuevo paquete de información? Esencialmente, si quiero una comunicación continua con mi robot (una forma está bien en este caso), ¿cómo lo haría si se demora cierto tiempo entre cada señal que se envía y procesa antes de que llegue la siguiente? ¿en? Tal vez el tiempo que demora el envío, el procesamiento y la ejecución de la señal sea tan pequeño como para que el impacto sea imperceptible.

EDITAR: Aquí hay un enlace a el RF Tx / Rx que compré.

    
pregunta capcom

2 respuestas

2

Un desafío al usar esos tipos de módulos de RF es que los receptores pueden recibir una gran cantidad de ruido aleatorio entre las transmisiones. También les gusta que la señal transmitida sea DC balanceada, largas cadenas de ceros y unos pueden causar distorsión en la salida del segmentador de datos en el receptor.

La forma habitual de lidiar con el ruido aleatorio entre transmisiones es introducir un preámbulo para que el receptor sepa que un paquete válido está en camino y sincronizar el UART listo. Mantener el equilibrio de DC requiere usar un esquema de codificación que mantenga el número de 1 y 0 bits en cada byte lo más cerca posible para igualar.

He usado la siguiente nota de aplicación de Radiotronix que incluye un ejemplo de código fuente en el pasado para implementar un sistema que funcionó bien usando módulos similares a los que estás usando. El único cambio que tuve que hacer fue introducir una demora antes de transmitir y aumentar la longitud del preámbulo, aunque eso se requería principalmente porque estaba apagando el transmisor entre las transmisiones, por lo que es posible que no necesite el mismo.

Nota de aplicación de Radiotronix AN-401

Una vez que haya ordenado lo básico, tendrá que considerar qué hacer cuando se pierde una transmisión, recomendaría enviar los datos varias veces y luego tener un tiempo de espera que detendrá al robot después de un tiempo predeterminado. Es posible que también desee considerar el uso de algunos comandos relativamente largos (por ejemplo, 4 bytes) que son esencialmente aleatorios (es decir, no use 1,2,3) para poder determinar la diferencia entre un comando válido y un error de datos.

Probablemente comenzaría con una velocidad en baudios de 2400bps para esos módulos. El uso del esquema anterior dará un tiempo de transmisión de alrededor de 40 ms, por lo que si transmite cada comando dos veces, la latencia a menos de 100 ms debería ser realista.

    
respondido por el PeterJ
1

Si sus comandos son pocos en número, puede usar un paquete binario simple como su propuesta. Sin embargo, una vez que sus comandos superan el tamaño de un byte, si existe alguna posibilidad de falta de confiabilidad en el canal, se enfrenta al problema del encuadre, es decir, determinar qué byte cae en un comando de varios bytes. Hay soluciones comunes para eso, todas ellas un poco poco elegantes (códigos ilegales, relleno de bits, etc.), aunque la mayoría son de uso común.

Dado que, otra posibilidad que vale la pena considerar (si tiene el ancho de banda) son los comandos de texto ASCII legibles, con un terminador como una línea nueva. Por supuesto, esto es un desperdicio de bits, pero tiene dos ventajas: primero, puede abrir un terminal y escribir comandos al robot mientras prueba o experimenta (también puede hacer que proporcione respuestas de estado legibles). En segundo lugar, el carácter de nueva línea de terminación delimita de forma fácil y limpia los mensajes.

En cuanto a su pregunta sobre cómo hacer que responda, puede hacer que continúe haciendo lo último que se le ha pedido, pero otra posibilidad que vale la pena considerar es que se detenga automáticamente después de unos segundos de no comunicarse a través del canal o después de alguna indicación de pérdida de señal del propio módem de radio.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas