¿Cuál es mejor: construir un dron, un microcontrolador como Arduino, un microordenador como Raspberry Pi u otro?

Definitivamente necesita un microcontrolador, una de las formas en que un microcontrolador es diferente de un sistema informático como el Raspberry Pi es la latencia y el tiempo. El Raspberry Pi ejecuta Linux, que al igual que la mayoría de los sistemas operativos multitarea tiene sondeo / conmutación de tareas (IRQ0) cada 10 ms. La implicación práctica de esto es que si en algún momento el Raspberry Pi necesita hacer algo más que volar el quadcopter (como tareas de servicio a nivel del sistema operativo), su código de control de vuelo se “oscurecerá” durante al menos 10 ms. (Aunque es cierto que puede ajustar el núcleo para reducir el tiempo de sondeo de la tarea).

Normalmente esto está bien, ya que el tiempo de respuesta mecánica del cuadricóptero es más lento que 10 ms, PERO esto se va a atornillar con sus bucles AHRS si no almacena los datos de la IMU, y sus bucles PID si no los compensa.

En términos simples: la Raspberry Pi está ejecutando un sistema operativo, que está haciendo un montón de cosas similares al sistema operativo en segundo plano, como búferes de vaciado y registros del sistema, y ​​cosas por el estilo. Estas cosas suceden periódicamente e interrumpirán su código. Con el software normal, no notas esta interrupción porque está sucediendo a una escala de tiempo mucho más baja de lo que un humano puede ver. Sin embargo, con un quadcopter, hay procesos que no deberían interrumpirse (como la parte que recopila datos de IMU). No tiene mucho control sobre esta interrupción (porque un sistema operativo multitarea está diseñado de esta manera), por lo que la única forma de usar un Raspberry Pi para volar un quadcopter es construir buffers de hardware en el módulo IMU y escribir código para compensar la salida PID que no se actualiza (si no lo hace, puede desestabilizar la nave porque sus ganancias serían incorrectas).

Por otro lado, los microcontroladores ejecutan un RTOS o algún código controlado por interrupciones de bajo nivel que garantiza una operación de baja latencia en las partes críticas del código.

Si necesita la potencia de procesamiento de la Raspberry Pi, lo que debe hacer es tener un microcontrolador que se ocupe de tareas de bajo nivel y baja latencia, como la interfaz con una IMU y ejecutar el PID y los bucles de salida. Luego esclavo el microcontrolador a la Raspberry Pi, y deje el código de navegación y comunicaciones de alto nivel a la Raspberry Pi.

En el pasado, eso es lo que hemos hecho. Un microcontrolador barato maneja IMU, PID y controles de vuelo manuales, y ejecuta un AHRS rudimentario basado en cuaternión con filtrado simple para la estabilización; luego, una computadora ARM quad core de 1 GHz más liviana que ejecuta Linux se ocupa del piloto automático GPS y las comunicaciones, así como un AHRS más potente con EKF. El AHRS del microcontrolador es rápido pero menos preciso y se desplaza con el tiempo, mientras que el AHRS de la computadora es lento (mayor latencia) pero más preciso. Entonces combinamos lo mejor de ambos mundos haciendo que el microcontrolador controle el quadcopter, y la computadora ARM periódicamente le envía correcciones AHRS para mantenerlo recortado y preciso.

Los microcontroladores y las microcomputadoras vienen en 2 sabores principales en este momento, 8 bits y 32 bits. Arduino es de 8 bits, Raspberry Pi es de 32 bits. Existen múltiples aplicaciones de software de código abierto escritas como controladores de vuelo para ambos.

¿La diferencia?

Características disponibles Los procesadores de 8 bits como Arduino están limitados en la memoria más que por la velocidad de cálculo o resolución. puede agregar mucha más funcionalidad a un proyecto de 32 bits como stm32 que a un arduino.

la forma más fácil de ver esto en acción es elegir un par de controladores de vuelo muy similares fabricados por la misma compañía (ReadyToFlyQuads), el Flip2.5 (controlador de vuelo Arduino MultiWii de $ 15 8bit) y el Flip32 (vuelo MultiWii basado en atm32 de $ 32 32bit) controlador). ambos están basados ​​en el mismo software y cálculos, pero la aplicación de 32 bits le permite simplemente instalar el software y configurarlo a través de la GUI. el procesador equivalente de 8 bits requiere que modifique el código antes de cargar el código para satisfacer sus necesidades y ofrece muy poca funcionalidad una vez que se carga el código.

También obtienes muchas más opciones para controlar cualquier cosa, y puedes hacer cambios incluso mientras el dron está en el aire, algo que no puedes hacer con la versión de 8 bits. El procesamiento de 32 bits ofrece más de todo, y está disponible tan barato como 8 bits, o al menos lo suficientemente cerca como para que valga la pena.

Hay muchas otras marcas para elegir, incluido mi favorito el piloto abierto CC3D (controlador de vuelo basado en STM32 de $ 16 32 bits), todos tienen diferentes características y puntos de precio, investigue un poco, encuentre lo que desea que tenga las opciones que desee y consigue uno!

Las placas Arduino son microcontroladores, no computadoras completas. No ejecutan un sistema operativo completo, sino que simplemente ejecutan código escrito. Podemos ejecutar directamente códigos simples con facilidad, y se logra sin sistema operativo.

Esta pequeña placa es realmente disruptiva porque rompe varias barreras que existían en el mundo del hardware. Ilustraré esto con un ejemplo: para desarrollar un producto de hardware (un dron, un termostato inteligente, un teléfono …) uno podría comprar un procesador ARM en una placa y programarlo excepto …

· Ese tablero cuesta mucho dinero

· La documentación es muy compleja y está destinada a profesionales que trabajan en grandes empresas que integran esto en productos de consumo.

· Requiere software y cables patentados para cargar aplicaciones en la placa

Arduino resuelve todos estos problemas. Primero el Arduino es muy barato. Finalmente, la parte realmente importante es que el Arduino está completamente abierto, no solo en términos de software sino también de hardware. Esto significa que cualquiera puede construir un dispositivo compatible con Arduino que se pueda programar como un Arduino o que pueda funcionar con un Arduino.

Gracias a la caída de los precios de la electrónica y al desarrollo de plataformas abiertas como Arduino, algunos dispositivos muy complejos son cada vez más baratos de diseñar. Los drones Quadcopter son uno de los muchos productos que han sido habilitados por la revolución del hardware.

Raspberry se ejecuta en un sistema operativo que a veces hace que el hardware sea más lento y puede perder el control del hardware cuando aumenta la complejidad.

Tengo que disculparme, pero la elección del controlador está estrechamente vinculada a la elección del firmware. Ambos están vinculados a la aplicación o propósito del dron. Arduino y raspberry pi son más aficiones y juntas educativas. No son inmediatamente aptos para drones, deben ser pequeños para adaptarse (factor de forma). Hay drones de código abierto basados ​​en frambuesa cero, pero como dije, educación, diversión y pasatiempo.

Solicitud:

  • Elevación y escaneo de texturas de paisajes. Los requisitos son, por ejemplo, estabilidad, duración de la batería, control remoto fácil, posiblemente transmisión de video en tiempo real.
  • Drones de carrera: pequeños muy poderosos.
  • FPV, vista en primera persona de drones.
  • Monitoreo de drones, sensores, visuales, estabilidad.

La aplicación decide:

  • El tipo de motor.
  • cuantos motores
  • conductores para el motor.
  • batería y duración de la batería.
  • procesamiento de video (ejemplo DJI phantom 4 Myriad 2 VPU).
  • peso, dimensiones.

Muchos factores a considerar.

¡Hola!

Esta es una pregunta muy interesante y después de haberla tratado por algún tiempo, estas son mis conclusiones:
Cuando comparamos estos dos dispositivos, debemos preguntarnos: ¿con qué criterios los estamos comparando? ¿Por ejemplo, la velocidad del reloj? ¿A qué velocidad pueden alternar los pines de E / S? ¿O el comportamiento en tiempo real?
Vamos a llegar a cada uno de estos uno por uno.
Con una velocidad de reloj más alta (1ghz en mi Rpi-3) uno esperaría que Rpi ganara sin problemas, ¿verdad? Bueno, sí gana la “carrera del reloj” contra un simple arduino. ¿Pero eso es todo? ¡No!
¡Recuerda que Rpi ejecuta un Linux completo y eso no es en tiempo real! Ejecuta toneladas de procesos y esos procesos luchan por recursos computacionales todo el tiempo. Digamos que escribió un código python o código C para controlar un servo (como lo haría en el caso de un UAV) basado en la entrada del sensor (IMU). ¿Qué piensas tú que sucederá? También tenga en cuenta que ni siquiera estamos teniendo en cuenta el hecho de que Rpi por sí solo no puede producir una señal PWM limpia y ordenada. Intenté experimentar con ella y descubrí que las señales PWM generadas directamente desde Rpi son muy nerviosas.

Así que, a menos que compre otro módulo para ejecutar su servo, ¡tendrá una desagradable sorpresa!
Ahora digamos en el experimento anterior que intentas seguir con “Linux normal” que puedes encontrar en el sitio web de Raspberry Pi. Rápidamente se dará cuenta de que, aunque está obteniendo lo que quería, pero no en el “momento” en que lo deseaba. Esta situación surge debido a problemas de latencia inherentes a un núcleo Linux normal. Pero digamos que compiló su kernel con la opción CONFIG_PREEMPT, entonces obtendría cifras de latencia en un rango de milisegundos, que es bastante suficiente para la mayoría de las aplicaciones que he visto hasta ahora, incluidos los UAV.
Entonces, aunque Rpi con kernel de Pre-empt no es “difícil en tiempo real”, tiene latencias bastante bajas para la mayoría de las aplicaciones. Supongo que la robótica de Erle, incluso intentó con el parche RT, sin embargo, muchos servicios como Ethernet y redes no funcionaban bien, por lo tanto, tuvieron que abandonar la idea.
Ahora, en caso de que esté desarrollando un sistema incrustado muy crítico en el que se requieren latencias del orden de menos de milisegundos, entonces deberá ir a …
(a) Sistema de coprocesador en el que el procesador principal ejecuta Linux y un coprocesador hace las cosas en tiempo real (también conocido como PRU), por ejemplo BBB (beagle bone black)
(b) RTOS que se ejecuta en un microcontrolador como nuttx que se ejecuta en PXhawk, etc.

Para concluir mi comentario, me gustaría señalar que no es realmente fácil descartar uno en favor de otro. Rpi tiene sus propias ventajas en términos de mayor rendimiento, mientras que Arduino (que es una placa de metal desnudo) tiene la ventaja de ejecutar un único código que se muestra en él. En una aplicación típica de UAV en la que desea hacer mucho más que simplemente controlar los servos basados ​​en la retroalimentación de la IMU, es posible que arduino no sea suficiente. Esa es la razón por la que tendría que optar por (a) o (b) mencionados anteriormente.
Personalmente, uso raspberry pi y un escudo de piloto automático desarrollado por erle robotics (PXFmini) y un kernel preventivo. Esto es suficiente para mí, pero podría no ser suficiente en muchas aplicaciones donde se requiere tiempo real difícil.

Tampoco tienen suficientes capacidades de procesamiento. El procesamiento de imágenes no es en tiempo real. Puede usar una MCU para el control y el proceso con una computadora mediante algunos transceptores RF como el enlace COM. Recomendaría los transceptores NRF24L01, con un amplificador de potencia para ampliar el alcance.

De lo contrario, se puede obtener una cierta cantidad de procesamiento en tiempo real de un Udoo Quad, incluso un teléfono Android pero no un Beaglebone o un Raspi.

Si tiene suficiente efectivo, vaya a la serie Toradex Colibri. Viene con CPU NVIDIA, excelente para el procesamiento de imágenes.

Para construir algo como drones que requieren un tiempo de respuesta más rápido, es mejor ir con controladores en lugar de un procesador.
si es necesario, se pueden usar juntos donde el controlador cumple el propósito principal de controlar el vuelo y el procesador proporciona una ruta calculada o definida.

Se podría usar Arduino, pero si quisieras tener autonivelación, deberías programar en un MPU6050, ¡no para los débiles de corazón!
Parque infantil Arduino – MPU-6050

Una Raspberry Pi es básicamente una computadora. Espero que haya programas que ya se han escrito para que haga el trabajo, pero nuevamente no es lo ideal.

Mi consejo es ir y comprar una placa de control de vuelo dedicada como la KK1.2.
Revisión del controlador multicopter KK 2.0 (KK2)

Es económico y está bien diseñado para hacer bien una cosa y es controlar un multirotor. Tiene una pantalla de autonivelación y de a bordo, por lo que no necesita estar conectado a una computadora para programar.
Funciona fuera de la caja. Deberá ajustarse para adaptarse a cualquier configuración multirotor que tenga. La configuración varía un poco, pero todo es muy fácil.
Compre el tablero, conecte todo y listo. Aparte de cincuenta o sesenta accidentes, todo está listo!

Necesitas AMBOS.

Un controlador económico de bajo nivel basado en Arducopter para el control del motor, incluidos los sensores de equilibrio

una computadora completa miente raspberry pi o incluso más rápido como odroid, para hacer planes de misión de alto nivel, estrategia para evitar obstáculos, reconocimiento de objetos basado en cámara, grabación / registro. Le dará al microcontrolador de bajo nivel solo el comando como velocidad y dirección

Ninguno. Tendrá que pasar por contorsiones para el Pi para el rendimiento necesario en tiempo real. El Arduino es demasiado pequeño y demasiado lento. No hay suficiente margen de rendimiento. En cualquier caso, terminas teniendo que desviar masa innecesaria.

Si se hace esto desde cero, el Beagle Bone Black es una plataforma de referencia mucho mejor. La TI Sitara AM3358 es buena para esta aplicación:

  • El núcleo ARM es rápido. Es mucho más rápido (y mucho más accesible) que el BCM2835 en el Pi, y un universo diferente de más rápido que el AVR. Ejecute Linux en esto. El manejo suave en tiempo real no es un problema. El acelerador vectorial de punto flotante Neon también puede hacer posible algunas cosas sofisticadas.
  • Los dos procesadores PRU RISC están diseñados específicamente para el control en tiempo real. Úselos para ejecutar los bucles de vuelo de la plataforma y el hardware. El chip también tiene algunos controladores PWM dedicados para que pueda manejar servos si es necesario.
  • El SoC tiene un controlador LCD y muchas E / S digitales. Conecte un panel desmontable para una experiencia de usuario de configuración de campo mucho más agradable.

Aquí hay un kit de robot basado en Arduino, que usa dos Arduinos para el control:

Arduino – Robot

y aquí hay una placa que proporciona control de motor para una Raspberry Pi

Gertbot está aquí!

y aquí hay un tercer proyecto que los usa a ambos:

Raspberry Pi: Android Raspberry Pi controlado…

Yo diría que tomar un pixhawk (por 3DR) es de código abierto y está bien documentado.
Si está buscando una computadora complementaria para otras tareas (como visión artificial), puede usar pi, ODROID-U3 o BeagleBoneBlack. o mira este – Percepto – visión por computadora para drones

Probablemente usaría una MCU más robusta con un RTOS. Preferiblemente una MCU con algunas instrucciones similares a DSP y una unidad de coma flotante como un Cortex M4 o un ARM más potente.

El Atmega328 en un arduino es un MCU de gama muy baja, y volar un dron es una operación matemáticamente intensa, por lo que no es una gran opción, incluso para el bucle interno.

Si desea una autonomía compleja o visión por computadora, entonces esclavo de la MCU a una computadora a gran escala que ejecute un bucle externo más lento y con menos tiempo crítico. Beaglebone black o algunas de las otras soluciones basadas en ARM que la gente sugiere tener sentido. Esfuércese por no tener este procesador en el ciclo interno de maniobras, ya que puede necesitar ejecutar algunos algoritmos de duración no fija, y como beneficio adicional, podría ejecutar Linux normal.

Si solo se está controlando manualmente, probablemente la MCU sea suficiente.

Si es una comparación entre un Arduino y un Pi, el Pi gana.

He aquí por qué: los arduinos son fácilmente programables. Pero hay un límite de lo que puedes lograr con él dadas las restricciones que se aplicarían en un sistema similar a un dron. Necesita una potencia de procesamiento significativamente mayor si planea expandirlo a algo más que un truco. Un Raspberry Pi (o un BeagleBone) le permitiría hacer muchas más cosas, por ejemplo, escribir un controlador de alto nivel.

Podría estar repitiendo las respuestas, pero quería explicar un poco más en detalle lo que estoy tratando de hacer.

Estoy usando un Beaglebone Black como procesador principal. Como controlador de vuelo, he usado la placa KK Mini que se encarga de la autonivelación y todos los demás cálculos para mantener un vuelo estable. Todo lo que tiene que dar son señales de control al controlador de vuelo. Tiene dos opciones para esto: PWM o PPM.

Si continúa con PPM, puede enviar una señal de control para controlar el alerón, el elevador, el timón y el acelerador.

Si continúa con PWM, como decidí hacer por ahora, ya que me resulta más fácil, tiene que dar cuatro señales PWM separadas, una para cada (acelerador, elevador, timón y alerón)

La frecuencia debe ser de 300 Hz y luego puede variar el ciclo de trabajo hasta obtener el rango completo, que para el KK Mini es de -100 a +100.

No he usado una Rasberry Pi antes, pero quería hacerle saber lo que le espera en caso de que decida seguir adelante con Beaglebone Black.

Voy a programar el Beaglebone Black de forma inalámbrica usando un dongle WiFi conectado al Beaglebone Black y conectaré algunos otros sensores como ultrasonidos (para distancia) e IR Tx y Rx para la comunicación local entre los cuadricópteros.

¡Espero que esto ayude!

Puede usar cualquiera de ellos, pero necesita comprender algunos conceptos básicos que pueden serle útiles para elegir uno.
1.Micro ‘controlador’: se prefiere cuando necesitamos ‘controlar’ múltiples dispositivos de E / S simultáneamente de manera efectiva.
2.Micro’procesador ‘: se prefiere cuando necesitamos potencia de’ procesamiento ‘sin procesar para procesar múltiples / muchos datos de sensores que un microcontrolador podría fallar.

El microcontrolador es suficiente para construir un robot simple como un simple dron donde se requiere un procesamiento muy finito y se debe controlar una gran cantidad de dispositivos de E / S.
Mientras que los robots avanzados que podrían requerir procesar una gran cantidad de datos como el que tiene cámaras para procesar imágenes (Procesamiento de imágenes o Visión por computadora) requieren microprocesadores.
Sin embargo, todos los robots avanzados utilizan microprocesadores para procesar datos y microcontroladores para controlar los dispositivos de E / S.

Sí, Arduino tiene bastante poca potencia. Puede usarlo para algunos robots, pero no tiene suficiente poder para hacer cosas complejas que pueden requerir reconocimiento visual, etc. Sin embargo, es un gran lugar para comenzar.

Para eso, querrás avanzar hacia algo como la plataforma Jetson de nvidia.

Estoy de acuerdo con el usuario de Quora , Arduino es de bajo costo y puede hacer con algunos robots, circuitos de bricolaje y kits educativos http://www.elecfreaks.com/estore/arduino-starter-kit-absolute-beginner.html , pero no No tiene suficiente potencia para lidiar con programas complejos si desea un dron estable y de alta calidad.

Raspberry Pi es como una computadora con capacidades más potentes. Mi equipo usa STM32 para desarrollar un mini dron con cámara, el algoritmo es muy importante.

Si está comenzando, comience con el Arduino y luego avance hacia el hueso beagle negro.

Proyectos como Pixhawk fire y Erle han utilizado con éxito ArduPilot para volar drones usando solo Linux. Antes de esto, la gente usaba los SBC como un complemento a bordo para hacer cosas como el procesamiento de imágenes de los UAV internos.
Mire también el Proyecto Navio.
Una vez más, todo esto no es para los débiles, ya que todavía es beta a partir de septiembre de 2014.

Si necesita hacer esta pregunta, le sugiero que compre un controlador de vuelo / piloto automático listo para volar.