![logo.png](https://store.rightech.io/api/v1/media/1679ade2-1fbc-49ac-b969-81365ce889ab.png) # Wheelb⚙t v2 - колесный робот для исследования автономных систем **Wheelb⚙t v2** — это колесный робот, предназначенный для исследования алгоритмов машинного обучения и автономных систем. Робот подключается к платформе Rightech.io через MQTT протокол, что обеспечивает удаленное управление и мониторинг всех подсистем устройства в реальном времени. Ключевые возможности робота включают полноценную систему управления с сервоприводом рулевого механизма и двумя независимо управляемыми мотор-редукторами, а также обширную сенсорную сеть для навигации и мониторинга состояния устройства. В состав сенсоров входят IMU модуль (акселерометр и гироскоп), ультразвуковые дальномеры и система мониторинга питания с возможностью расчета уровня заряда аккумулятора через линейную интерполяцию. А также камеру для управления в режиме FPV. **Прошивки и чертежи доступны по ссылке [WheelB⚙t](https://github.com/wheelbot-org).** --- | | | | -- | -- | | ![captive_portal_01.jpg](https://store.rightech.io/api/v1/media/eab1d4ab-cd46-45d7-b6e3-4f008ef14f27.jpg) | ![captive_portal_02.jpg](https://store.rightech.io/api/v1/media/8f9b179a-4cc7-4937-907e-9fade14bc807.jpg) | ## Полное техническое описание ### Общая структура модели Модель построена на базе протокола MQTT с иерархической структурой подсистем: | Подсистема | ID | Описание | |------------|----|----------| | control | control | Элементы управления (актуаторная сеть) | | sensor | sensor | Сенсорная сеть робота | | service | service | Функции обслуживания и диагностики | --- ### 1. Элементы управления (control) Подсистема управления включает рулевой механизм и двигатели, позволяющие контролировать движение робота. #### 1.1 Рулевой механизм (steering) **Описание:** Сервопривод для поворота передних колес. Угол поворота измеряется в градусах (0-180°), где 0° — крайнее левое положение, 90° — прямое направление, 180° — крайнее правое положение. **Параметры управления:** | Параметр | Тип | Диапазон | Описание | |----------|-----|----------|----------| | `stearing_left` | config | 0 | Крайнее левое направление | | `stearing_direct` | config | 90 | Прямое направление | | `stearing_right` | config | 180 | Крайнее правое направление | | `direction` | argument | 0-180° | Текущий угол поворота сервопривода | | `acceleration` | argument | - | Ускорение изменения угла | **Действия:** | Действие | MQTT топик | Описание | |----------|------------|----------| | Повернуть налево | `steering-wheel/rotate` | Установка угла 0° | | Повернуть прямо | `steering-wheel/rotate` | Установка угла 90° | | Повернуть направо | `steering-wheel/rotate` | Установка угла 180° | | Повернуть | `steering-wheel/rotate` | Произвольный угол | | Установить ускорение | `steering-wheel/acceleration` | Настройка ускорения сервопривода | --- #### 1.2 Двигатели (motors) **Описание:** Два мотор-редуктора на задней части робота, работающие независимо друг от друга. Скорость задается в процентах от -100% до 100%, где отрицательные значения соответствуют движению назад. **Конфигурация скоростей (общая для обоих моторов):** | Параметр | Значение | Описание | |----------|----------|----------| | `speed_percent_max_rev` | -36% | Максимальная обратная скорость | | `speed_percent_normal_rev` | -18% | Нормальная обратная скорость | | `speed_percent_min_rev` | -3% | Минимальная обратная скорость | | `speed_percent_min` | 1% | Минимальная скорость | | `speed_percent_normal` | 18% | Нормальная скорость | | `speed_percent_max` | 36% | Максимальная скорость | **Формула выходного напряжения:** `V_выход = N * V_вход * 0.01`, где N — значение скорости в процентах. --- #### 1.2.1 Правый двигатель (motor-right) **Параметры состояния:** | Параметр | Тип | Описание | |----------|-----|----------| | `direction` | argument (boolean) | Направление вращения (true — вперед, false — назад) | | `speed` | argument (number) | Скорость вращения | | `acceleration` | argument (number) | Ускорение изменения скорости | **Действия (MQTT топик: `engines/right/speed_percent`):** | Действие | Значение | Описание | |----------|----------|----------| | Максимальная обратная скорость | из конфига | `speed_percent_max_rev` | | Нормальная обратная скорость | из конфига | `speed_percent_normal_rev` | | Минимальная обратная скорость | из конфига | `speed_percent_min_rev` | | Остановить двигатель | 0 | Установка скорости 0 | | Минимальная скорость | из конфига | `speed_percent_min` | | Нормальная скорость | из конфига | `speed_percent_normal` | | Максимальная скорость | из конфига | `speed_percent_max` | | Установить скорость | произвольное | Диапазон -100% до 100% | **Действия для ускорения:** - `Установить ускорение` → MQTT топик: `engines/left/acceleration` (примечание: в конфиге указан левый топик) --- #### 1.2.2 Левый двигатель (motor-left) **Параметры состояния:** идентичны правому двигателю **Действия (MQTT топик: `engines/left/speed_percent`):** идентичны правому двигателю **Действия для ускорения:** - `Установить ускорение` → MQTT топик: `engines/left/acceleration` --- ### 2. Сенсоры (sensor) Подсистема сенсоров обеспечивает мониторинг состояния робота и окружающей среды. #### 2.1 Питание (power-system) | Параметр | Тип | Единицы | Описание | |----------|-----|---------|----------| | `voltage` | argument | Вольт | Напряжение на выходе аккумуляторного блока | | `current` | argument | Ампер | Ток, потребляемый роботом | | `power` | argument | Ватт | Потребляемая роботом мощность | | `energy` | argument | А*ч | Скорость потребления мощности | | `charge-level` | argument | % | Уровень заряда аккумулятора (рассчитывается) | **Конфигурация экстраполяции заряда (soc-calc):** Для расчета уровня заряда используется линейная интерполяция по 12 точкам: | % заряда | Напряжение (Вольт) | |----------|-------------------| | 100% | 16.8 | | 90% | 16.4 | | 80% | 16.0 | | 70% | 15.6 | | 60% | 15.2 | | 50% | 14.8 | | 40% | 14.4 | | 30% | 14.0 | | 20% | 13.6 | | 10% | 13.2 | | 5% | 12.8 | | 0% | 12.4 | --- #### 2.2 Дальномеры (sonars) **Описание:** Ультразвуковые сонары во фронтальной части робота для измерения расстояния до препятствий. | Параметр | Тип | Единицы | Описание | |----------|-----|---------|----------| | `distance-left` | argument | см | Расстояние с левого фронтального дальномера | | `distance-right` | argument | см | Расстояние с правого фронтального дальномера | --- #### 2.3 Акселерометр (accelerometr) **Описание:** Измерение линейного ускорения по трем осям. | Параметр | Тип | Единицы | Описание | |----------|-----|---------|----------| | `acc-x` | argument | м/с² | Ускорение по оси X | | `acc-Y` | argument | м/с² | Ускорение по оси Y | | `acc-z` | argument | м/с² | Ускорение по оси Z | --- #### 2.4 Гироскоп (gyroscope) **Описание:** Измерение угловой скорости по трем осям. | Параметр | Тип | Единицы | Описание | |----------|-----|---------|----------| | `gyro-x` | argument | рад/с | Угловая скорость по оси X | | `gyro-y` | argument | рад/с | Угловая скорость по оси Y | | `gyro-z` | argument | рад/с | Угловая скорость по оси Z | --- #### 2.5 Углы наклона (angles) **Описание:** Ориентация робота в пространстве (вычисляется из данных IMU). | Параметр | Тип | Единицы | Описание | |----------|-----|---------|----------| | `yaw` | argument | градусы | Рысканье (поворот вокруг вертикальной оси) | | `pitch` | argument | градусы | Тангаж (наклон вперед/назад) | | `roll` | argument | градусы | Крен (наклон влево/вправо) | --- ### 3. Обслуживание (service) Подсистема для диагностики и настройки робота. | Действие | MQTT топик | Описание | |----------|------------|----------| | Выполнить калибровку инерциального блока | `service/calibrate-mcu` | Калибровка акселерометра и гироскопа (результат в `service/calibrate-mcu-result`) | | Просканировать шину I2C | `service/scan-i2c` | Поиск адресов подключенных устройств I2C (результат в `service/scan-i2c-result`) | | Запустить портал | `service/start-portal` | Перевод контроллера в режим конфигурирования, подключение к Wi-Fi сети `Wheelbot-Ctrl-Setup` | --- ## Обработчик "Расчет заряда аккумулятора" ### Назначение Обработчик рассчитывает уровень заряда аккумулятора в процентах на основе текущего напряжения и таблицы экстраполяционных точек из конфигурации модели. ### Алгоритм работы 1. **Входные параметры:** - `v` (argument) — текущее напряжение аккумулятора - `vp0`...`vp100` (config) — точки экстраполяции для 0%, 5%, 10%, ..., 100% заряда 2. **Обработка:** - Если напряжение ≤ vp0 → заряд = 0% - Если напряжение ≥ vp100 → заряд = 100% - Если напряжение в диапазоне между двумя точками → линейная интерполяция 3. **Формула интерполяции:** ``` k = (v - p1.v) / (p2.v - p1.v) result = p1.p + k * (p2.p - p1.p) ``` где `p1` и `p2` — соседние точки экстраполяции 4. **Выходной параметр:** - `result` (argument) — уровень заряда в процентах (0-100) ### Связь с моделью Обработчик подключен к модели Wheelbot v2 через следующие маппинги: | Вход обработчика | Элемент модели | Описание | |------------------|----------------|----------| | v | `voltage` | Текущее напряжение | | vp0 | `soc-calc.soc-calc-0` | Напряжение при 0% | | vp5 | `soc-calc.soc-calc-5` | Напряжение при 5% | | vp10 | `soc-calc.soc-calc-10` | Напряжение при 10% | | ... | ... | ... | | vp100 | `soc-calc.soc-calc-100` | Напряжение при 100% | | result | `charge-level` | Рассчитанный уровень заряда | ### Использование Обработчик автоматически выполняется при каждом изменении напряжения и обновляет параметр `charge-level` в модели, что позволяет в реальном времени отслеживать состояние аккумулятора робота. --- ## MQTT Топики ### Публикация команд (из платформы на робот): | Топик | Описание | |-------|----------| | `steering-wheel/rotate` | Угол поворота рулевого механизма (0-180) | | `steering-wheel/acceleration` | Ускорение сервопривода руля | | `engines/left/speed_percent` | Скорость левого мотора (-100 до 100) | | `engines/left/acceleration` | Ускорение левого мотора | | `engines/right/speed_percent` | Скорость правого мотора (-100 до 100) | | `service/calibrate-mcu` | Команда калибровки IMU | | `service/scan-i2c` | Команда сканирования шины I2C | | `service/start-portal` | Команда запуска портала настройки | ### Подписка на данные (от робота в платформу): | Параметр | Reference | Описание | |----------|-----------|----------| | `controls` | `controls/json` | JSON объект с параметрами управления | | `sensors` | `sensors/json` | JSON объект с параметрами сенсоров | | `topic` | `topic` | Тема последнего MQTT сообщения | | `payload` | `payload` | Полезная нагрузка последнего сообщения | --- ## Ключевые характеристики | Характеристика | Значение | |----------------|----------| | Протокол связи | MQTT | | Рулевой механизм | Сервопривод 0-180° | | Двигатели | 2 мотор-редуктора, скорость -100% до 100% | | IMU | Акселерометр + гироскоп + углы ориентации | | Дальномеры | 2 ультразвуковых (левый, правый) | | Питание | Напряжение, ток, мощность, энергия, расчет заряда | | Диагностика | Калибровка IMU, сканирование I2C, порт настройки | --- *Документация создана на основе конфигураций Rightech.io от 27.01.2026*
Использование этого шаблона и его компонентов допускается только в платформе Rightech IoT. Лицензия автора шаблона распространяется только на его собственный код и не влияет на сторонние библиотеки и компоненты, используемые в шаблоне, и не может противоречить их лицензиям и лицензии Rightech IoT.

## Copyright © 2026 fergus Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять в соответствии с условиями GNU General Public License, опубликованной Free Software Foundation версии 3. Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. См. GNU General Public License, <https://www.gnu.org/licenses/>. # GNU Общая Общественная Лицензия (GPL) **Версия 3, 29 июня 2007 г.** Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/> Каждому разрешается копировать и распространять дословные копии этого лицензионного документа, но **не разрешается его изменять**. --- ## Преамбула GNU General Public License — это свободная, копилефтная лицензия для программного обеспечения и других видов работ. Большинство лицензий на программное обеспечение лишают вас свободы делиться и изменять произведения. Напротив, GNU GPL гарантирует вам свободу распространять и изменять все версии программы — чтобы она оставалась свободным ПО для всех её пользователей. Мы, Free Software Foundation, применяем GNU GPL к большей части нашего программного обеспечения, а также к другим работам, если их авторы этого захотят. Вы можете применять её и к своим программам. Когда мы говорим о **свободном ПО**, речь идёт о свободе, а не о цене. Наши лицензии GPL предназначены для того, чтобы вы могли: - распространять копии свободного программного обеспечения (и при желании брать плату за это), - иметь доступ к исходному коду или получить его, - изменять ПО и использовать его части в новых свободных программах, - знать, что вы имеете право на это. Чтобы защитить ваши права, мы должны предотвратить ограничения со стороны других, которые могут попытаться заставить вас отказаться от этих прав. Поэтому вы обязаны соблюдать определённые правила: - передавая копии программы, вы должны сохранять свободу её использования, - предоставлять исходный код, - сохранять уведомления об авторских правах и лицензии. Эти условия распространяются как на изменённые версии программы, так и на неизменённые. Например, если вы распространяете копии такой программы бесплатно или за плату, вы должны передать получателям те же права, что имеете сами. Вы должны обеспечить доступ к исходному коду. Также нельзя навязывать дополнительные ограничения поверх условий GNU GPL. --- ## Условия и положения ### 0. Определения **"Эта Лицензия"** — GNU General Public License, версия 3. **"Программа"** — любая работа, распространяемая по этой Лицензии. **"Вы"** — лицензиат, физическое или юридическое лицо, получившее права по Лицензии. **"Распространение"** — передача копий программы другим лицам любым способом. **"Модификация"** — изменение программы или её части, создание производной работы. ### 1. Исходный код Исходный код — это форма работы, предпочтительная для внесения изменений. Обязательство: при распространении программы вы должны предоставить исходный код или способ его получить. ### 2. Основные права Вы можете: - запускать программу в любых целях, - изучать, как она работает, и изменять её, - распространять копии, - улучшать программу и публиковать улучшения. Эти права не могут быть отозваны, если вы соблюдаете условия лицензии. ### 3. Передача копий Вы можете передавать дословные копии исходного кода на любом носителе при условии: - сохранения уведомлений об авторских правах, - сохранения текста этой Лицензии, - отсутствия дополнительных ограничений. Вы можете взимать плату за передачу копий или предоставление гарантий на них. ### 4. Передача изменённых версий Вы можете передавать изменённые версии Программы при условии: - сохранения уведомлений об авторских правах, - чёткого указания на изменения, - лицензирования всей работы по этой же Лицензии. Это гарантирует, что все производные работы останутся свободными. ### 5. Передача объектного кода Если вы распространяете программу в объектном коде или исполнимой форме, вы обязаны: - предоставить исходный код вместе с ней, - или дать чёткие инструкции, как получить исходный код бесплатно. ### 6. Передача через сети Если вы предлагаете доступ к программе через сеть, вы обязаны предоставить исходный код всем пользователям, которые взаимодействуют с программой удалённо. ### 7. Дополнительные разрешения и условия Вы можете добавлять **дополнительные разрешения**, которые снимают ограничения GNU GPL. Также можно добавлять **дополнительные условия**, но они не должны противоречить этой Лицензии. ### 8. Прекращение действия лицензии Если вы нарушаете условия этой Лицензии, ваши права автоматически прекращаются. Они могут быть восстановлены, если нарушение было исправлено. ### 9. Пересмотр версий Free Software Foundation может публиковать новые версии GNU GPL. Вы можете следовать: - версии, полученной вместе с программой, - или любой более новой версии. ### 10. Отказ от гарантий **Программа распространяется "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ**, включая гарантию работоспособности или пригодности для определённых целей.