Разбор: get_telemetry
Источник: репозиторий pioneer-team/pioneer-sdk2-example (GitFlic). Справочник по классам API — на странице «Pioneer SDK 2».
Что внутри и запуск
Директория из 17 скриптов: каждый читает одну группу телеметрии методом класса Pioneer, печатает её в цикле и закрывает соединение при завершении. Это «читающие» примеры — полётов и событий нет, с них удобно начинать после быстрого старта:
python3 get_battery_status.pyЦиклы останавливаются сочетанием Ctrl+C.
Скрипты и методы
| Скрипт | Метод SDK | Данные |
|---|---|---|
get_accel.py | get_accel() | Ускорение по осям X, Y, Z |
get_altitude.py | get_altitude() | Высота |
get_battery_status.py | get_battery_status() | Напряжение и температура аккумулятора |
get_dist_sensor.py | get_dist_sensor_data() | Данные дальномера |
get_global_position_gps.py | get_global_position_gps() | GPS-координаты |
get_global_velocity.py | get_global_velocity_gps() | Скорость по GPS |
get_local_position.py | get_local_position_lps() | Локальная позиция LPS |
get_local_velocity_lps.py | get_local_velocity_lps() | Локальная скорость LPS |
get_local_yaw_lps.py | get_local_yaw_lps() | Курс LPS |
get_mag.py | get_mag() | Магнитометр |
get_motors_rpm.py | get_motors_rpm() | Обороты двигателей |
get_nav_status_gps.py | get_nav_status_gps() | Статус GPS-навигации |
get_nav_status_lps.py | get_nav_status_lps() | Статус LPS-навигации |
get_nav_system.py | get_nav_system() | Активная система навигации |
get_optical_data.py | get_optical_data() | Данные оптической навигации |
get_orientation.py | get_orientation() | Roll, pitch, yaw |
get_satellites_count.py | get_satellites_count() | Количество спутников GPS и ГЛОНАСС |
Общий каркас — get_battery_status.py
Все скрипты группы устроены одинаково: соединение → бесконечный цикл чтения с паузой 1 с → закрытие в finally:
from pioneer_sdk2 import Pioneer # импортируем класс Pioneer из библиотеки pioneer_sdk2
import time # библиотека time содержит функции для работы со временем
drone = Pioneer() # создаем экземпляр класса Pioneer, устанавливаем соединение
try: # основной код находится внутри блока try
while True: # запускаем бесконечный цикл
print(drone.get_battery_status()) # вызываем метод
time.sleep(1) # ставим паузу на 1 секунду
finally: # блок finally выполнится при завершении программы
drone.close_connection() # закрываем соединение
Если датчик или навигационный модуль недоступен, пример выведет сообщение вместо падения с ошибкой.
Распаковка значений — get_local_position.py
Часть методов возвращает массив, откуда значения берут по индексу:
try: # основной код находится внутри блока try
while True: # запускаем бесконечный цикл
# получаем текущие координаты дрона в метрах
array_of_coordinates = drone.get_local_position_lps()
# выводим координаты x, y, z в консоль
print(f'x={array_of_coordinates[0]} , y={array_of_coordinates[1]}, z={array_of_coordinates[2]}')
# print(f'x={array_of_coordinates[0]}') # пример вывода координаты x отдельно
time.sleep(1) # ставим паузу на 1 секунду
get_local_position_lps() возвращает массив [x, y, z] в метрах в системе локальной навигации (LPS). Аналогично устроены скорость и курс LPS — см. справочник.
Форматированный вывод — get_dist_sensor.py
try: # основной код находится внутри блока try
while True: # запускаем бесконечный цикл
distance = drone.get_dist_sensor_data() # получаем данные с дальномера
print(f'Расстояние: {distance:.2f} м') # выводим расстояние в консоль
time.sleep(1) # ставим паузу на 1 секунду
finally: # блок finally выполнится при завершении программы
drone.close_connection() # закрываем соединениеЗдесь показан и форматированный вывод f-строкой: print(f'Расстояние: {distance:.2f} м'). По README группы, если датчик или модуль недоступен, пример выведет сообщение вместо падения с ошибкой.
Особый случай — get_motors_rpm.py
Единственный скрипт группы, который включает моторы: он вызывает arm(), читает обороты двигателей в цикле, а в finally выключает их. Внимание: включение (arm()) раскручивает винты сразу, поэтому перед запуском проверьте окружение.