Материалы для мастер-класса по дронам
Установка vbox ubuntu
- Vbox 7.2.6 Downloads – Oracle VirtualBox
- Ubuntu 24.04.4 LTS, официальный Download Ubuntu Desktop | Ubuntu
- Установка по инструкции How to run an Ubuntu Desktop virtual machine using VirtualBox 7 | Ubuntu
- Идёт в автоматическом режиме, указал root/root имя пользователя и пароль. Увеличил оперативку до 4096, процессоров до 4, размер жесткого диска 30 гб. Включил установку дополнений гостевой ОС
- После установки пользователь и пароль drone/root
- Установка пакетов
-
pycharm
Download: https://github.com/JetBrains/intellij-community/releases/tag/pycharm%2F2025.3.2.1
tar.gz -
qgc 5.08.64 https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html#ubuntu
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libfuse2 -y sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y
Скачал AppImage, chmod+x -
SITL. Скачать, потом
Уже всё ставит и мавлинк и мавпрокси
So the commands I tried were,
# 1. Activate virtualenv
source ~/venv-ardupilot/bin/activate
# 2. Navigate to ArduPilot repo
cd ~/ardupilot
# 3. Get the correct version
git fetch --all
git checkout Copter-4.6.3
# 4. Pull in all submodules
git submodule update --init --recursive
# 5. Install Python deps (optional but typical)
# pip install -r requirements.txt
# 6. Rebuild
./waf configure --board sitl
./waf copter
# 7. Launch
cd ArduCopter
sim_vehicle.py -v ArduCopter -f quad --console --map
Установка под Windows
Установка Mission Planner
PC Win11.
Release Mission Planner 1.3.83 · ArduPilot/MissionPlanner

Скачиваем, извлекаем так, чтобы было:
C:\drone\MissionPlanner\version.txt
Проверяем номер версии: 1.3.9384.38258
Создаём ярлык, для удобства:

Запускаем, проверяем, что работает и номер версии в шапке

Ручная установка SITL
- Копируем каталог по ссылке ... TODO
- Распаковываем в
C:\drone\sitl\ - Проверяем запуск:
C:\drone\sitl>ArduCopter.exe --help Options: --help|-h display this help information --wipe|-w wipe eeprom --unhide-groups|-u parameter enumeration ignores AP_PARAM_FLAG_ENABLE --speedup|-s SPEEDUP set simulation speedup --rate|-r RATE set SITL framerate --console|-C use console instead of TCP ports --instance|-I N set instance of SITL (adds 10*instance to all port numbers) --synthetic-clock|-S set synthetic clock mode --home|-O HOME set start location (lat,lng,alt,yaw) or location name ...
Из исходников беремardupilot-Copter-4.6.3\Tools\autotest\default_params\
Запуск:
C:\drone\sitl>ArduCopter.exe --model copter --speedup 1 --slave 0 --defaults default_params/copter.parm --sim-address=127.0.0.1 -I0
Результат:
Setting SIM_SPEEDUP=1.000000
Suggested EK3_DRAG_BCOEF_* = 17.209, EK3_DRAG_MCOEF = 0.209
Starting sketch 'ArduCopter'
Starting SITL input
Using Irlock at port : 9005
bind port 5760 for SERIAL0
SERIAL0 on TCP port 5760
Waiting for connection ....
Проверка соединения SITL-MissionPlanner
В MissionPlanner подключаемся. Указываем порт TCP, номер по-умолчанию 5760.

В MissionPlanner результат подключения:

Проверяем команды.
Ждём готовности:

Выдаём ARM:

После появления ARMED надо быстро выбрать take off в контекстном меню.

Может, надо дополнительно поставить Guided-режим.
Проверяем, что взлетели:

Правой кнопкой в месте экрана и выбираем "Лететь сюда":

Садимся домой. Для этого выбираем режим RTL. Он прилетает на место, садится и переходит в режим DISARMED.
pymavlink
Установка пакета: pip install pymavlink
Запускаем стандартный батник sitl.
Тестовый скрипт, можно построчно, подключаемся так же, как и GCS
from pymavlink import mavutil
mav = mavutil.mavlink_connection('tcp:127.0.0.1:5760')
mav.wait_heartbeat()
print(f"Heartbeat from system (system {mav.target_system} component {mav.target_component})")
Результат подключения:

mavproxy
pip install mavproxy
Запуск с возможностью подключения наземной станции Mission Planner:
Порядок запуска:
1. SITL
2. Proxy
3. MissionPlanner (автоматом подключается)
4. Python скрипт - udp:127.0.0.1:14550
Прослеживаем команды и состояния

from pymavlink import mavutil
mav = mavutil.mavlink_connection('udp:127.0.0.1:14550')
mav.wait_heartbeat()
print(f"Heartbeat from system (system {mav.target_system} component {mav.target_component})")
Считываем сообщения в канале:
>python scripts\print_all_messages.py
Heartbeat from system (system 1 component 0)
{'mavpackettype': 'AHRS', 'omegaIx': -0.0018503174651414156, 'omegaIy': -0.0018894965760409832, 'omegaIz': -0.002428414998576045, 'accel_weight': 0.0, 'renorm_val': 0.0, 'error_rp': 0.0023577536921948195, 'error_yaw': 0.001460870960727334}
{'mavpackettype': 'AHRS2', 'roll': -0.0015929507790133357, 'pitch': -0.0018164949724450707, 'yaw': -0.11898527294397354, 'altitude': 584.0899658203125, 'lat': -353632621, 'lng': 1491652374}
{'mavpackettype': 'ATTITUDE', 'time_boot_ms': 486149, 'roll': -0.0010556308552622795, 'pitch': -0.001273558591492474, 'yaw': -0.14075033366680145, 'rollspeed': -0.0002452039625495672, 'pitchspeed': -0.00028527574613690376, 'yawspeed': -0.0008685493376106024}
{'mavpackettype': 'GLOBAL_POSITION_INT', 'time_boot_ms': 486149, 'lat': -353632620, 'lon': 1491652373, 'alt': 584080, 'relative_alt': -5, 'vx': 1, 'vy': -1, 'vz': 0, 'hdg': 35194}
{'mavpackettype': 'VFR_HUD', 'airspeed': 0.02374367043375969, 'groundspeed': 0.02374294400215149, 'heading': 351, 'throttle': 0, 'alt': 584.0800170898438, 'climb': 0.00018553633708506823}
...
Описания команд:
Pymavlink · GitBook
Запуск виртуальной машины
На примере windows

Установка всего по-дефолту. Потом запускаем

Выбор ova, потом:

После импорта запускаем

Пароль root
Проверяем запуск SITL+MavProxy, иконка AP слева:

Разработка
Pycharm и виртуальное окружение
Community-версия:
Releases · JetBrains/intellij-community

Настройка виртуального окружения

from pymavlink import mavutil
mav = mavutil.mavlink_connection('udp:localhost:14550')
mav.wait_heartbeat()
print(f"Heartbeat from system (system {mav.target_system} component {mav.target_component})")