🎚️ RC-каналы send_rc_channels.py

Отправка нейтральных RC-каналов

rc_channels_examples/send_rc_channels.py

Настраивает автопилот и постоянно отправляет нейтральные значения RC-каналов SDK2.

Сначала через set_param() задаются параметры автопилота, переводящие источник RC-команд на SDK, затем в бесконечном цикле с интервалом 0.05 с отправляются нейтральные каналы. Это минимальный каркас для ручного управления.

Как работает

  1. Создать Pioneer().
  2. Установить параметры Copter_man_rcMode0..2, Copter_flyWithoutRc, SensorMux_rc.
  3. В цикле вызывать send_rc_channels(...) с нейтральными значениями.
  4. Пауза 0.05 секунды между отправками.
  5. В finally закрыть соединение.

Используемые методы SDK

Ключевые параметры

ПараметрЗначениеОписание
SEND0.05 сИнтервал отправки каналов.
Copter_man_rcMode06.0Режим управления для положения 0.
SensorMux_rc2.0Источник RC-команд от SDK.

Запуск

cd rc_channels_examples
python3 send_rc_channels.py

Результат

  • Постоянная отправка нейтральных RC-каналов.

Безопасность

  • Перед полётом убедитесь, что RC-источник действительно переключён на SDK.

Примечания

  • Каналы нужно отправлять постоянно, иначе связь теряется.

Требования

  • Параметры автопилота доступны для записи.

Полный исходный код

Показать send_rc_channels.py
from pioneer_sdk2 import Pioneer        # импортируем класс Pioneer из библиотеки pioneer_sdk2
import time                             # библиотека time содержит функции для работы со временем

RC_PARAMETERS = {                       # параметры автопилота для управления через RC-каналы
    "Copter_man_rcMode0": 6.0,          # режим управления для положения 0
    "Copter_man_rcMode1": 3.0,          # режим управления для положения 1
    "Copter_man_rcMode2": 3.0,          # режим управления для положения 2
    "Copter_flyWithoutRc": 1.0,         # разрешаем полет без аппаратного пульта
    "SensorMux_rc": 2.0,                # выбираем источник RC-команд от SDK
}


def setup_rc_parameters(drone):         # функция настраивает автопилот для приема RC-каналов от SDK
    for name, value in RC_PARAMETERS.items(): # перебираем параметры ручного управления
        if not drone.set_param(name, value):  # устанавливаем очередной параметр автопилота
            raise RuntimeError(f"Не удалось установить параметр {name}") # прерываем запуск, если параметр не применился


drone = Pioneer()                       # создаем экземпляр класса Pioneer, устанавливаем соединение

try:                                    # основной код находится внутри блока try
    setup_rc_parameters(drone)          # настраиваем автопилот перед отправкой RC-каналов
    while True:                         # запускаем бесконечный цикл
        drone.send_rc_channels(         # отправляем значения каналов пульта
            channel_1=0,                # правый стик: влево -1, центр 0, вправо 1
            channel_2=0,                # правый стик: вперед -1, центр 0, назад 1
            channel_3=0,                # левый стик: вверх 1, центр 0, вниз -1
            channel_4=0,                # левый стик: налево 1, центр 0, направо -1
            channel_5=1,                # тумблер SWC: вверх 0, центр 1, вниз 2
            channel_6=0,                # тумблер SWD: вверх 0, вниз 2
            channel_7=1,                # тумблер SWB: вверх 0, центр 1, вниз 2
            channel_8=0                 # тумблер SWA: вверх 0, вниз 2
        )

        time.sleep(0.05)                # ставим паузу на 0.05 секунды

finally:                                # блок finally выполнится при завершении программы
    drone.close_connection()            # закрываем соединение