Entrando na Aeronet: lançando um quadrocóptero autônomo em um ambiente virtual


Talvez todos possam pilotar um quadcopter agora, se desejado. Mas, para resolver o problema do controle autônomo, para que você não precise mover os manípulos do controle remoto e monitorar constantemente o drone - nessa configuração, a solução pode exigir muitos recursos: comprar, montar, soldar, ajustar, decolar, soltar e depois da queda - retornar ao início do ciclo.


Enquanto ensinamos juízes / professores da Aeronet em nosso projeto, somos confrontados com a necessidade de uma programação simplificada de “entrada no tópico” de veículos não tripulados para professores de robótica / ciência da computação que já possuem um conjunto de conhecimentos básicos.


Existe uma maneira fácil de aprender o básico da programação de voos com drones - um ambiente de simulação virtual, um exemplo passo a passo do uso que consideraremos em nosso artigo.


Você não precisa comprar nada para atualizar suas habilidades básicas de programação de drones - basta usar o projeto PX4 do simulador de drones jMAVSim. O PX4 é um poderoso conjunto de software de código aberto projetado para uso em uma variedade de veículos não tripulados, tanto voando como viajando em terra. O código fonte do software do projeto está no Github .


Inicialmente, os autores do PX4 recomendam o Linux Ubuntu LTS como um ambiente de desenvolvimento. Também há suporte para Mac. Este ano, um ambiente de simulação e desenvolvimento para Windows apareceu em Cygwin, o que pode simplificar a vida das instituições educacionais russas que usam o Windows nas aulas de ciência da computação.


A seguir, veremos o processo de instalação, construção e execução do simulador no Linux e no Windows.


Instalando e executando o jMAVSim no Linux Ubuntu


Os desenvolvedores do PX4 recomendam o Linux Ubuntu 16.04 LTS como sistema padrão. O Linux permite criar o pacote PX4 para todos os sistemas suportados (plataformas de hardware baseadas no NuttX, Qualcomm Snapdragon Flight, Linux, ambiente de simulação, ROS).


Primeiro, adicione o usuário ao grupo de discagem:


sudo usermod -a -G dialout $USER 

Vamos entrar no sistema para que as alterações entrem em vigor.


A cadeia de ferramentas de desenvolvimento para Pixhawk / NuttX, incluindo jmavsim, é instalada automaticamente usando o script ubuntu_sim_nuttx.sh . Você precisa fazer o download do script para o diretório do usuário e executá-lo usando o comando


 source ubuntu_sim_nuttx.sh 

Todas as perguntas feitas pelo script são respondidas positivamente.


No final do script, reinicie o computador.


Resta fazer o download do código-fonte do controlador que controla o voo e o constrói.


Clonamos o repositório de software do controlador de vôo PX4 com o github:


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

Na pasta Firmware, agora temos o código fonte completo que é executado no controlador de vôo (e no simulador). No futuro, pode ser útil tanto para fins de estudo quanto para fazer alterações. Vá para a pasta de firmware copiada do repositório:


 cd src/Firmware 

Compilamos e executamos o simulador:


 make px4_sitl jmavsim 

O primeiro processo de compilação leva algum tempo. Após a conclusão bem-sucedida, o console do PX4 aparecerá na tela:


Console PX4


O drone pode ser enviado para o voo digitando o comando no console:


 pxh> commander takeoff 

Drone a bordo


Aterrando um drone - commander land , pare a simulação - CTRL + C ou shutdown comando.


Instale e execute o jMAVSim no Windows


A caixa de ferramentas PX4 Cygwin apareceu em 2018. Essa é a maneira mais poderosa de compilar / desenvolver o PX4 para Windows. Para instalar - faça o download e execute o arquivo de instalação no Github ou Amazon .


Por padrão, o conjunto de ferramentas é instalado na pasta C: \ PX4.


Na última etapa do instalador, você pode marcar a caixa “clonar o repositório PX4, criar e executar simulação com jMAVSim” (clonar o repositório PX4, compilar e executar o simulador jMAVSim).


O ambiente de desenvolvimento é iniciado no Cygwin usando o arquivo run-console.bat no diretório de instalação (por padrão, C: \ PX4).


Se você esqueceu de marcar a caixa de ativação do jMAVSim durante o processo de instalação - no Cygwin, você pode clonar o repositório e executar o simulador usando os comandos:


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

Após a compilação, o console do PX4 e a janela do simulador aparecerão na tela:


Janela do simulador JMAVSim para Windows


Ainda não exibi céu e árvores no Windows, em vez deles um fundo preto, conforme relatado aos desenvolvedores do simulador .


Os comandos do console para controlar o drone são os mesmos: decolagem - decolagem do commander takeoff , aterrissagem - aterrissagem do commander land , simulação de parada - CTRL + C ou shutdown .


Voos com o programa QGroundControl Ground Station


O programa QGroundControl permite que você configure totalmente os drones nas plataformas PX4 ou ArduPilot, além de planejar e executar voos externos autônomos via GPS.


O código do programa é completamente aberto e funciona nas plataformas Windows, OS X, Linux, iOS e Android. O arquivo de instalação da plataforma desejada pode ser baixado na seção Download do site do programa .


Para Windows, baixe e execute este arquivo .
Após a instalação e o lançamento, se o jMAVSim já estiver em execução em nosso computador, o programa se conectará a ele automaticamente.


Você pode iniciar um drone em voo usando o botão Fly-Takeoff e pousar - Land. Você também pode realizar um voo virtual por pontos de GPS:


QGroundControl


Programação de vôo autônomo com mavros


O drone virtual jMAVSim pode ser controlado usando o protocolo mavlink, descrito em vários artigos (por exemplo, 1 , 2 ). Para implementar a comunicação mavlink, usaremos o pacote mavros do sistema ROS (sistema operacional do robô) .


Os desenvolvedores do PX4 recomendam o uso do ROS Kinetic.


O pacote mavros fornece comunicação via protocolo MAVLink entre um computador executando o ROS (por exemplo, uma máquina virtual com Linux ou Raspberry PI) e um controlador de vôo (real ou em um ambiente de simulador).


O pacote mavros é instalado junto com outros pacotes durante a instalação completa do ROS Kinetic .


O pacote mavros é iniciado com a conexão ao simulador pelo comando roslaunch, indicando o endereço IP e a porta do computador em que o simulador está sendo executado:


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

Se o simulador não estiver em execução no host em que o jMAVSim está em execução, antes de conectar-se ao mavros, será necessário permitir que as mensagens do mavlink sejam enviadas pela rede usando o param set MAV_BROADCAST 1 no console jMAVSim. Quando o comando é executado, o endereço IP do host usado para o protocolo mavlink é exibido. A porta pode ser encontrada usando o comando mavlink status no console do simulador:


Status do Mavlink


O sucesso da conexão com o controlador de vôo deve ser verificado usando o comando:


 rostopic echo /mavros/state 

Se a conexão for bem sucedida, as chamadas mensagens aparecerão no console. pulsação do mavlink, aproximadamente uma vez por segundo:


batimento cardíaco mavlink


Se as mensagens não aparecerem / não forem atualizadas / campo Conectado = Falso - a comunicação com o controlador de vôo não está estabelecida e você deve entender o porquê.


No momento da gravação, no Windows, após o comando param set MAV_BROADCAST 1, as mensagens no console jMAVSim começaram a aparecer em um loop:


 WARN [mavlink] getting required buffer size failed. 

Para que o simulador funcione corretamente no Windows, você deve adicionar a linha 1029 do arquivo src / modules / mavlink / mavlink_main.cpp:


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

E recompile / reinicie o simulador com o comando make px4_sitl jmavsim .


Esse problema foi relatado aos desenvolvedores ; pode ser corrigido em versões futuras.


Após uma conexão bem-sucedida, você pode iniciar o drone em voo autônomo usando os seguintes comandos do console do sistema ROS:


  • Publicamos 5 vezes por segundo o ponto alvo para o voo do drone no modo OFFBOARD. Para que o drone não caia do modo de vôo autônomo OFFBOARD, é necessário publicar o ponto de destino o tempo todo, várias vezes 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" 


  • Definimos o drone no modo OFFBOARD (em uma nova sessão de terminal separada):

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

  • Enviamos um comando para colocar o drone no modo de vôo (ou seja, "feed"):

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

Após executar o último comando, o drone virtual deve decolar e pairar a uma altura de 5 metros:


Flying jmavsim


Você também pode iniciar um drone usando um código Python simples:


 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() 

O código acima usa uma chamada para os mesmos serviços ROS que o exemplo de chamada da linha de comando.


Você precisa copiar o código em um arquivo de texto, por exemplo, fly_jmavsim.py e executá-lo na linha de comando com o python fly_jmavsim.py .


No processo de depuração deste exemplo, encontrei um recurso do simulador jMAVSim - ele precisa de um processador poderoso para operação normal. Na máquina virtual Linux, ele conseguiu calcular apenas 10 FPS e travou imediatamente após a decolagem. No laptop, enquanto eu escrevia o artigo, ele também perdia o controle / travava periodicamente. O poder do laptop ajudou - porque quando alimentado por uma bateria, o modo de economia de energia é ativado, o que subestima o desempenho do processador, o que afeta diretamente o simulador.


Com base nos exemplos dados, aqueles que desejam podem desenvolver programas de vôo autônomos (em um quadrado, em um círculo, em uma trajetória arbitrária etc.). A realização de tais exercícios pode ser útil na preparação da programação de missões autônomas em um quadrocóptero real.


Desejamos a todos os vôos de sucesso!


Referências:


Sistema operacional de robô (ROS)
Piloto automático PX4

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


All Articles