🎚️ RC-каналы
send_rc_channels.py
Отправка нейтральных RC-каналов
rc_channels_examples/send_rc_channels.pyНастраивает автопилот и постоянно отправляет нейтральные значения RC-каналов SDK2.
Сначала через set_param() задаются параметры автопилота, переводящие источник RC-команд на SDK, затем в бесконечном цикле с интервалом 0.05 с отправляются нейтральные каналы. Это минимальный каркас для ручного управления.
Как работает
- Создать
Pioneer(). - Установить параметры
Copter_man_rcMode0..2,Copter_flyWithoutRc,SensorMux_rc. - В цикле вызывать
send_rc_channels(...)с нейтральными значениями. - Пауза 0.05 секунды между отправками.
- В
finallyзакрыть соединение.
Используемые методы SDK
Ключевые параметры
| Параметр | Значение | Описание |
|---|---|---|
SEND | 0.05 с | Интервал отправки каналов. |
Copter_man_rcMode0 | 6.0 | Режим управления для положения 0. |
SensorMux_rc | 2.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() # закрываем соединение