Исследование бортовой системы
Отчёт об исследовании вычислительного модуля Пионер Мини 2 (pioneermini@10.42.0.1), выполненном в режиме «только чтение» по SSH. Описаны аппаратная платформа, камеры и сенсоры, сеть, службы systemd, карта портов, полётная архитектура, gRPC API, видео, нейроускоритель и ключевые пути файловой системы.
Данные получены в SSH-сессии к бортовому компьютеру; файлы, службы, сетевые настройки и полётное ПО на борту не изменялись. Это снимок одной прошивки (PioneerOS 0.9.0, ядро сборки 20.02.2026): часть значений (температуры, загрузка, счётчики трафика, время работы) меняется от запуска к запуску и приведена как ориентир.
1. Общая идентификация
| Параметр | Значение |
|---|---|
| Hostname / модель | pioneermini / PioneerMini 2 |
| Device Tree | model PioneerMini 2, compatible geoscan,pioneermini2 + rockchip,rk3576 |
| ОС | PioneerOS (Ubuntu 24.04.4 LTS, noble) |
| Версия образа | /etc/armbian-release: BOARD pioneer-mini2, VERSION/REVISION 0.9.0, commit d0a28f33d, ARCH arm64 |
| Ядро | 6.1.99-geoscan-sdk-rk3576 (aarch64), сборка #1 SMP Fri Feb 20 13:37:44 UTC 2026 |
| machine-id | 47a9b5dca98d49008d1850e9c7da0a4d |
| Загрузчик | U-Boot (linux-u-boot-pioneer-mini2-geoscan-sdk 0.9.0), DTB rockchip/rk3576-pioneermini2.dtb |
| Время | UTC; служба chrony запущена, но без источников синхронизации, системные часы не синхронизированы, RTC 2021-01-01 |
2. Аппаратная платформа (Rockchip RK3576)
| Компонент | Значение |
|---|---|
| CPU | 8 ядер: 4×Cortex-A72 (CPU part 0xd08) + 4×Cortex-A53 (0xd03), nproc = 8 |
| RAM / Swap | 3.8 ГиБ (MemTotal 3995012 кБ) / zram0 1.9 ГиБ |
| ПЗУ | eMMC 28.9 ГБ (mmcblk0), корень на mmcblk0p1 ext4 (занято 5.0 ГБ, 19%) |
| GPU / NPU | Mali-G52 (libmali-bifrost-g52) / RKNPU (librknnrt) |
- zram: zram0 — swap 1.9 ГиБ; zram1 (50 МБ) смонтирован на
/var/log(armbian-zram-config) для снижения износа eMMC. - Термозоны (
/sys/class/thermal):soc-thermal,bigcore-thermal,little-core-thermal,ddr-thermal,npu-thermal,gpu-thermal. В снимке ~57–61 °C; порог перегрева для флага gRPC — 80 °C. - Периферия:
gpiochip0…5; I²C-шиныi2c-0,1,2,3,6; UARTttyS3,ttyS5; дальномер/dev/vi5300; видеоконвейерvideo0…48+video-dec0/video-enc0. - CAN0: контроллер
rk3576_canfd, битрейт ≈1 Мбит/с (996644), состояние ERROR-ACTIVE, активный обмен. - USB: два OTG-контроллера, сконфигурированы как два RNDIS-гаджета (
usb0иusb1) скриптомsetup_twousbotg.sh. - Сервопривод:
pwm-setup.service+pwm-servo.service, управление через Unix-сокет/tmp/servo.sock; аппаратный PWM через sysfs (файла/dev/pwmchip*в снимке нет).
3. Камеры и сенсоры
| Устройство | Модель | Подключение / роль |
|---|---|---|
| Основная камера | OV13B10 13 Мпикс | i2c-2; RKISP/RKCIF → rkvpss; программируемый поток 1080×720@30, запись до 4K |
| Оптический поток | OV9281 (глобальный затвор) | i2c-0; 1280×800@60 |
| Дальномер ToF | VI5300 | i2c-0, ioctl через /dev/vi5300 |
| Полётные сенсоры | IMU / магнитометр / баро / GPS / RC | через полётный контроллер по PlazLink (не через Linux) |
Отображение видеоконвейера (имена из /sys/class/video4linux): video41 = rkvpss_scale0 (record_device основной камеры), video42 = scale1, video44 = scale3 (программируемый поток основной камеры, crop 1080×720), video46 = scale1 (запись/поток оптической камеры), video47 = scale2 (оптическая камера, 1280×800), video48 = scale3.
4. Сеть
| Интерфейс | Режим | Адрес | Примечание |
|---|---|---|---|
wlan0 | AP (hotspot) | 10.42.0.1/24 | точка доступа, 5 ГГц ch36 (5180 МГц), SSID PMINI2-…, MAC 88:00:33:77:ad:e1 |
usb0 | RNDIS | 10.42.1.1/24 | USB-шлюз (MAC 42:6c:84:78:26:78) — по нему подключается ПК |
usb1 | RNDIS | — | сконфигурирован, DOWN |
can0 | CAN-FD | — | 1 Мбит/с, полётная шина |
Важно про адреса: по Wi-Fi коптер доступен как 10.42.0.1 (wlan0), по USB-кабелю — как 10.42.1.1 (usb0). Портал Pioneer Code и SSH слушают на всех интерфейсах, поэтому работают по любому из адресов.
- Netplan → NetworkManager; соединения:
hotspot(wlan0),netplan-usb0,netplan-usb1,client-usb0. - Конфиг
/boot/firmware/netconfig:HOTSPOT=yes,HOTSPOT_BAND=5, клиентский Wi-FiWIFI_SSID=ubnt. SSID точки доступа формируется автоматически какPMINI2-<случайный суффикс>. - SSH: порт 22,
PermitRootLogin yes,PasswordAuthentication yes. - DNS/DHCP на USB- и Wi-Fi-интерфейсах раздаёт dnsmasq (порты 53/67).
5. Службы systemd
Отказов служб в снимке нет. Запущенные сервисы:
plazlink-core → PlazLink-мост (ttyS3, 115200)
grpc-server → управление БПЛА (gRPC :50051)
media-server → mediamtx (RTSP/WebRTC/SRT/RTP)
motion-opt → обработка оптического потока
pwm-servo + pwm-setup → привод сервопривода
pm2-power-manager → защита серво по току/GPIO
servo-rc-trigger → серво по RC-каналу
setup-can → инициализация can0 (1 Мбит/с)
usb-gadget → два RNDIS-гаджета
manage-connection → hotspot / клиент Wi-Fi
model-registry → реестр ИИ-моделей (:7777)
pioneer-bricks → блочное программирование (:2020)
pioneer-code-web-menu → веб-меню Pioneer Code (:9090)
pm2-ctrl-server → системный контроль (:17222)
pm2-test-server → онборд-тесты (:4000)
dufs-recordings → файловый сервер (:5000)
rkaiq_3A → 3A-обработка камер
code-server@… → VS Code в браузере (:9999)Помимо них работают системные: chrony, cron, dbus, NetworkManager, wpa_supplicant, rpcbind, rsyslog, vnstat, unattended-upgrades, rng-tools, user@1000 и сессии getty.
6. Карта портов и сервисов
| Порт | Процесс | Назначение |
|---|---|---|
| 22 | sshd | SSH |
| 20556 | plazlink-server-rs | мост PlazLink ↔ TCP (Pioneer SDK по TCP) |
| 50051 | python3 grpc-server | gRPC ControlService |
| 8554 | mediamtx | RTSP |
| 8889 | mediamtx | WebRTC (HTTP) |
| 8000/8001/8189/8890 | mediamtx | RTP / SRT / UDP |
| 9997 | mediamtx | REST API стримера |
| 2020 | pioneer-bricks | Web-UI блочного программирования |
| 9090 | web_menu.py | Web-меню Pioneer Code |
| 7777 | model_registry.py | реестр ИИ-моделей |
| 4000 | pm2-test-server | онборд-тесты (actix/WS) |
| 17222 | pm2-ctrl-server | системный контроль (axum) |
| 5000 | dufs | файлы /mnt/media |
| 9999 | code-server | VS Code в браузере |
| 53/67 | dnsmasq | DNS/DHCP интерфейсов |
| 111 | rpcbind | RPC (NFS-клиент) |
7. Полётная архитектура (ядро системы)
- Полётный контроллер подключён по UART
/dev/ttyS3, 115200 8N1. Протокол — PlazLink (Rust-серверplazlink-server-rs 0.2.1, порт 20556). - Pioneer SDK 2 0.15.1 — основной API:
Pioneer,Camera,ImageViewer,ServoCamera,RecorderControl. Ядро протокола — Cython-модульproto(Component/Field/FieldSet). Основной файл —piosdk2.py. - Компоненты телеметрии:
Battery(charge/voltage/temperature),SensorMonitor(voltage, flags),UavMonitor.mode,SmartBoard.rcChan/rcServo,Allystar(GNSS),LpsMonitor/USNav_module(локальная навигация). board_config.json(см. §8): board_type 23, серво −80…+30°, ranger/grab = true, cargo/flashlight = false.- SDK: arm / disarm / takeoff / land,
go_to_local_point/go_to_local_point_body_fixed/go_to_global_point, скорость и рыскание, каналы RC, события (POINT_REACHED,LOW_VOLTAGE,ENGINES_STARTED), IMU/GPS/высота/дальномеры, LED, параметры автопилота.
8. gRPC API (ControlService)
Файл /opt/grpc-server/mproto/v2/pm2.proto, пакет mproto.v2, служба ControlService на порту 50051. Сервер (/opt/grpc-server/main.py) поднимает Pioneer из pioneer_sdk2 через --plazlink-host 127.0.0.1.
| RPC | Сообщения / назначение |
|---|---|
GetTelemetry | Ответ: battery_voltage, battery_info (%), battery_temp, speed, height_opt (ToF), state |
GetStatus | autopilot (флаги SensorMonitor) + linux: 0x1 — перегрев, 0x2 — неисправность серво, биты 0xC — свободное место (00 норма, 01 <25%, 10 <5%, 11 <0.5%) |
StreamControls | Стрим RC: aileron, elevator, throttle, rudder ∈ [−1…1] / [0…1], mode; 100 Гц, таймаут 5 с |
FlyCommand | oneof: arm / disarm / land / takeoff |
VideoCommand | oneof: start/stop стрима, start/stop записи, фото; разрешение enum Resolution = FOURK / TWOK / FULLHD |
ServoCommand | angle (sint32, комментарий в proto: [−90…30]) + Priority (UNSPECIFIED / MAX / DEFAULT / MIN); фактически через Unix-сокет /tmp/servo.sock |
Перечисления: FlightState = NULL, ARMED, TAKEOFF_COMPLETED, POINT_REACHED, LANDED, DISARMED. Режимы RC (RC_MODES в main.py): STABILIZE, ALTHOLD, LOITER, HEADLESS, PROGRAMM.
Лог /tmp/jump_log: Pioneer connected to 127.0.0.1:20556 (persistent connection), SensorMux_rc set to 0: True, ControlService listening on [::]:50051.
9. Конфигурация борта (board_config.json)
| Параметр | Значение |
|---|---|
| board_type / board_name | 23 / «Pioneer Mini 2»; gtlp_version 2 |
| Основная камера | driver gstreamer; программируемый поток 1080×720@30; записываемые: 3840×2160, 2560×1440, 1920×1080, 1280×720 (все @30); record_device 41 |
| Оптическая камера | 1280×800@60, program + recordable, record_device 46 |
| Сервопривод | min −80, max 30 (градусы) |
| Датчики | battery (SensorMonitor.voltage, Battery.temperature), rc (SmartBoard.rcChan), gnss Allystar, lps LpsMonitor + USNav_module |
| Полезная нагрузка | ranger true, grab true, cargo false, flashlight false, recorder true |
10. Видео и запись
- GStreamer 1.24.2 + патчи Geoscan, MPP-энкодер
mpph264enc, RGA. - mediamtx поднимает по требованию:
maincamera→ /dev/video44 (crop 1080×720@30),optcamera→ /dev/video47 (1280×800@30). pm2-jmp-camera-controlпубликует потоки__jmp_stream(video42, 1920×1088) и__jmp_opt(video46, 1280×800). WebRTC:http://10.42.0.1:8889/MAIN/,/OPT/; RTSP:rtsp://10.42.0.1:8554/<путь>.- mediamtx REST API — порт
9997(вmediamtx.ymlauthMethod: internal, пользовательanyможет publish/read). motion-optзапускаетmvopt.sh— тракт обработки оптического потока для навигации.- Записи/фото:
/mnt/media/{videos,photos}(права 777), раздача через dufs (5000). В снимке файлов нет.
11. ИИ / NPU
pioneer-rknn1.6.3,rknn-toolkit-lite22.3.0,librknnrt2.3.0.model-registry1.3.4 (:7777): архитектурыyolov8,yolov8-pose,PP-OCRv5_mobile_det,PP-OCRv5_mobile_rec.- Веса в
/usr/local/bin/model-registry/models(list.json):yolov8n.rknn(yolov8),yolov8n_pose.rknn(yolov8-pose),eslav_PP-OCRv5_mobile_rec_h48w960.rknn,PP-OCRv5_mobile_det_hw640.rknn. - В составе Python есть
numpy1.26.4,pillow10.2.0,OpenCV4.10.0 (пакетopencv),psutil,ruamel.yaml.
12. Инструменты разработки и пользователи
- code-server 4.105.1 (:9999), рабочая папка
/home/pioneermini/workspace: клон репозиторияpioneer-sdk2-exampleиdata.yml(калибровка камеры). pioneer-bricks2.1.1 (:2020) иpioneer-code-web-menu2.2.1 (:9090) — визуальное/блочное программирование.- Пользователь
pioneermini(uid 1000) в группахsudo, tty, disk, dialout, audio, video, plugdev, users, netdev, input, systemd-journal;sudoтребует пароль. Root-SSH разрешён,authorized_keysпуст.
Безопасность по умолчанию: парольная аутентификация + root-логин по SSH, отсутствие firewall, открытые без авторизации dufs / mediamtx / веб-UI (2020, 9090, 7777) на USB- и Wi-Fi-интерфейсах. Это удобно для учебного класса, но требует доверенной сети.
13. Файловая система и обновления
/— ext4 на eMMC;/tmp— tmpfs;/var/log— zram (сбрасывается при перезагрузке);/dev/shm— tmpfs 2 ГБ.- Пакеты Geoscan:
aic8800-*(Wi-Fi/BT),camera-engine-rkaiq-rk3576,iqfiles-mini2,gstpm2-image-processing,linux-*-geoscan-sdk-rk3576 0.9.0,motion-opt 1.7.5,plazlink-server-rs+plazlink-flasher,pm2-*,pioneer-bricks,pioneer-code-codeoss-mini2,pioneer-code-web-menu,pioneer-rknn,model-registry,dufs+dufs-geoscan-assets-mini2,pionet 0.2.1. - Обновления:
unattended-upgradesактивен; присутствует cloud-init. - Конфиги:
/boot/firmware/netconfig,/etc/NetworkManager/system-connections/,/opt/configs/code/*.json,/usr/local/etc/mediamtx.yml. - Каталог
/opt:configs/,grpc-server/,scripts/,tests/. Скрипты борта:can.sh,pwm-setup.sh,setup_twousbotg.sh,setup-hotspot.sh,manage-network.sh,internet-usb-client.sh,mvopt.sh,servo_example.py,servo_rc_trigger.py,test_nn.py, root-onlyget_uidиrange_calibration. Тесты камер:/opt/tests/cam/{maincam,optcam,lasercam,servocam,eepromcam,util}.py.
14. Наблюдения и потенциальные риски
Часы: chrony запущен без источников, системное время и RTC не синхронизированы — это влияет на метки файлов, логов и на TLS-соединения.
Слабая защита: root-SSH, парольная аутентификация, нет firewall, открытые без аутентификации dufs/mediamtx/веб-UI на USB- и Wi-Fi-интерфейсах.
Wi-Fi hotspot виден всем; пароль по умолчанию — geoscan123 (если не переопределён). Пароль sudo совпадает с Wi-Fi-паролем прошивки — единая точка компрометации.
Нагрузка в основном от GStreamer-пайплайнов (H.264 двух камер), rkaiq_3A_server и python-сервисов.
/var/log живёт в zram и не сохраняется между перезагрузками — для длительного анализа используйте journalctl или rsyslog в реальном времени.
15. Сводка ключевых путей
| Раздел | Пути |
|---|---|
| SDK | /usr/local/lib/python3.12/dist-packages/pioneer_sdk2/ (piosdk2.py, board_config.json, modules/) · /usr/lib/python3/dist-packages/proto*.so |
| gRPC / proto | /opt/grpc-server/ (main.py, mproto/v2/pm2.proto, handlers/, servo/, thermal/) |
| Скрипты борта | /opt/scripts/ (can.sh, pwm-setup.sh, setup_twousbotg.sh, manage-network.sh, test_nn.py…) |
| Сервисы | /etc/systemd/system/*.service, /usr/lib/systemd/system/{grpc-server,pwm-servo,pm2-*}.service |
| Модели ИИ | /usr/local/bin/model-registry/models/ |
| Медиа / сокеты | /mnt/media/{photos,videos}; /tmp/{maincamera,optcamera,servo.sock}, /tmp/jump_log |
| Рабочая папка | /home/pioneermini/workspace/ (pioneer-sdk2-example, data.yml) |
| Логи | journalctl, /var/log/syslog, /var/log/auth.log, /var/log/kern.log (в zram) |