Разбор: get_telemetry

← Все разборы примеров

Источник: репозиторий pioneer-team/pioneer-sdk2-example (GitFlic). Справочник по классам API — на странице «Pioneer SDK 2».

Что внутри и запуск

Директория из 17 скриптов: каждый читает одну группу телеметрии методом класса Pioneer, печатает её в цикле и закрывает соединение при завершении. Это «читающие» примеры — полётов и событий нет, с них удобно начинать после быстрого старта:

python3 get_battery_status.py

Циклы останавливаются сочетанием Ctrl+C.

Скрипты и методы

СкриптМетод SDKДанные
get_accel.pyget_accel()Ускорение по осям X, Y, Z
get_altitude.pyget_altitude()Высота
get_battery_status.pyget_battery_status()Напряжение и температура аккумулятора
get_dist_sensor.pyget_dist_sensor_data()Данные дальномера
get_global_position_gps.pyget_global_position_gps()GPS-координаты
get_global_velocity.pyget_global_velocity_gps()Скорость по GPS
get_local_position.pyget_local_position_lps()Локальная позиция LPS
get_local_velocity_lps.pyget_local_velocity_lps()Локальная скорость LPS
get_local_yaw_lps.pyget_local_yaw_lps()Курс LPS
get_mag.pyget_mag()Магнитометр
get_motors_rpm.pyget_motors_rpm()Обороты двигателей
get_nav_status_gps.pyget_nav_status_gps()Статус GPS-навигации
get_nav_status_lps.pyget_nav_status_lps()Статус LPS-навигации
get_nav_system.pyget_nav_system()Активная система навигации
get_optical_data.pyget_optical_data()Данные оптической навигации
get_orientation.pyget_orientation()Roll, pitch, yaw
get_satellites_count.pyget_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()) раскручивает винты сразу, поэтому перед запуском проверьте окружение.