Архитектура
Пока у робота два-три компонента, вопрос стоит просто: «работает датчик или нет». Как только деталей становится десять, главный вопрос меняется. Теперь важно не «работает ли деталь», а работают ли все детали вместе — не отбирая друг у друга питание, не мешая на общей линии данных и не выходя из строя целиком, когда ломается что-то одно.
Ответы на эти вопросы и есть архитектура — набор решений о том, как части робота соединены и как они договариваются между собой.
Три вопроса, на которые отвечает архитектура
Любая архитектура — от школьного робота на столе до промышленного манипулятора — отвечает на одни и те же три вопроса.
Как части общаются? Датчики, мозг и моторы обмениваются сообщениями — нужно выбрать линию связи и «язык»:
Откуда берут энергию? Каждый компонент потребляет ток — питание считают заранее, а не «как получится»:
Что будет, когда что-то сломается? Датчик врёт, батарея садится, программа зависает — робот должен пережить это достойно:
Три принципа хорошей архитектуры
Разделение ответственности. Каждая часть делает свою работу и не лезет в чужую. Блок, который читает датчики, не должен решать, куда ехать. Блок, который управляет моторами, не должен разбирать данные с камеры. Когда роли перемешаны, любое изменение ломает что-то в неожиданном месте.
Наблюдаемость. Ты всегда должен иметь возможность понять, что робот сейчас делает и почему. Индикатор состояния, запись событий, «чёрный ящик» — это не украшение, а инструмент, без которого невозможно найти причину сбоя.
Запас прочности. По питанию, по прочности проводов, по времени реакции. Робот, спроектированный впритык, ломается на первой же неожиданности.
Робот как набор слоёв
Удобно мысленно разложить робота на слои. Нижний слой ничего не знает о верхнем, а верхний обращается к нижнему через понятные «правила общения». Такую систему легко проверять по частям и легко менять.
- пульт / веб-страница управления
- индикация состояния, журнал событий
- аварийная остановка (красная кнопка)
- навигация: куда ехать
- принятие решений, состояния робота
- управление моторами (ШИМ)
- чтение и фильтрация датчиков
- моторы, энкодеры
- датчики
- вычислитель и питание
Заменить датчик — меняется только драйвер, всё остальное не трогаем. Улучшить алгоритм — меняется только логика. Проверить моторы — можно вообще без верхних слоёв. Это и есть выгода от архитектуры.
Сквозной пример модуля: робот-исследователь
Через все страницы этого раздела мы проектируем одного и того же робота — колёсного разведчика, который ездит по комнате, объезжает препятствия и передаёт данные на компьютер. На страницах про связь выбираем ему линии обмена, на страницах про питание — считаем батарею и расход, на странице про резервирование — защищаем от вранья датчиков.
С чего начать
Если проходишь этот блок впервые — начни со связи и питания: это фундамент, без которого не поедет ни один робот. Резервирование даёт глубину и пригодится, когда робот станет сложнее.