
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:

O drone pode ser enviado para o voo digitando o comando no console:
pxh> commander takeoff

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:

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:

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:

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:

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:
Após executar o último comando, o drone virtual deve decolar e pairar a uma altura de 5 metros:

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