Robot Pi sin sombrero

Las hijas para los sistemas de microcontroladores, ya sean escudos, sombreros, plumas, abrigos o lo que sea, son una forma conveniente de agregar sensores y controladores. Bueno, la mayoría de las veces lo son hasta que surgen desafíos al tratar de apilar varios tableros. Luego, descubre que la placa que desea que sea de pila intermedia no tiene títulos apilables, la placa LCD superior bloquea la RF de una placa inferior y se necesitan encabezados adicionales para proporcionar autorización para el cableado de los servicios, motores y entradas. . Luego encuentras algunas tablas para intentar usar los pines para diferentes propósitos. El software se usa cuando las bibliotecas de soporte desean usar el mismo temporizador u otros recursos para diferentes propósitos. Puede convertirse en un error.

La alternativa es desembalar la pila y utilizar placas externas. Adopté este enfoque en 2013 para un concurso de robótica. La computadora de los robots era un sistema ITX que hacía imposible el uso de placas hijas, y los puertos USB fueron mi interfaz elegida. Usé un controlador de servidor y dos controladores de motor Pololu. Todavía están disponibles y los uso para reconstruir, esta vez usando la Raspberry Pi como cerebro. Sin embargo, USB no es la única opción. Una búsqueda rápida encontró tableros en Adafruit, Robotshop y Sparkfun que usan I2C.

Este enfoque tiene desafíos y ventajas. Una pila de tableros secundarios forma un paquete ordenado donde los tableros externos hacen un entretejido de cables. Los tamaños aleatorios pueden dificultar el montaje. Proporcionar energía también puede ser una molestia debido a la ubicación aleatoria de los pines de alimentación. No puede depender de la alimentación USB, especialmente en una Raspberry Pi cuyo USB tiene limitación de energía.

Por otro lado, las placas externas pueden descargar el procesamiento de su procesador principal. Una vez que se envía un pedido, estas tablas tratan todos los detalles, incluidos los requisitos de actualización. Es probable que proporcionen capacidades más allá de las bibliotecas de software del microcontrolador, ya que sus procesadores están dedicados a la tarea.

Yo uso una placa de 18 canales de la familia de placas Pololu Maestro Service Controller que controlan de 6 a 24 servicios por placa individual. Puede que la placa I2C de 16 canales Adafruit sea una alternativa útil. Para el control del motor, recurrí a la familia de controladores de motor simple Pololu usando uno que maneja 18 amperios. Otros manejarán de 7 a 25 amperios. O considere el controlador de motor controlado de la serie Sparkfun. Otra fuente de controladores USB son Phidgets. Experimenté con uno de sus dispositivos espaciales para el robot original. Debería haberlo usado para medir la inclinación porque uno de mis robots rodaba por una colina. ¡Ho!

Control de servicio

La placa actualmente instalada en mi robot es el Mini-Master 18. El Master proporciona control sobre las velocidades de servicio, la aceleración y los límites de movimiento. La posición de inicio se puede configurar para el inicio o cuando se producen errores. Incluso puede crear guiones o configurar secuencias de movimiento para que se reproduzcan de acuerdo con un comando.

En el lado del hardware, el Master también le permite usar canales para entrada o salida digital y algunos canales para entrada analógica. En algunos hay un canal para la salida modulada por ancho de pulso. Un regulador incorporado convierte la entrada de energía del servicio al voltaje requerido por el procesador, simplificando parte del desafío de distribución de energía.

Mi robot anterior usaba el Master para controlar los servicios de giro e inclinación para la posición de la cámara, servicio para levantar muestras del suelo y LED de seguridad. Dos entradas analógicas de los sensores de corriente en los motores ayudaron a evitar el agotamiento durante las cabinas, y cuatro entradas de un transmisor de ranura de llave RF simple proporcionaron control. Este último se utilizó para realizar pruebas. Programaría una secuencia de prueba como lanzar una cámara de 360 ​​° para buscar puntos de referencia o conducir en la plataforma de inicio y soltar la muestra. Al presionar un botón en la barra del teclado, se iniciaría la actividad. Siempre se configuraba un botón como parada de emergencia para detener a un robot furioso. La reconstrucción sigue este patrón con algunas adiciones.

Controlador del motor

Cada uno de los dos controladores simples de motor (SMC) manejaba los tres motores a cada lado del chasis Wild Thumper. El SMC hace más que controlar la velocidad y la dirección del motor. Puede configurar la aceleración, el frenado y si el avance y retroceso funcionan a la misma velocidad o a velocidades diferentes. La junta comprueba una serie de condiciones erróneas para la seguridad. Éstos detienen el motor y prohíben el movimiento hasta que se sueltan. Dichos errores de bloqueo incluyen comunicaciones perdidas, voltaje de entrada bajo o sobrecalentamiento de los controladores.

Una capacidad adicional que encontré extremadamente útil es la capacidad de leer señales de un receptor de comando de radio (RC). Estas señales se pueden utilizar para controlar el motor y, con algunos cables transversales entre dos controladores, proporcionar un accionamiento diferencial. Se utiliza para conducir el robot a una nueva ubicación mediante un transmisor RC. No utilicé las entradas RC directamente. En cambio, leí las entradas RC y emití los comandos de control de mi programa. Esto me permitió controlar la velocidad en los registros de mi programa para la correlación con los otros datos registrados. También utilicé una entrada para controlar el robot en operaciones de control autónomo o RC. También hay dos entradas analógicas que se pueden usar para controlar directamente el motor y se pueden leer mediante comandos.

Comunicaciones en serie

Los puertos USB fueron mi elección para la comunicación, pero también hay un puerto serie de nivel TTL con los pines estándar RX y TX. Este puerto puede ser utilizado por una Raspberry Pi, Arduino o cualquier otro microcontrolador que tenga un puerto TTL serial.

Las tarjetas Maestro que utilizan USB aparecen como dos puertos serie. Uno es el puerto de comando, que se comunica con el procesador Maestro. El otro es un puerto TTL. Este puerto puede servir simplemente como un convertidor de puerto serie USB-TTL para permitir comunicaciones con otras placas, incluso de otro proveedor. Otro uso del puerto TTL es vincular tableros Pololu de cadena. Podría conectar las placas SMC de esta manera y guardar dos puertos USB para otros dispositivos. Estas placas apoyan esto al tener un pin TXIN, que conecta la señal TX de la placa conectada con la TX en la placa.

Ambos controladores admiten varios protocolos de comunicación diferentes. Yo uso el creado por Pololu y está disponible para algunos de sus otros productos. Los detalles del comando difieren entre las tablas, pero la estructura básica del comando es la misma. Lo llaman su protocolo binario, y el formato básico es el siguiente:

0xAA, <device address>, <command>, <optional data>, <crc>

Todos los campos son bytes únicos excepto el campo de datos, que a menudo es de 2 bytes para transmitir datos de 16 bits. Los datos proporcionados son solo uno o dos bytes sin formato adicional. Tenga en cuenta que permiten detectar errores en el mensaje mediante CRC (comprobación de redundancia cíclica). Esto probablemente no sea crítico a través de USB, pero una línea TTL podría recibir ruido de motores, servicios y otros dispositivos. Un error CRC se encuentra un poco en el registro de errores, legible si el comando es crítico.

Escribí mi propio código, por supuesto C ++, para la computadora y lo convertí recientemente a Raspberry Pi. El cambio principal es el código de puerto serie diferente requerido por Linux y Windows. Pololu ahora proporciona una fuente Arduino para el protocolo, lo que facilita el uso de estas placas con esa familia de placas controladoras.

Envoltura

El chasis, Pi y estas placas ahora están instalados en el chasis Wild Thumper junto con un servicio de control de giro e inclinación. El LED de seguridad se enciende cuando hay energía eléctrica y parpadea cuando el robot está controlando activamente el sistema. Una batería LiPo funciona con todos menos el Pi porque necesito configurar un circuito de eliminación de batería para dar cinco voltios. Lo enciendo temporalmente con una batería USB.

Un programa de prueba, compilado desde mi escritorio, mueve el robot hacia adelante, gira a la izquierda en lugar de a la derecha y luego retrocede. El pan / tilt se mueve y el LED parpadea. Originalmente usé una cámara en línea para el procesamiento de la visión, pero cambiaré a la cámara Pi porque es mejor. El lidar Neato discutido en un artículo anterior pronto encontrará un lugar a bordo, junto con un acelerómetro para detectar posibles rollos.

Estoy seguro de que podría hacer eso con las placas hijas de Pi a pesar de los desafíos que mencioné anteriormente. Hay compensaciones en ambos enfoques que deben tenerse en cuenta al trabajar en un proyecto. Pero hay una ventaja final para las placas para exteriores: tienen muchos LED brillantes.

Fotos de productos de Pololu.

  • peleas dice:

    Personalmente, rara vez me encuentro capaz de justificar la prima por los escudos o como quiera que la gente quiera nombrarlos. A menos que el factor de forma, por cualquier motivo, sea absolutamente crítico o sean baratos. Tampoco me parece un caso común: P

    Siempre me sorprende la cantidad de dinero que normalmente puede ahorrar saltándolos siempre que sea posible. Lo cual es especialmente importante si tienes un presupuesto.

  • ThunderSqueak dice:

    Este es el mismo enfoque que utilizo para el robot que estoy construyendo actualmente. En cuanto a los requisitos que tenía, un “sombrero” simplemente no funcionaría como yo quería. Como cerebro central, opté por Pi 3B porque incorporaba tecnología inalámbrica y Bluetooth, lo que liberó esos puertos USB y me permitió no usar un concentrador USB adicional, lo que evitó que el proyecto fuera aún más desordenado.

    • ThunderSqueak dice:

      Olvidé mencionar que el Pi no funciona con RTOS, esto significa que intentar acceder directamente y usar el GPIO para servicios, pasos u otros periféricos puede tener algún comportamiento extraño cuando su sistema operativo principal (a menudo Linux) hace su tarea. Un ejemplo de esto sería un departamento de servicios cuando tuvieran que ocupar un puesto. Solo tiene sentido descargar algunas de las operaciones más críticas en el tiempo en microcontroladores dedicados, que luego pueden interactuar con el “cerebro” central.

      • Caballero oscuro 512 dice:

        No ejecuta RTOS de forma predeterminada, no significa que no pueda ejecutar RTOS en él, creo que hay puertos FreeRTOS para ello.

        • ThunderSqueak dice:

          Sin embargo, es más fácil ejecutar la distracción de Linux (que tiene una gran cantidad de herramientas de programación y soporte), y luego descargar las cosas de RTOS a una MCU dedicada para la tarea, al menos eso es lo que he encontrado hasta ahora. ^^

      • Rud Merriam dice:

        Hay técnicas que pueden ayudar. Consulte https://la-tecnologia.com/2014/04/25/a-tutorial-on-linux-for-real-time-tasks/ y el artículo al que alude.

        • ThunderSqueak dice:

          de acuerdo con este artículo “La mejor solución es utilizar un sistema operativo diseñado para operación en tiempo real o descargar operaciones en tiempo real a un controlador separado”. 🙂

      • Andrés dice:

        No ejecuta RTOS (predeterminado), pero puede descargar servicios de accionamiento y controladores de motor a un periférico integrado en el chip, a saber, el DMA. El DMA puede generar hasta 15 (creo) señales de servicio completamente estables directamente a los pines GPIO, además hay un canal PWM de hardware en la Raspberry Pi (dado que el soporte central está roto debido al reloj compartido con I2S o algo similar eso y el núcleo afirmando no saber eso).

        El DMA se puede usar de manera similar para entradas, como leer una señal PWM o PPM de un controlador RC (pero todavía tiene solo ~ 15 canales para todas sus entradas y salidas). De hecho, ArduPilot, probablemente el firmware principal del controlador del robot de aire y tierra, ya está haciendo todo esto en su HAL para Raspberry Pi (pero también puede usar “sombreros”).

        Nunca pude encontrar una justificación para una placa como la Master o el servicio y los escudos / sombreros analógicos. Incluso si no desea hacer todo esto con el controlador principal, Duino $ 1.50 * Duino Pro Mini con mucho gusto le quitará la carga a su placa Linux y podrá comunicarse con él a través del puerto que elija, I2C, serial, SPI. Si desea un cableado adecuado, use una placa proto para hacer un sombrero completamente pasivo para sujetar todas las cabezas de servicio de 3 pines y la mitad opcional *.

        (Nota: la comunicación I2C es genial, pero está diseñada para comunicación * entre * chip *, no entre módulos. El estándar lo estima para líneas de señal de hasta 10 cm iirc)

        • Rud Merriam dice:

          Buen punto sobre el DMA, es uno de esos aspectos de magia negra de los procesadores que nunca he visto.

          Para mí conseguir un master se da porque es BEDLITS. Siempre hay un intercambio entre usar COTS y realizarlo en nuestra contra para procesar un dispositivo equivalente mientras el proyecto principal se detiene. Por cierto, soy programador, no mecánico o de hardware.

  • MrTrick dice:

    Los controladores maestros pueden ser bastante útiles para la velocidad de los desarrolladores, especialmente para aquellos que recién comienzan. (Control serial de computadora a USB sobre un montón de servicios y algunas E / S básicas, sin programación integrada)

    Una advertencia; los pulsos de salida para controlar los servicios están escalonados, no sincronizados entre sí. Por ejemplo, si tiene servicios rápidos y desea que se muevan tres al mismo tiempo, no hay forma de hacerlo; encontrará que los servicios se mueven en momentos ligeramente diferentes.

    (Si necesita una sincronización muy precisa, es probable que los servicios de RC no funcionen bien, ¡pero a menudo es posible que solo se descubra lo exacto justo antes de la fecha límite!)

América Aguilar
América Aguilar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *