Python + Raspberry Pi + Pixhawk y quadrocopter. O como no hacer robots

Hola Habr!

Mi nombre es Aleksey, durante 7 años he sido un desarrollador líder de soluciones de Smart TV en una gran empresa de desarrollo personalizado de Izhevsk. Todos los años tenemos un concurso de decoraciones de Año Nuevo, y cada vez que no decoramos nada, cortamos todo tipo de cosas tecnológicas. Esta vez cruzaron el dron y la aplicación Smart TV. Y lo que resultó de eso, lea a continuación.

La idea era bastante factible. Querían hacer un quadrocopter en forma de trineo de Santa Claus, que entregaría regalos para los empleados a la oficina al ritmo de la música. Al mismo tiempo, tuvo que navegar en el espacio con la ayuda del análisis ArUco-tags, interactuar con aplicaciones de TV ("soplar" el humo de las tuberías con tornillos de trabajo, agotar a los animales para encontrarse / ver desde el quadrocopter).

Y por los tres meses. Por supuesto, no tuvimos tiempo.

Aunque en diferentes momentos hasta siete personas trabajaron en el proyecto, el resultado estuvo lejos de ser ideal. En general, solo aprendimos cómo lanzar un helicóptero y escribimos aplicaciones para televisores. Configure la interacción del quadrocopter con televisores. Pero lo primero es lo primero.



No recuerdo en cuya cabeza enferma (ciertamente no en la mía, pero esto no es exacto) surgió la idea de lanzar un bombardero quadrocopter en la oficina. La tarea es nueva y no es fácil, pero no encontramos nada más allá de nuestra fuerza en ella. Sí, hurgamos en Internet con el objetivo de encontrar una biblioteca para controlar el controlador del helicóptero. Sí, era necesario transferir la imagen de la transmisión desde la cámara web al cliente y analizarla en el servidor. Sí, era necesario hacer una puerta de bomba. Sí, generalmente debe escribir un shell que recopile todo esto en sí mismo. ¿Y qué? Ya hemos hecho todo esto (excepto para controlar el controlador). Por lo tanto, el proyecto recibió luz verde.

Dispositivo


Cada error evolutivo de un helicóptero persistente zumbando sobre su cabeza, en principio, consiste en un conjunto de mecanismos y esquemas. Esto es:

  1. controlador
  2. motores de hélice
  3. bateria
  4. controlador de velocidad (ESC),
  5. antena de telemetría
  6. Módulo GPS y brújula,
  7. La camara.

Los dos últimos puntos son opcionales. El diagrama del circuito del amigo del rotorcraft se puede ver aquí:



Este bien se pone en el caso. Sin embargo, el cuerpo decidió hacer el suyo. Porque:

  • a ti mismo con un bigote
  • necesitaba un casco exactamente en forma de trineo,
  • ya era indecentemente caro.

Controlador




La parte más importante de cualquier larva de helicóptero. Tiene acelerómetros en tres ejes, firmware de software, entradas para instalar equipos periféricos y conectar motores, y una salida para control. Sin ella, ningún dron volará en el aire. La pieza es tan importante que está montada en una plataforma especial de absorción de impactos para reducir los efectos de la vibración y las cargas de impacto. Algo como esto:



Elegimos un controlador relativamente importante. "Relativamente", porque luego miré más de cerca a los monstruos que se ofrecen para tíos serios ... Sin embargo, el controlador tiene un GPS, brújula, piloto automático, todo tipo de otros buenos bollos, admite hasta 8 motores.

Estrictamente hablando, tales controladores están destinados no solo a una fraternidad en alza vertical. Se pueden instalar en cualquier plataforma móvil, desde helicópteros, aviones, hasta automóviles y barcos. Un montón de casos de uso. Pero estábamos algo distraídos.

Motores




Hay muchos de estos amigos. Redondas, cuadradas, curvas, oblicuas, grandes, pequeñas, caras y baratas. La principal diferencia: consumo máximo de energía, intensidad de corriente y número de revoluciones por segundo. Idealmente, el trineo debería haber sido capaz de levantar una lata de cerveza (0,5 kg). Habiendo estimado el peso total de la estructura, calculamos la fuerza de elevación requerida aproximada y tomamos motores potentes de alta calidad. Como resultó más tarde, nunca corrieron a plena capacidad. Pero mejor es más que menos ...

Batería




La única fuente de energía a través de la cual un kamikaze potencial permanecerá en el aire. Durante la operación, se descubrieron varios puntos interesantes.

Primero, el zumbido de la tecnología consume energía como gratuita. La lata se descarga en este momento y tarda mucho en cargarse.

En segundo lugar, no solo come, sino que también sabe cómo dejar una carga "en reserva". La idea es buena, porque cuando se alcanza el umbral de voltaje, el automóvil interrumpe el vuelo y realiza un aterrizaje suave, pero esto se expresa en el hecho de que la lata puede "aterrizar" aún más rápido.

Controlador de velocidad




Un chip pequeño, sin el cual los motores simplemente no funcionarán. Diseñado para la distribución de voltaje de los bancos al motor. Una cosa muy importante, generalmente viene con un motor comprado.

Antena de telemetría


"

En esencia, el equipo periférico, sin embargo, sin él, no será posible controlar la rama sin salida del desarrollo de objetos voladores. Además, la telemetría se usa no solo para el control, sino también para transmitir la señal de video desde la cámara, por lo que generalmente hay dos antenas. Por cierto, la telemetría se lleva a cabo enviando y transmitiendo señales a una lista de canales. También se pueden controlar mediante programación, pero esto no se recomienda categóricamente, porque así es como realmente abandonamos el piloto automático con cable y escribimos el nuestro. En la rodilla Y sustancias y palos. En la última noche Como amamos

Módulo GPS




La principal y casi la única forma de posicionar un destructor de nervios voladores en el espacio. Por lo general, el módulo GPS también contiene una brújula. Para evitar que afecte a algo durante el vuelo, el módulo se coloca en una barra especial para que nada lo influya. Lo usamos solo por el bien de la brújula, porque en la habitación el GPS no es muy bueno para atrapar. Soporta otros sistemas de posicionamiento.

Al igual que cualquier GPS que se respete, puede cometer errores. El error varía de varios metros a varios continentes. Pero en general, un dispositivo necesario en la calle para misiones a distancia.

Cámara




Eso por lo que todo está hecho. La tormenta de los aeropuertos ingleses no solo puede chatear bajo una cámara. El controlador puede estabilizarse, controlarlo de forma remota y proporcionar configuraciones y herramientas muy detalladas para su gestión. Pero no lo usamos todo. Otra vez

Gestión


Todas las embarcaciones de ingeniería sapiens que utilizan controladores están controladas esencialmente por un programa: Mission Planer. Se parece a esto:



Lea más sobre esto aquí .

Presenta la más amplia gama de características y configuraciones. Hay una planificación de tareas de vuelo, geo-posicionamiento, control manual, varios ajustes y calibración de equipos.

Regla número 1: usa solo lo que necesitas


Sí, el programa es necesario y útil. En principio Pero no para nuestra tarea, porque el divisor de aire debe controlarse mediante programación, y arruinamos mucho tiempo para lidiar con este programador.

El control manual en sí se puede hacer lo que tu corazón desee. Hay ajustes para el control remoto, para el joystick. Puede mostrar el control con el mouse y el teclado. El requisito principal es calibrar el panel de control. Bueno, gestiona manualmente. Como somos desarrolladores perezosos, no queríamos administrarlos manualmente. Quería que el helicóptero volara solo.

Control del programa


En Internet, encontraron solo esta biblioteca, diseñada para el control programático de la semejanza de los aviones. Y está escrito (redoble de tambor) en python. En general, para las versiones 2.x, pero también en Python 3.5, funcionó de manera bastante estable. La biblioteca tiene una rica funcionalidad y una documentación relativamente buena. Pero antes de comenzar a escribir su código de drone de megacontrol, primero debe ... Sí, debe conectarse al controlador.

El microordenador Raspberry Pi se utilizó como componente de software de control, en el que se implementó el servidor web en el marco aiohttp.

El esquema y las instrucciones para conectar las "frambuesas" y el controlador se pueden encontrar aquí .

Esquemáticamente, se ve así:



El método de conexión es este. El controlador y las frambuesas están conectados por cables de acuerdo con el esquema especificado. De esta manera, se emula la señal de radio enviada y recibida por el controlador. En las frambuesas, debe ejecutar un servidor proxy, que se aferrará al controlador y transferirá datos desde él. La conexión se puede realizar por telemetría o por USB. Usan diferentes puertos COM. La figura muestra el método a través de la telemetría.

Regla número 2: documentación incompleta. A menudo no escribes las cosas más obvias.


Por ejemplo, para conectarse desde python al controlador, debe especificar la dirección y el puerto: connectionString = '127.0.0.1:14540 ′

Pero resultó que esta dirección y puerto también deben especificarse en la línea de inicio del servidor proxy. Aquí:

mavproxy.py —master=/dev/ttyAMA0 —baudrate 921600 —aircraft MyCopter 

Sí, esto es obvio, pero nunca obvio. Y pasamos mucho tiempo para resolverlo.

Sin embargo, incluso después de iniciar el proxy con la línea correcta y después de conectarse con éxito al avión no tripulado python, el milagro de la técnica hostil no quiso comenzar. Es decir, recibimos datos del helicóptero, los vemos, pero la futura amenaza celestial de la humanidad se niega a ejecutar comandos. En el último momento, resultó que los datos para conectarse al dron necesitaban mucho más. Condicionalmente, debería comenzar a enviar datos a la telemetría conectada, de lo contrario, simplemente no lo conectó y se quedó satisfecho.

De ahí la regla número 3: use USB


Sí, la documentación era mucho menor, pero la estabilidad de la conexión definitivamente sería mayor. Porque no tendría que usar alfileres de frambuesa.

Vuelo de prueba




Y de repente resultó que:

  1. el helicóptero no vuela suavemente
  2. errores de su telemetría ± metro o más,
  3. Para un vuelo, tareas como: subir 10-20 metros, volar 100 metros hacia el norte, etc.

Permítanme recordarles que este diseño, creado bajo la influencia de helicópteros de la película "Avatar", se lanzó dentro de las paredes de la oficina, donde hay muchos equipos de oficina, lámparas, ventilación y decoración colgando del techo. Bueno, también hay empleados. En general, rápidamente se hizo evidente que un vuelo interior serio estaría lleno de 160 cabezas cortadas.

Regla número 4: usar condiciones de prueba normales


Si un tanque volador tiene un tamaño de 50 por 60 cm, entonces su presencia en el aire en un espacio cerrado inevitablemente lo dañará o dañará a quienes estén cerca de él. Un área de prueba ideal sería una sala del tamaño de un gimnasio.

Visión por computadora


Un portal separado al infierno era la tarea de la visión por computadora. La idea es leer las etiquetas ArUco, cada una de las cuales tiene una posición registrada en el plano de la sala, y en relación con la cual el helicóptero determina su posición en el espacio, así como la posición relativa al punto actual de la ruta.

Ejemplo de etiqueta:



Para la implementación, se utilizó la biblioteca openCV . Se utiliza para reconocer en general todo lo que es, en particular: caras de personas, objetos, números de automóviles y de nuestras marcas. Instalar la biblioteca en el sistema operativo de frambuesa, Rasbian, se convirtió en una pesadilla, con la que cuatro personas lucharon alternativamente. Sin embargo, lo resolvimos con éxito, y ahora la máquina ha "aprendido" a reconocer las marcas en la transmisión de video desde la cámara web. Pero nuevamente, no hubo suficiente tiempo para configurar todo. Por ejemplo, de dos o más etiquetas, la biblioteca devolvió los números reconocidos de todas las etiquetas y los datos solo para una. Por qué Hay un gran misterio ...

La regla es importante: asigne suficiente tiempo para refinar la solución


Otros sentidos


Para que el mutante de las alas de Ícaro no se adhiera a los obstáculos que surgen repentinamente, querían usar sensores de distancia. Se suponía que debían estar en todos los lados del automóvil y tenían que indicar la aproximación de un obstáculo, como resultado de lo cual el helicóptero debería detenerse, dar un "paso al costado" y continuar avanzando a lo largo de la ruta.

No tuvimos tiempo para hacer esta funcionalidad en absoluto.

Rutas


Hablamos mucho sobre las rutas de vuelo del helicóptero. ¿Y qué tipo de animales son? Diré de inmediato que esta funcionalidad fue implementada por el primero y en su totalidad, pero ... no fue útil.

Las rutas de movimiento son un gráfico conectado con vértices, cada uno de los cuales tiene su coordenada tridimensional en el espacio de la habitación. En consecuencia, el helicóptero debe seguir desde el punto de partida hasta el punto final, en el último llevar a cabo la misión de vuelo. Sigue moviéndose del vértice actual al siguiente. Dado que para cada vértice conocemos sus coordenadas, y en el helicóptero sabemos su ubicación (brújula) y posición (marcas), entonces averiguar dónde volar es una cuestión puramente técnica. La tarea de encontrar el camino entre el punto inicial y el final se resuelve mediante una función recursiva. Las rutas, los bordes y los picos se almacenan en una base de datos implementada en frambuesas.

La última regla: haz solo lo que necesites implementar


Pila tecnológica


Copter: Raspberry Pi , Rasbian , OpenCV , Python 3.5 , aiohttp , DroneKit , RPi.GPIO , SQLite .

Servidor con dinámica para TV: node.js , Express , socket.io .

Aplicaciones de TV: JavaScript ES6 , webpack 2 , Canvas .

Repositorio con código de helicóptero aquí . Para las estrellas: ventajas en el karma.

Un par de palabras para aclarar los términos (le pido que considere que cualquier calificación es subjetiva).

  • Raspberry Pi. Microordenador completo con pines y salidas disponibles para una cámara especial y pantalla táctil. Es allí donde se encuentra el código de control, el servidor web y la biblioteca openCV. De hecho, un helicóptero es un servidor volador.
  • Raspbian Sistema operativo Linux para frambuesas. Hay varios de ellos y, en general, puede poner cualquiera, pero es mejor poner unos diseñados especialmente, de lo contrario puede haber problemas con la interacción con el equipo informático, con los mismos pines, por ejemplo. Incluso hay una versión adaptada de Windows 10.
  • OpenCV. Biblioteca para reconocer elementos en una secuencia de video. También sabe cómo transmitir la transmisión de video, que se utiliza en el proyecto para emitir imágenes al cliente. (sí, el helicóptero tiene su propio cliente web)
  • Python 3.5. Pitón 3.5. No 2. *.
  • Aiohttp. Marco de servidor web asíncrono escrito en python. Por alguna razón, le gustaba más Django . Pero hay una opción.
  • DroneKit. Biblioteca para conectarse al controlador del helicóptero desde el programa. Funcionalidad muy rica, junto con documentación relativamente buena. En ausencia de análogos, una herramienta brillante.
  • RPi.GPIO. Biblioteca de Python para interactuar con pines de frambuesa. Le permite activar y desactivar los pines, escuchar sus valores. No se pueden pasar valores distintos de 0 o 1-ts. O no lo encontré.
  • SQLite DBMS + DB + leña combinada en un solo archivo. Ideal para proyectos de capacitación y no comerciales, si no necesita implementar algo muy cargado. Conveniente para hacer cambios.
  • Node.js. JavaScript del lado del servidor
  • Expreso Marco de servidor web escrito en node.js. Muy confortable y minimalista.
  • Socket.io. Biblioteca de servidor y cliente para implementar el protocolo webSocket. La principal ventaja es la estabilidad del trabajo y la amplia funcionalidad proporcionada.

Conclusiones


En la formulación original, la tarea es factible, aunque requiere mucho más tiempo y esfuerzo. Debido al hecho de que los métodos de control del piloto automático y del helicóptero están ligeramente menos que totalmente vinculados al GPS, deben abandonarse en la dirección de los comandos directos a los canales de control. Esto implica la necesidad de escribir su piloto automático, que es la tarea que se está resolviendo. Y luego, para probar, probar y probar.

Personalmente, estaba interesado. Y de todos modos haré el bombardero automático de regalos. Y a todos los interesados, tal vez, me iré

La única regla es: ¡establece metas altas y difíciles y ve hacia ellas!


¡Buena suerte a todos!

Source: https://habr.com/ru/post/438496/


All Articles