Hecho en casa máquina voladora autónoma desde el teléfono inteligente Android




Diversión con aviones autónoma - es, por supuesto, divertirse, sino para crear su propia cuenta más divertido! Este artículo está escrito para aquellos que quieren desarrollar su propio helicóptero intelectual y contiene una serie de instrucciones sencillas sobre cómo lograr resultados con el uso de un smartphone con Android, OpenCV, C ++ y Java. Bueno, si usted puede dar los primeros pasos y el deseo de mejorar aún más su administración - al final del post, usted encontrará enlaces útiles y algunos elementos de reflexión
.

autónoma e inteligente? H4> Para helicóptero podía volar por su cuenta, se deben incluir todos los sensores necesarios, suficiente poder de cómputo y comunicaciones. Al igual, no tanto, pero casi todos los modelos disponibles en el mercado no lo hacen. Hay, por ejemplo, el modelo de movimiento determinación de sensores situados en las premisas. Otra opción - control a través de GPS. Receptor GPS es barato y fácil de usar, pero tiene largas demoras en la disponibilidad de datos y no es lo suficientemente precisa. Todo esto no nos va a hacer.
Para llevar el título de "inteligente" el helicóptero debe ser capaz de percibir y analizar la realidad circundante. Esto requiere no sólo un poderoso procesador, batería de gran capacidad, la calidad de la cámara y un conjunto suficiente de sensores y dispositivos de comunicación rápidos. Y, por supuesto, todo el sistema debe estar bien gestionado y fácil de programar. Así llegamos a la conclusión: No aplicar un smartphone basado helicóptero think tank? El uso preferente del dispositivo basado en Android, ya que bajo este sistema operativo son las herramientas de desarrollo y componentes de software, como los primitivos Intel Integrated Performance (Intel IPP) o OpenCV. Moderno teléfono inteligente cuenta con todos los componentes de hardware necesarios, tan completamente reinventar la rueda no es necesario.

Control de Motor h4> Por lo tanto, se elige el centro de control, ahora debemos conectarlo al motor. Elegimos Pololu Maestro servo controlador costó alrededor de $ 5, se conecta a través de USB y además tiene una interfaz Bluetooth. Con la ayuda de esta tarjeta va a ser controlado por un servo accionamientos estándar. El uso de Pololu Maestro servo controlador y el smartphone es relativamente fácil de alterar drone en independiente.





Con unas pocas líneas de código y USB Android estándar significa que el control de los servomotores y por lo tanto el helicóptero movimiento. A sólo unas pocas líneas de código - y obtenemos acceso al GPS, la cámara y los datos de transferencia a través de la red
. Llame controlTransfer de UsbDeviceConnection:

 & lt; code class = & quot; java & quot; & gt; android.hardware.usb.UsbDeviceConnection importación; // ... Conexión UsbDeviceConnection privada; // ... Connection.controlTransfer (0x40, el comando, el valor, el canal, null, 0, 5000); & Lt; / código de & gt;  pre> 
 El controlador le permite controlar los servomotores, el establecimiento de la posición de destino, velocidad y aceleración - todo lo que necesitas para un movimiento suave. El comando argumento puede tomar uno de tres valores:
 & lt; code class = & quot; java & quot; & gt; public static int USB_SET_POSITION final = 0x85; public static int USB_SET_SPEED final = 0x87; public static int USB_SET_ACCELERATION final = 0x89; & Lt; / código de & gt;  pre> Seleccione los valores apropiados y pasarlas al servomotor deseado, utilizando el canal de argumento. Enlace con el código fuente completo y acceso a la configuración del USB el manifiesto de aplicación, ver el final del post. 

Características quadrocopter h4> Hasta ahora, todo bien. Los componentes de hardware están conectados entre sí sin problemas, la programación es fácil, ya que todos los medios implementados Android. Sin embargo, hay una característica asociada con la quadrocopter construcción. A diferencia de los modelos más simples, como un coche o un avión, quadrocopter debe monitorear constantemente su estabilidad. Es por eso que es un componente necesario del módulo de estabilización. Por supuesto, el estabilizador se puede hacer mediante programación escribir un montón de código en C ++ o Java. Pero es mucho más fácil comprar por unos pocos dólares un estabilizador de la tarjeta se conecta directamente a la Pololu y control de cuatro unidad servo drive. Todo lo demás se puede hacer con comandos simples como ± altitud, velocidad ± /, ± ± inclinación y dirección.
Si crea una nota quadrocopter: esta tarjeta es grande para hacer su vida más fácil. Todo lo que necesitas - celebrar su calibración inicial y luego olvidarse de él
.

Poniendo todo junto h4> Así que, como resultado de la primera fase de la construcción de un quadrocopter autónoma, tenemos lo siguiente cadena de hardware:
Smartphone & lt; & gt; micro adaptador USB-USB & lt; & gt; Cable USB-mini USB & lt; & gt; Pololu Maestro tarjeta de & lt; & gt; 4 Cable JR & lt; & gt; mapa de estabilización & lt; & gt; cables JR & lt; & gt; Servo Drives & lt; & gt; Motores i>

















En el caso de una cadena simple dispositivo es más corto:
Smartphone & lt; & gt; micro adaptador USB-USB & lt; & gt; Cable USB-mini USB & lt; & gt; Pololu Maestro tarjeta de & lt; & gt; cables JR & lt; & gt; Servo Drives & lt; & gt; Motores i>













Además, puede instalar otras unidades de su dispositivo de vuelo, tales como aletas o tren de aterrizaje. Tarjeta de Pololu Maestro tiene soporte para la gestión de hasta 24 unidades - para nuestro proyecto, es probable que sea aún demasiado
. Se crea la plataforma base. Ahora es el momento de dotar a nuestro dispositivo de visión.

Computer Vision h4> Es obvio que sin un sistema de visión por computador dispositivo inteligente no puede considerarse como tal. Nuestro helicóptero debe ser capaz de no sólo tomar fotografías, sino también para analizarlos - para ello se utilizan las capacidades de OpenCV
. OpenCV - es una biblioteca de software de código abierto para el análisis de la imagen subyacente a los innumerables implementaciones de sistemas de visión por computador y realidad virtual. Originalmente desarrollado por Intel, ahora está disponible para una variedad de plataformas de hardware y sistemas operativos.
Para la práctica, tratar de reconocer el sencillo signo en forma de un círculo y permanecer en el frente de este signo a una cierta distancia. Para simplificar la tarea de prueba, mueva el teléfono inteligente entregará.



Biblioteca OpenCV no es directamente accesible por Java Android. Esta biblioteca nativa de los programas más utilizados en C ++, por lo que necesitamos Android NDK. Toma de imágenes y la visualización se hará en Java, para la interacción entre Java y C ++ utilizará JNI. Vamos a tener que instalar Android NDK y el SDK de Android, crear un nuevo proyecto Círculos, añadir el componente C / C ++ y modificar las propiedades del proyecto para utilizar la biblioteca OpenCV, como se muestra en la siguiente captura de pantalla:









Como resultado, su proyecto será:
El archivo principal de Java «src / MainActivity.java»
Archivo marcado XML «Res / layout / activity_main.xml» manifiesto y
Dos Makefile «Jni / Android.mk» y «Jni / Application.mk»
Cpp Código «Jni / ComputerVision_jni.cpp» y el encabezado «Jni / ComputerVision_jni.h» i>

A diferencia de Java, C ++ debe ser compilado para un procesador en particular. El ajuste se realiza mediante la edición de la variable de archivo APP_ABI Application.mk. Si usted tiene una plataforma de teléfonos inteligentes, Intel, el valor correcto es 86. Siguiente NDK hará todo lo mismo.

Despliegue h4> OpenCV - biblioteca utiliza un número infinito de aplicaciones de Android, y la versión de la biblioteca puede ser utilizada por ellos es diferente. Como desarrollador, puede enlazar la aplicación a una versión específica de OpenCV, pero hay una opción mejor. Utilice el gestor de la dependencia, llamada «OpenCV Mánager». Esta aplicación para Android que determina lo que ahora necesita OpenCV y cargas exactamente la versión que desee.
Queremos detectar círculos en OpenCV, para determinar su centro y radio de instrucciones y de visualización para el operador para lograr el smartphone círculo centrado el tamaño correcto. El siguiente código Java para adquirir imágenes de la cámara utilizando el API de Java para Android, llama a una función en C ++ a través de JNI y adjunta un puntero a la imagen en la memoria. Código C ++ para implementar el procesamiento de la imagen para detectar círculos. Por otra parte, llamada Java, para mostrar los círculos y comentarios detectados.
Código Java:

 & lt; code class = & quot; java & quot; & gt; ... // capturar imágenes desde la cámara org.opencv.Android.CameraBridgeViewBase importación; // Cargar OpenCV org.opencv.Android.OpenCVLoader importación dependencia nativa; ... Pública onResume void () {super.onResume (); // OpenCV carga con una devolución de llamada // no típico código específico para OpenCV OpenCVLoader.initAsync (OpenCVLoader.OPENCV_VERSION_2_4_6, esto, mLoaderCallback); } // ... Una vez que el gestor de enlace OpenCV estableció, // podemos cargar la biblioteca dinámica System.loadLibrary (& quot; jni_part & quot;); ... & Lt; / código de & gt;  pre> Código C ++ 
 & lt; code class = & quot; cpp & quot; & gt; ... // típico de JNI: Java método de clase nombre // puntero a la imagen RGB como argumento JNIEXPORT int JNICALL Java_com_example_circles_MainActivity_process (JNIEnv * jenv, jobject obj, jlong ​​addrGray, jlong ​​addrRgba ) ... // Obtener el mapa de bits del puntero Mat & amp; mRgb = * (Mat *) addrRgba; // Blur, se requiere antes de la detección de círculos medianBlur (Mons, Mons, 5); // OpenCV detección - HoughCircles transformación Hough (MGR, // imagen de entrada de escala de grises * círculos, // vector de salida CV_HOUGH_GRADIENT, // método de detección de usar 4, // razón inversa de la resolución acumulador a los mGr.rows imagen / 8 // distancia entre los centros de min círculos detectados 220, // mayor umbral de la interna del detector de bordes de Canny dos pasaron 200, // umbral acumulador de 20 100, // mGr.cols min radio / 8 // radio máximo); & Lt; / código de & gt;  pre> 
 Para la prueba, me mudé de la hoja de papel delante de un teléfono inteligente con un círculo impreso. Asumimos una distancia de 20 cm imagen círculo tendrá un tamaño de 300 píxeles - asumimos esta es la posición correcta. Si el círculo es más pequeño teléfono inteligente debe empujar más cerca si más - de entonces. Esta es la opción más fácil. Puede usar los dos círculos concéntricos que son ideales para la navegación a través de largas distancias, menos - en el Oriente. Nada impide reconocer otras formas específicas tales como flechas. En última instancia, tenemos que conseguir un sistema que utiliza el GPS de datos, y la información de color de la cámara.

Planes de Futuro h4> Establecer el Administrador de OpenCV y el archivo APK de Eclipse. Ejecutar y pasar por todos los pasos de configuración. Se determinará el rango del campo de visión y guiar el movimiento del teléfono inteligente en el círculo central de un diámetro dado.
El teléfono inteligente de prueba que hemos recibido y procesado la imagen cada 8 centésimas de segundo - 12,5 fps. Esto demuestra que la visión por computador para helicóptero -. Una cosa muy real, incluso con tiempo limitado y los recursos financieros
Las oportunidades para un mayor desarrollo es muy amplio. OpenCV - es una biblioteca de código abierto, portado a muchas plataformas. Además, Intel IPP reemplaza algunas llamadas de bajo nivel a OpenCV y acelera su código, la inserción de funciones bien optimizadas para los procesadores Intel. Puede guardar la portabilidad del código - en el futuro, es posible que tenga un smartphone más potente
. Pero, ¿qué hacer a continuación - le pedirá desde el sitio de Intel . Está escrito con gran detalle cómo construir una máquina voladora y lo que le enseñan.
Ahora algunos enlaces más específicos:

Оригинал este artículo en Inglés en formato PDF Исходный código helicóptero Тестовый ARC

Fuente: habrahabr.ru/company/intel/blog/230299/

Tags

Vea también

Nueva y Notable