Instalação¶
Instale o SDK aqui e depois acrescente o que a missão precisa: drivers de drone, simulação, RealSense e indoor ou Docker. A matriz de plataformas testadas está em Compatibilidade.
Escolha sua instalação¶
Comece pela linha que corresponde à sua máquina:
| Ponto de partida | Faça isto |
|---|---|
| Máquina limpa, sem ROS 2 | Aba Do zero — um comando de bootstrap instala ROS 2 + o SDK |
| ROS 2 instalado, SDK ainda não clonado | clone em ~/ros2_ws/src, depois aba Workspace existente → make setup |
| SDK clonado, nada instalado | make setup (abre o menu de setup) |
| Deps instaladas, só falta o venv | rode de novo make python-all (ou seus módulos) — cria $WORKSPACE/.venv |
| Quer zero setup no host | Docker: make docker-build && make docker-run |
make setup (ou ./scripts/setup.sh sem args) abre um menu interativo. Entradas:
- Quick setup — deps de sistema + escolha de módulos + build + verify
- Python modules — instala só os módulos que você escolher
- Drone driver — mavros / px4 / px4-dds / crazyflie / bebop
- System packages — pulado quando já instalado
- ROS 2 environment, Build, Verify, RealSense
Nada instala até você escolher
Pacotes de sistema são idempotentes. MAVROS (ros-*-mavros) é opt-in — rode
make drone-mavros quando usar o backend MAVROS. Datasets geoid do GeographicLib
instalam com make full-install / bootstrap (idempotente) ou com make drone-mavros;
não são puxados a cada execução do menu.
Depois acrescente o que a missão precisa¶
| Objetivo | Comandos |
|---|---|
| ArduPilot / PX4 via MAVLink direto | make setup (escolha control) — pymavlink vem com o SDK core; opcional make drone-mavros para dados geoid |
| ArduPilot / PX4 via MAVROS | make setup (escolha control) e depois make drone-mavros |
| PX4 via uXRCE-DDS + detecção | make setup (escolha control ai) e depois make drone-px4-dds |
| Crazyflie / Bebop | make drone-crazyflie / make drone-bebop |
| Só o app GUI | make python-interface |
| Simulação (SITL + Gazebo) | make sim-install |
Detalhes: Drivers de drone (instalar + voar hardware), Simulação e RealSense e indoor.
Um script de bootstrap standalone instala tudo em uma máquina Ubuntu/Debian limpa:
pacotes de sistema, ROS 2 (ros-base), dados geoid GeographicLib, Git LFS, o próprio SDK,
dependências Python (python all) e build do workspace. MAVROS e outros drivers
continuam opt-in — acrescente-os no menu de setup ou com make drone-mavros após o
bootstrap.
bash <(curl -fsSL https://raw.githubusercontent.com/Black-Bee-Drones/nectar-sdk/main/scripts/bootstrap.sh)
O bootstrap pergunta o caminho do workspace (padrão ~/ros2_ws) e o branch (main ou
dev), clona o repositório e delega a ./scripts/setup.sh full-install.
Para CI/Docker (não interativo):
Menu de setup¶
Rodar o script de setup sem argumentos abre o mesmo menu interativo de make setup
(configurar módulos, drivers, pacotes de sistema, env ROS, build, verify — nada roda
até você escolher):
Clone no workspace e abra o menu de setup:
O Quick setup do menu roda: system (idempotente) → git-lfs → seleção de
módulos (cmd_python para os módulos escolhidos; PyTorch primeiro se escolher AI) →
rosdep-init → ros2-deps → build-pkg → verify. GeographicLib não faz parte do
Quick setup — instala com make full-install / bootstrap ou com make drone-mavros
(idempotente). Sem interação (NON_INTERACTIVE=true, p.ex. CI) make setup pula o
menu e roda Quick setup com all.
Pule o setup de ROS/Python no host — faça build e entre no container de desenvolvimento:
Para fluxos Isaac / VSLAM / RealSense, veja o guia Docker
(make isaac-run, mounts de dispositivo, notas Jetson).
Ambiente Python¶
As dependências Python instalam em um único ambiente virtual compartilhado, gerenciado pelo
uv, em $WORKSPACE/.venv (p.ex. ~/ros2_ws/.venv). O
uv é instalado automaticamente se estiver ausente.
- Criado automaticamente no primeiro
make python*/make setup, com--system-site-packagespara que o ROS 2 (rclpy, bindings de mensagens,colcon) continue visível dentro dele. - A ativação é opt-in. Os próprios comandos do SDK (
make build,make verify,make python*,make pytorch) usam o venv internamente, então sempre funcionam. No seu shell interativo ele não é forçado — assim não atrapalha outros projetos e workspaces.make ros2-envinstala o comandonectar-activatepara quando quiser. - Reutilizado por todo o workspace. Todo pacote sob
src/— o SDK e o seu código de missão/competição — compartilha este venv, então você instala uma vez e fazimport nectarde qualquer lugar. Não precisa de venv por projeto.
Entre nele quando precisar (p.ex. para ros2 run nectar <node> ou seus scripts); o prompt
mostra (nectar):
nectar-activate # enter the SDK env (command added by `make ros2-env`)
deactivate # leave it (shell built-in)
uv pip install <package> # add a package (fast); plain `pip install` also works
Para ativar o env em todo shell novo, acrescente uma linha ao ~/.bashrc:
Sobrescreva o local com NECTAR_VENV=/path (um VIRTUAL_ENV já ativo é respeitado); veja
Configuração para o caveat do venv.
Instalar por módulo¶
Instale só os módulos de que precisa (dependências em nectar/pyproject.toml). Cada alvo
make é um wrapper fino sobre o script de setup, então as duas colunas fazem o mesmo:
Alvo make |
Script de setup | Instala |
|---|---|---|
make python |
./scripts/setup.sh python |
Só o core (numpy, opencv, scipy) |
make python-control |
./scripts/setup.sh python control |
+ navegação GPS/PID, pymavlink (MAVLink direto) |
make python-vision |
./scripts/setup.sh python vision |
+ drivers de câmera, ArUco, cor, detecção de linha |
make python-ai |
./scripts/setup.sh python ai |
+ YOLO, DETR, RF-DETR (exige PyTorch) |
make python-interface |
./scripts/setup.sh python interface |
+ GUI Qt6 / PySide6 |
make python-sensors |
./scripts/setup.sh python sensors |
+ pyserial / pymavlink (driver TF-Luna, ponte MAVLink) |
make python-all |
./scripts/setup.sh python all |
Todos os módulos |
make python-full |
./scripts/setup.sh python full |
Todos + drivers de hardware de câmera |
PyTorch (obrigatório para o módulo de IA)¶
Instalado pela integração nativa de PyTorch do uv (--torch-backend), que detecta o driver
CUDA e puxa torch mais as wheels nvidia-* CUDA do índice correto em
download.pytorch.org:
| Comando | Efeito |
|---|---|
make pytorch |
Auto-detecta GPU (CUDA 13 -> cu130; sem GPU -> cpu) |
./scripts/setup.sh pytorch cpu |
Força CPU |
./scripts/setup.sh pytorch cu128 |
Força um backend (cpu/cu118/cu126/cu128/cu130/...) |
Um par conhecido torch/torchvision é pinado por padrão em
scripts/lib/config.sh
para reprodutibilidade; sobrescreva com TORCH_VERSION / TORCHVISION_VERSION (defina os
dois juntos). Wheels CUDA grandes em links lentos podem travar — o timeout por request sobe
para 600s (UV_HTTP_TIMEOUT); em redes muito instáveis também
export UV_CONCURRENT_DOWNLOADS=1. Veja PyTorch Get Started
e o guia PyTorch do uv.
Build e verificação¶
| Comando | Faz |
|---|---|
make build |
Build de todo o workspace |
make build-pkg |
Build só dos pacotes do SDK |
make verify |
Checa a instalação (presença/imports) |
make doctor |
Relatório de ambiente (ROS, módulos, dispositivos, CUDA) |
make clean |
Remove artefatos de build |
make verify-functional |
Testes funcionais de regressão (pytest; MODULE="vision control") |
make test |
colcon test (suíte funcional + lint cmake/xml) |
A lista completa de comandos está na referência Comandos e Makefile.
Setup de sistema (passos individuais)¶
| Comando | Passo |
|---|---|
./scripts/setup.sh system |
pacotes apt |
./scripts/setup.sh ros2 |
pacotes base ROS 2 (ros-base, rviz2, cv_bridge, …) |
./scripts/setup.sh geographiclib |
datasets geoid GeographicLib (também por full-install e make drone-mavros) |
./scripts/setup.sh ros2-env |
Configura ~/.bashrc |
./scripts/setup.sh rosdep-init |
Inicializa rosdep |
./scripts/setup.sh git-ssh |
Configura git e chaves SSH |