Структура проекта
При написании программ для роботов важно поддерживать порядок в коде. В Pybricks есть два основных подхода к организации проекта.
Вариант 1: Один файл (Monolithic)
Самый простой способ — писать весь код в одном файле main.py. Это подходит для небольших задач и учебных примеров.
Структура main.py:
1. Импорты библиотек.
2. Инициализация устройств (хаб, моторы).
3. Объявление функций.
4. Основной цикл или логика программы.
# main.py
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
# Инициализация
hub = PrimeHub()
motor = Motor(Port.A)
# Функции
def run():
motor.run_angle(500, 360)
# Логика
print("Start")
run()
print("End")
Вариант 2: Разделение на модули (Modular)
Для больших проектов (например, WRO или FLL) код в одном файле становится слишком длинным и запутанным. Удобнее разбить его на несколько файлов.
Рекомендуемая структура:
1. init.py — инициализация робота (порты, настройки).
2. func.py — функции движения и логики.
3. main.py — основной сценарий запуска.
Как это работает
Мы используем from ... import *, чтобы все переменные и функции из одного файла были доступны в другом.
1. Файл init.py
Здесь мы создаем объекты моторов и датчиков.
# init.py
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.robotics import DriveBase
# Инициализация хаба и устройств
hub = PrimeHub()
left_motor = Motor(Port.A)
right_motor = Motor(Port.B)
# Создаем базу
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=112)
2. Файл func.py
Здесь мы пишем функции. Чтобы они видели робота, мы импортируем всё из init.py.
# func.py
from init import *
def square(size):
for i in range(4):
drive_base.straight(size)
drive_base.turn(90)
def beep_and_wait():
hub.speaker.beep()
wait(1000)
3. Файл main.py
Главный файл, который мы запускаем. Он импортирует функции (которые уже содержат в себе инициализацию).
# main.py
from func import *
# Просто пишем логику, используя готовые функции и объекты
print("Program started")
beep_and_wait()
square(200)
print("Program finished")
Важно
При такой структуре запускать нужно именно main.py. Если запустить func.py или init.py, робот ничего не сделает, так как в них нет команд вызова функций.