Entrar en Aeronet: lanzar un quadrocopter aut贸nomo en un entorno virtual


Tal vez, todos pueden volar un quadcopter ahora, si lo desean. Pero para resolver el problema del control aut贸nomo, de modo que no necesite mover las palancas del control remoto y monitorear constantemente el dron; en esta configuraci贸n, la soluci贸n puede requerir muchos recursos: comprar, ensamblar, soldar, configurar, despegar, soltar y, despu茅s de la ca铆da, volver al comienzo del ciclo.


Al ense帽ar a los jueces / maestros de Aeronet sobre nuestro proyecto, nos enfrentamos a la necesidad de una programaci贸n simplificada de "entrada en el tema" de veh铆culos no tripulados para maestros de rob贸tica / inform谩tica, que ya tienen un conjunto de conocimientos b谩sicos.


Hay una manera f谩cil de aprender los conceptos b谩sicos de la programaci贸n de vuelos con drones: un entorno de simulaci贸n virtual, un ejemplo paso a paso del uso que consideraremos en nuestro art铆culo.


No necesita comprar nada para actualizar sus habilidades b谩sicas de programaci贸n de drones: solo use el proyecto de simulador de drones jMAVSim PX4. PX4 es un potente paquete de software de c贸digo abierto dise帽ado para su uso en una variedad de veh铆culos no tripulados, tanto volando como viajando en tierra. El c贸digo fuente del software del proyecto est谩 en Github .


Inicialmente, los autores de PX4 recomiendan Linux Ubuntu LTS como entorno de desarrollo. Tambi茅n hay soporte para Mac. Este a帽o, apareci贸 un entorno de simulaci贸n y desarrollo para Windows en Cygwin, que puede simplificar la vida de las instituciones educativas rusas que usan Windows en las clases de inform谩tica.


A continuaci贸n, consideraremos el proceso de instalaci贸n, construcci贸n y ejecuci贸n del simulador en Linux y Windows.


Instalaci贸n y ejecuci贸n de jMAVSim en Linux Ubuntu


Los desarrolladores de PX4 recomiendan Linux Ubuntu 16.04 LTS como su sistema est谩ndar. Linux le permite construir el paquete PX4 para todos los sistemas compatibles (plataformas de hardware basadas en NuttX, Qualcomm Snapdragon Flight, Linux, entorno de simulaci贸n, ROS).


Primero, agregue el usuario al grupo de marcado:


sudo usermod -a -G dialout $USER 

Iniciemos sesi贸n en el sistema para que los cambios surtan efecto.


La cadena de herramientas de desarrollo para Pixhawk / NuttX, que incluye jmavsim, se instala autom谩ticamente utilizando el script ubuntu_sim_nuttx.sh . Debe descargar el script en el directorio del usuario y ejecutarlo con el comando


 source ubuntu_sim_nuttx.sh 

Todas las preguntas formuladas por el gui贸n se responden positivamente.


Al final del gui贸n, reinicie la computadora.


Nos queda por descargar el c贸digo fuente del controlador que controla el vuelo y construirlo.


Clonamos el repositorio de software del controlador de vuelo PX4 con github:


 git clone https://github.com/PX4/Firmware.git 

En la carpeta Firmware ahora tenemos el c贸digo fuente completo que se ejecuta en el controlador de vuelo (y en el simulador). En el futuro, puede ser 煤til tanto para estudiar como para realizar cambios. Vaya a la carpeta de firmware copiada del repositorio:


 cd src/Firmware 

Compilamos y ejecutamos el simulador:


 make px4_sitl jmavsim 

El primer proceso de compilaci贸n lleva algo de tiempo. Despu茅s de completar con 茅xito, la consola PX4 aparecer谩 en la pantalla:


Consola PX4


El dron se puede enviar al vuelo ingresando el comando en la consola:


 pxh> commander takeoff 

Dron en vuelo


Aterrizaje de un avi贸n no tripulado - comando commander land , detener la simulaci贸n - CTRL + C o shutdown comando


Instalar y ejecutar jMAVSim en Windows


La caja de herramientas PX4 Cygwin apareci贸 en 2018. Esta es la forma m谩s poderosa de compilar / desarrollar PX4 para Windows. Para instalar: descargue y ejecute el archivo de instalaci贸n desde Github o Amazon .


Por defecto, la cadena de herramientas se instala en la carpeta C: \ PX4.


En el 煤ltimo paso del instalador, puede marcar la casilla "clonar el repositorio PX4, construir y ejecutar la simulaci贸n con jMAVSim" (clonar el repositorio PX4, compilar y ejecutar el simulador jMAVSim).


El entorno de desarrollo se inicia en Cygwin utilizando el archivo run-console.bat en el directorio de instalaci贸n (por defecto, C: \ PX4).


Si olvid贸 marcar la casilla de inicio de jMAVSim durante el proceso de instalaci贸n, en Cygwin puede clonar el repositorio y ejecutar el simulador usando los comandos:


 git clone --recursive -j8 https://github.com/PX4/Firmware.git cd Firmware make px4_sitl jmavsim 

Despu茅s de la compilaci贸n, la consola PX4 y la ventana del simulador aparecer谩n en la pantalla:


Ventana del simulador JMAVSim para Windows


Todav铆a no he mostrado cielo y 谩rboles en Windows, en lugar de ellos un fondo negro, como informaron los desarrolladores del simulador .


Los comandos de la consola para controlar el dron son los mismos: despegue - despegue del commander takeoff , aterrizaje - aterrizaje del commander land , detenci贸n de la simulaci贸n - CTRL + C o shutdown .


Vuelos con el programa QGroundControl Ground Station


El programa QGroundControl le permite configurar completamente drones en las plataformas PX4 o ArduPilot, as铆 como planificar y realizar vuelos aut贸nomos al aire libre a trav茅s de GPS.


El c贸digo del programa est谩 completamente abierto y funciona en las plataformas Windows, OS X, Linux, iOS y Android. El archivo de instalaci贸n para la plataforma deseada se puede descargar en la secci贸n Descargar del sitio web del programa .


Para Windows, descargue y ejecute este archivo .
Despu茅s de la instalaci贸n y el lanzamiento, si jMAVSim ya se est谩 ejecutando en nuestra computadora, el programa se conectar谩 autom谩ticamente.


Puedes lanzar un dron en vuelo usando el bot贸n Fly-Takeoff y aterrizar - Land. Tambi茅n puede realizar un vuelo virtual sobre puntos GPS:


QGroundControl


Programaci贸n de vuelo aut贸nomo con mavros


El dron virtual jMAVSim se puede controlar utilizando el protocolo mavlink, que se describe en varios art铆culos (por ejemplo, 1 , 2 ). Para implementar la comunicaci贸n mavlink, utilizaremos el paquete mavros del sistema ROS (sistema operativo del robot) .


Los desarrolladores de PX4 recomiendan usar ROS Kinetic.


El paquete mavros proporciona comunicaci贸n a trav茅s del protocolo MAVLink entre una computadora que ejecuta ROS (por ejemplo, una m谩quina virtual con Linux o Raspberry PI) y un controlador de vuelo (real o en un entorno de simulador).


El paquete mavros se instala junto con otros paquetes durante la instalaci贸n completa de ROS Kinetic .


El paquete roslaunch inicia el paquete mavros con la conexi贸n al simulador, que indica la direcci贸n IP y el puerto de la computadora en la que se ejecuta el simulador:


 roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557" 

Si el simulador no se est谩 ejecutando en el host donde se est谩 ejecutando jMAVSim, antes de conectarse a mavros, debe habilitar los mensajes de mavlink para que se env铆en a trav茅s de la red utilizando el param set MAV_BROADCAST 1 en la consola de jMAVSim. Cuando se ejecuta el comando, se muestra la direcci贸n IP del host utilizada para el protocolo mavlink. El puerto se puede encontrar usando el mavlink status en la consola del simulador:


Estado de Mavlink


El 茅xito de la conexi贸n al controlador de vuelo debe verificarse con el comando:


 rostopic echo /mavros/state 

Si la conexi贸n es exitosa, aparecer谩n los llamados mensajes en la consola. latido del coraz贸n mavlink, aproximadamente una vez por segundo:


latido del coraz贸n mavlink


Si los mensajes no aparecen / no est谩n actualizados / campo Conectado = Falso - la comunicaci贸n con el controlador de vuelo no est谩 establecida, y debe entender por qu茅.


Al momento de escribir, en Windows, despu茅s del comando param set MAV_BROADCAST 1, los mensajes en la consola jMAVSim comenzaron a aparecer en un bucle:


 WARN [mavlink] getting required buffer size failed. 

Para que el simulador funcione correctamente en Windows, debe agregar la l铆nea 1029 al archivo src / modules / mavlink / mavlink_main.cpp:


 #if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__) 

Y recompile / reinicie el simulador con el comando make px4_sitl jmavsim .


Este problema se ha informado a los desarrolladores , se puede solucionar en futuras versiones.


Despu茅s de una conexi贸n exitosa, puede iniciar el dron en vuelo aut贸nomo utilizando los siguientes comandos de la consola del sistema ROS:


  • Publicamos 5 veces por segundo el punto objetivo para el vuelo del dron en modo FUERA DE BORDO. Para que el dron no se "caiga" del modo de vuelo aut贸nomo FUERA DE BORDO, es necesario publicar el punto objetivo todo el tiempo, varias veces por segundo:

     rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0" 


  • Configuramos el dron en modo OFFBOARD (en una nueva sesi贸n de terminal separada):

     rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'" 

  • Enviamos un comando para poner el dron en modo de vuelo (es decir, "alimentar"):

     rosservice call /mavros/cmd/arming "value: true" 

Despu茅s de ejecutar el 煤ltimo comando, el dron virtual deber铆a despegar y flotar a una altura de 5 metros:


Flying jmavsim


Tambi茅n puedes lanzar un dron usando un c贸digo simple de Python:


 import rospy from geometry_msgs.msg import PoseStamped from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(5) setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setpt=PoseStamped() setpt.pose.position.z=5 for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep() set_mode(0,"OFFBOARD") arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep() 

El c贸digo anterior usa una llamada a los mismos servicios ROS que el ejemplo de llamada de l铆nea de comando.


Debe copiar el c贸digo en un archivo de texto, por ejemplo, fly_jmavsim.py, y ejecutarlo desde la l铆nea de comandos con el python fly_jmavsim.py .


En el proceso de depuraci贸n de este ejemplo, encontr茅 una caracter铆stica del simulador jMAVSim: necesita un procesador potente para el funcionamiento normal. En la m谩quina virtual Linux, logr贸 calcular solo 10 FPS y se bloque贸 inmediatamente despu茅s del despegue. En la computadora port谩til, mientras escrib铆a el art铆culo, tambi茅n perd铆a el control / se bloqueaba peri贸dicamente. El poder de la computadora port谩til ayud贸, porque cuando funciona con una bater铆a, se activa el modo de ahorro de energ铆a, que subestima el rendimiento del procesador, lo que afecta directamente al simulador.


Con base en los ejemplos dados, aquellos que lo deseen pueden desarrollar programas de vuelo aut贸nomos (en un cuadrado, en un c铆rculo, en una trayectoria arbitraria, etc.). Realizar tales ejercicios puede ser 煤til para prepararse para programar misiones aut贸nomas en un quadrocopter real.


隆Les deseamos todos los vuelos exitosos!


Referencias


Sistema operativo de robot (ROS)
Piloto autom谩tico PX4

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


All Articles