LEGO хаб Powered Up: двусторонний обмен данными

LEGO хаб Powered Up: двусторонний обмен данными

Электронные наборы LEGO давно переросли роль простых конструкторов. Современная линейка Powered Up представляет собой модульную робототехническую экосистему: интеллектуальные хабы, моторы, датчики и светодиоды, управляемые через Bluetooth и программируемые — ранее подобное было доступно лишь в Mindstorms и Education.

Но как взять «сырые» данные с этих умных блоков и использовать их в сторонних приложениях?

Стандартное приложение LEGO Powered Up предлагает визуальный редактор на основе блоков и виртуальные пульты. Оно позволяет объединять до четырёх хабов, выстраивать логику их работы и собирать сложные алгоритмы — от автономных роботов до беспилотных грузовиков и автоматизированных мини-железных дорог.

Однако у официального ПО есть два серьёзных ограничения:
1. Закрытый код: нет прямого доступа к телеметрии в реальном времени — нельзя выводить данные на ПК, строить графики или сохранять сигналы.
2. Постоянная привязка к смартфону или планшету: hub должен быть включён в приложение, что серьёзно ограничивает автономность.

К счастью, экосистема Powered Up построена на открытом BLE-протоколе, а LEGO опубликовала спецификацию LWP3 (LEGO Wireless Protocol v3) (lego.github.io/lego-ble-wireless-protocol-docs/), что позволяет сторонним разработчикам создавать свои решения.

Одним из ярких проектов стала прошивка и платформа PyBricks (pybricks.com), открывающие весь потенциал Powered Up. Вместо родной ОС хаб работает как автономный микроконтроллер с интерпретатором MicroPython и веб-IDE прямо в браузере.

PyBricks
Интерфейс веб-IDE PyBricks

Мы решили продемонстрировать, как организовать передачу данных с LEGO-хаба на ПК и использовать их для анализа.

Наш эксперимент:

  • Перепрошили Technic Hub альтернативной прошивкой PyBricks.
  • Собрали простую U-образную конструкцию с обратной связью.
  • Написали скрипт на MicroPython, который регулярно выдаёт угол наклона.
  • С помощью Python-библиотеки Bleak подключились к хабу по BLE.
  • Считали и визуализировали данные в реальном времени.

В качестве датчика мы использовали наклон на ось из набора WeDo 2.0, закрепив его на «качели», приводимые в движение мотором. Датчик измеряет тангаж в диапазоне от –45° до +45°.

Конфигурация установки
Конструкция: датчик наклона слева, мотор справа

Далее — код, загружаемый в перепрошитый хаб. Он непрерывно считывает угол, вычисляет ошибку и управляет мотором по пропорциональному закону.

from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Motor, TiltSensor
from pybricks.parameters import Port
from pybricks.tools import wait

hub = TechnicHub()
motor = Motor(Port.A)
tilt = TiltSensor(Port.B)

target = 0
Kp = 3
motor.run(30)
wait(1000)

while True:
    angle = tilt.tilt()[0] - 2
    error = angle - target
    speed = max(min(Kp * error, 75), -75)
    motor.run(speed)
    print(angle)
    if abs(angle) == target:
        stable = sum((tilt.tilt()[0] - 2) for _ in range(10))
        if stable == target * 10:
            print("УСТОЙЧИВО, циклов:", _)
            break
    wait(50)

Команда motor.run(speed) задаёт скорость вращения в градусах в секунду. Небольшие скорости ощущаются рывками, но для демонстрации это не критично.

Работа установки
Стабилизация положения «качели»

После отладки мы провели серию испытаний с разными значениями Kp, а в коде оставили только один print() для передачи угла на ПК.

Для приёма и визуализации телеметрии на компьютере использовали библиотеку Bleak. Алгоритм простой:

  1. Сканируем BLE-устройства (await BleakScanner.discover()).
  2. Находим хаб по имени.
  3. Нажатием кнопки стартуем код PyBricks на устройстве.
  4. Подписываемся на виртуальный UART-канал через BLE-уведомления.
  5. Декодируем строки, фильтруем числа и отправляем в очередь для графика.
Подробнее о PC-части

Подключившись, запускаем client.start_notify(CHAR_UUID, callback), где callback декодирует и очищает входящую строку, оставляя только число. Величина вместе с меткой времени помещается в очередь (queue.put((t, value))), а графический процесс через matplotlib в интерактивном режиме выводит живой график.

График телеметрии
Передача данных и построение графика «угол время»

Можно выводить несколько значений через запятую, а на PC-стороне просто разбивать строку и преобразовывать компоненты в float.

Сравнение Kp
Изменение угла во времени при разных Kₚ

Самая эффективная и быстрая стабилизация достигалась при Kₚ = 2. Более высокие коэффициенты приводили к выраженному перерегулированию и увеличению времени сходимости.

Таким образом, мы провели мини-лабораторную работу по автоматическому управлению, получив данные для анализа — от построения фазового портрета до бифуркационных диаграмм.

LEGO с прошивкой PyBricks и библиотекой Bleak превращается в полноценный исследовательский инструмент. При этом не нужны дорогие комплекты Education — достаточно доступных Technic или City Hub. Мы опробовали и Technic Hub Control+, и более простой City Hub (88009) — оба отлично работают.

Надеемся, эти материалы подскажут новые идеи для экспериментов с привычным конструктором.

 

Источник

Читайте также