Pion¶
Примечание
Мы используем uv
Вместо «python script.py» в инструкции будет использоваться «uv run script.py»
SDK для управления дронами geoscan pioneer base по протоколу MAVLink.
Поддерживает дроны с модификацией ультразвуковой системы навигации локус и с Raspberry Pi Zero 2W (модификация «Арена») или на radxa zero 3w.
Тесты проводились также на pioneer mini, но могут быть ошибки в некоторых методах.
Перед работой с модулем рекомендуется загрузить рекомендуемые параметры через Pioneer Station.
Установка¶
pip install pionsdk
pip install git+https://github.com/OnisOris/pion
Установка для разработки¶
Данный способ требуется только для модификации модуля. Для использования устанавливайте через pip.
pip install -e .
Подключение¶
Для подключения к дрону создайте экземпляр класса Pion.
Частый IP для реального дрона: 10.1.100.[номер] Порт: 5656
В примере указан IP и порт для Геоскан симулятора:
from pion import Pion
ip = "127.0.0.1"
port = 8000
drone = Pion(ip=ip, mavlink_port=port)
Рой дронов¶
В pionsdk реализовано роевое управление через класс SwarmCommunicator.

Схематичное отображение дронов и векторов управления

Автоустановка swarmserver на Radxa¶
curl -o pion_install.sh https://raw.githubusercontent.com/OnisOris/pion/refs/heads/dev/scripts/pion_swarm_radxa_install.sh
chmod +x pion_install.sh
sudo ./pion_install.sh
После установки достаточно запустить /scripts/vserver.py
и pionsrv
для управления роем.
Консоль управления роем¶
После установки необходимо прописать команду
start_control_server
Визуализация¶
Для запуска вам нужен uv:
pip install uv
Или matplotlib:
pip install matplotlib
После установки запустите
2D + 3D
uv run ./scripts/4xvserver.py
2D
uv run ./scripts/vserver.py
Подробное описание с примерами¶
Дополнительное ПО¶
- Установка модуля Pion
- Описание работы скриптов
- Pion
Pion
Pion.__init__()
Pion.arm()
Pion.disarm()
Pion.goto()
Pion.goto_from_outside()
Pion.goto_process()
Pion.goto_to_autopilot()
Pion.goto_yaw()
Pion.land()
Pion.led_control()
Pion.led_custom()
Pion.point_tracking()
Pion.poweroff()
Pion.rc_while()
Pion.reboot_board()
Pion.send_rc_channels()
Pion.send_speed()
Pion.set_rc()
Pion.set_v()
Pion.sland()
Pion.speed
Pion.stakeoff()
Pion.start_track_point()
Pion.stop()
Pion.takeoff()
Pion.trajectory_tracking()
Pion.trajectory_tracking_process()
Pion.v_while()
Pion.wait_point()
- sPion
Spion
Spion.__init__()
Spion.attitude
Spion.borders()
Spion.goto()
Spion.goto_body()
Spion.goto_from_outside()
Spion.land()
Spion.position
Spion.position_controller()
Spion.send_rc_channels()
Spion.send_speed()
Spion.set_body_velocity()
Spion.speed
Spion.start_message_handler()
Spion.stop()
Spion.stop_message_handler()
Spion.takeoff()
Spion.velocity_controller()
- aPion
- Simulator
- Pio
DroneBase
DroneBase.__init__()
DroneBase.arm()
DroneBase.attitude
DroneBase.attitude_write()
DroneBase.check_battery()
DroneBase.disarm()
DroneBase.goto_yaw()
DroneBase.heartbeat()
DroneBase.land()
DroneBase.led_control()
DroneBase.position
DroneBase.position_controller()
DroneBase.print_information()
DroneBase.print_latest_logs()
DroneBase.reboot_board()
DroneBase.save_data()
DroneBase.send_rc_channels()
DroneBase.set_v()
DroneBase.sland()
DroneBase.stakeoff()
DroneBase.takeoff()
DroneBase.xyz
DroneBase.yaw
- Controller