Voar um drone¶
Decole, voe um quadrado e pouse com o mesmo código em qualquer plataforma suportada. Você escolhe um backend (firmware mais um transporte), inicia o driver (ou um simulador), define uma fonte de pose e roda uma missão. Só a chave da factory e o config mudam entre plataformas; as chamadas de voo permanecem idênticas.
Escolha o backend na aba abaixo; a seleção vale para instalação, driver e código da missão. Novo no workspace? Faça a Instalação primeiro.
1. Instale o backend¶
Instale control e depois o driver que o veículo usa:
Sem instalação extra: pymavlink já vem com o SDK core. make drone-mavros adiciona os
dados geoid usados na altitude GPS.
Sem instalação extra: pymavlink já vem com o SDK core. make drone-mavros adiciona os
dados geoid usados na altitude GPS.
2. Defina a fonte de pose¶
Para ArduPilot e PX4 o ambiente seleciona a fonte de pose no config:
| Ambiente | Fonte de pose | Argumento no config |
|---|---|---|
| Outdoor | GPS | pose_source=PoseSource.GPS |
| Indoor (sem GPS) | Visão (VSLAM) | pose_source=PoseSource.VISION |
Voo indoor
Indoor exige um feed de vision-pose no EKF do FCU; veja Localização (arquitetura, Run, origem EKF, procedimento indoor). Bebop e Crazyflie voam indoor sem GPS e ignoram essa configuração.
3. Inicie o driver¶
Inicie o driver ou a ponte a que a missão se conecta antes de rodá-la (os exemplos usam
start_driver=False por padrão). Overrides de conexão passam por variáveis de ambiente
(FCU_URL, DEV, BAUD, IP).
Outdoor não precisa de ponte; a missão abre o link. Indoor inicia a ponte de vision-pose:
Outdoor não precisa de ponte; a missão abre o link. Indoor inicia a ponte de vision-pose:
Sem hardware ainda? Voe em simulação
make sim-install FIRMWARE=ardupilot # one-time (use FIRMWARE=px4 for PX4)
make sim-start # terminal 1
make sim-bridge # terminal 2
PROTOCOL=mavlink / PROTOCOL=dds em
sim-bridge. Matriz completa: Simulação.
4. Escreva a missão¶
Monte o drone com a chave e o config do backend. As chamadas de voo depois disso são as mesmas para todos os backends.
Voe um quadrado de 2 m e depois pouse:
drone.takeoff(altitude=2.0)
drone.move_to(x=2.0, y=0.0, z=0.0)
drone.move_to(x=2.0, y=2.0, z=0.0)
drone.move_to(x=0.0, y=2.0, z=0.0)
drone.move_to(x=0.0, y=0.0, z=0.0)
drone.land()
nectar.shutdown()
Os exemplos do repositório voam o mesmo box em qualquer backend, com o navegador PID quando
o backend permite. Cada aba é o comando exato da plataforma (GPS outdoor; para indoor use
--mode indoor em navigation.py ou --env indoor em basic.py para a fonte de pose de
visão):
nectar-activate
python3 nectar/nectar/examples/control/navigation.py \
--drone mavlink --connection tcp:127.0.0.1:5762 \
--mode outdoor --strategy pid \
--test rectangle --altitude 2.0 --distance 2.0 --precision 0.15
No hardware, passe o link serial, por exemplo --connection /dev/ttyUSB0.
navigation.py não cobre este backend; o box em posição de basic.py cobre:
Resultado esperado
O drone arma, sobe até a altitude alvo, voa um box de 2 m (0,6 m no Crazyflie) com precisão de chegada de 0,15 m, depois pousa e desarma.
Ver também¶
- Referência de Control: a factory, o protocolo
Drone, capacidades e a matriz completa de backends. - Vehicle core · Transports · PID · Obstacles · Localization.
- Exemplos de Control: suíte de navegação, REPL interativo, teste de servo.