![Робот Arduino Otto с конечным автоматом: 4 шага Робот Arduino Otto с конечным автоматом: 4 шага](https://i.howwhatproduce.com/images/011/image-32751-j.webp)
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
![Image Image](https://i.howwhatproduce.com/images/011/image-32751-2-j.webp)
![](https://i.ytimg.com/vi/pEzC1D3wuBI/hqdefault.jpg)
Обзор проекта
В этом проекте я хочу показать вам способ программирования робота Otto, который представляет собой DIY-робот на базе Arduino. Используя инструменты диаграммы состояний YAKINDU (бесплатно для некоммерческих целей), мы можем легко использовать конечные автоматы для графического моделирования поведения робота Отто и генерации кода C / C ++. Мы воспользуемся одним из их примеров, чтобы расширить поведение по своему усмотрению.
Для людей, которые не знают, что такое конечный автомат, и не хотят рыться в сложной статье в Википедии, вот небольшое объяснение:
Конечный автомат - это просто узлы и пути между этими узлами. У вас есть начальный узел, и вы можете переходить к другим узлам в зависимости от их охранников, которые могут быть представлены событиями. Эти события вызываются либо самим конечным автоматом, либо извне (например, функцией и т. Д.).
Сам инструмент использует интерфейс перетаскивания и язык, специфичный для предметной области. Я расскажу об этом за вас, поэтому вам не придется рыться в их документации, чтобы настроить Otto и запустить его. Настроить IDE не так уж сложно, потому что все плагины и т. Д. Должны устанавливаться автоматически.
Запасы
Робот Отто или Робот Зоуи
Оба этих робота, по сути, делают одно и то же и используют один и тот же API. Робот Otto - это робот, сделанный своими руками, его части онлайн, готовые к печати на 3D-принтере, если он у вас есть. Альтернативой является робот Zowi, который можно приобрести в Интернете и подготовить к использованию.
Инструменты диаграммы состояний YAKINDU
Инструмент, который мы будем использовать для моделирования конечного автомата. Вы можете начать с 30-дневной пробной версии, а затем получить бесплатную лицензию для некоммерческого использования.
Eclipse C ++ IDE для подключаемого модуля Arduino
Нам не нужно загружать его вручную, потому что IDE делает это за нас. Я все же подумал, что неплохо бы это здесь перечислить.
Шаг 1. Настройка всего
![Понимание того, как взаимодействовать с Отто Понимание того, как взаимодействовать с Отто](https://i.howwhatproduce.com/images/011/image-32751-3-j.webp)
После установки IDE запустите ее и настройте рабочее пространство в любом месте на вашем компьютере (настройка идентична использованию Eclipse в первый раз). Когда программа полностью запустится, щелкните страницу приветствия и нажмите «Файл -> Создать -> Пример…», а затем выберите «Примеры диаграмм состояний YAKINDU», немного подождите и выполните поиск «Встроенные системы -> Zowi (C ++)" пример.
ВАЖНО: нажмите в правом верхнем углу кнопку «Установить зависимости…»! Это установит все для вас, поэтому вам не придется беспокоиться о библиотеках, подключаемых модулях и тому подобном. Загрузите пример, следуйте инструкциям в примере «Встроенные системы -> Zowi (C ++)», а затем перейдите к следующему шагу.
Шаг 2: понимание того, как взаимодействовать с Otto
Зайдите в файл ".sct" и отредактируйте конечный автомат по своему вкусу. Справа находится меню со всеми доступными пунктами. Нас интересуют только состояния и переходы.
На картинке вы можете видеть, что я кое-что написал на переходах; «after X s» говорит само за себя, а «всегда» просто означает, что оно попадает туда сразу после завершения кода из состояния. «Вход /» означает, что код должен быть выполнен сразу после входа в состояние.
IDE компилирует конечный автомат на C ++, совместимый с Arduino. Чтобы использовать возможности Otto, нам нужно немного поработать, чтобы получить доступ к интерфейсу.
Следующие ключевые слова могут использоваться для определения того, что будет использовать конечный автомат:
константы, которые содержат значения и не могут быть изменены
переменные, которые содержат значения и могут быть изменены
операции, которые будут сгенерированы в виртуальные методы C ++ для реализации
интерфейс:
const PIN_YL: integer = 2 const PIN_YR: integer = 3 const PIN_RL: integer = 4 const PIN_RR: integer = 5 const sound: integer = 2 const mouth_heart: integer = 13 constouth_happyOpen: integer = 11 операция zowi_init (YL: целое число, YR: integer, RL: integer, RR: integer) операция zowi_home () операция zowi_putMouth (mouthType: integer) операция zowi_sing (songName: integer) операция zowi_walk (шаги: вещественные, T: целые, dir: целые) операция zowi_shakeLeg ()
Совет от профессионала: если вы не знаете, что ввести где-то или возникла ошибка, нажмите «ctrl + пробел», чтобы получить подсказки о том, что можно ввести.
Кроме того, вы должны изучить примеры, в них тоже есть код! Вы также можете использовать их в качестве структуры, чтобы просто редактировать модель, что на данный момент является единственной частью, которая нас интересует.
Шаг 3. Заполнение пробелов
![Заполнение пробелов Заполнение пробелов](https://i.howwhatproduce.com/images/011/image-32751-4-j.webp)
После внесения изменений в модель вы можете щелкнуть правой кнопкой мыши на «zowiSCT.sgen -> Создать артефакты кода». Это генерирует виртуальные функции в C ++, которые объявляются в конечном автомате в папке «src-gen», которую мы затем реализуем с использованием обычного C ++.
Просто создайте эти два файла в папке «src», чтобы получить от Отто нужную нам функциональность.
Сначала Impl.h
#ifndef SRC_IMPL_H_
#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT:: DefaultSCI_OCB {public: Impl (); виртуальный ~ Impl (); void zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); void zowi_home (); void zowi_putMouth (sc_integer mouthType); void zowi_sing (sc_integer songName); void zowi_walk (sc_real steps, sc_integer T, sc_integer dir); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /
Тогда Impl.cpp
#include "Impl.h"
#include "../Zowi/Zowi.h" Zowi zowi = новый Zowi (); Impl:: Impl () {} Impl:: ~ Impl () {} void Impl:: zowi_home () {zowi.home (); } void Impl:: zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR) {zowi.init (YL, YR, RL, RR); } void Impl:: zowi_putMouth (sc_integer mouthType) {zowi.putMouth (mouthType); } void Impl:: zowi_sing (sc_integer songName) {zowi.sing (songName); } void Impl:: zowi_walk (sc_real steps, sc_integer T, sc_integer dir) {zowi.walk (steps, T, dir); } void Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }
Шаг 4: Создание танца Отто
Когда вы довольны своим продуктом, нажмите на молоток в верхнем левом углу и дождитесь завершения процесса. Затем нажмите на зеленую стрелку справа от молотка и посмотрите, как танцует ваш Отто!
Если хотите, можете посмотреть и другие примеры: Инструменты диаграммы состояний YAKINDU
Рекомендуемые:
Arduino - Робот для разгадывания лабиринта (MicroMouse) Робот, следующий за стеной: 6 шагов (с изображениями)
![Arduino - Робот для разгадывания лабиринта (MicroMouse) Робот, следующий за стеной: 6 шагов (с изображениями) Arduino - Робот для разгадывания лабиринта (MicroMouse) Робот, следующий за стеной: 6 шагов (с изображениями)](https://i.howwhatproduce.com/images/001/image-2132-j.webp)
Arduino | Робот для решения лабиринта (MicroMouse) Робот, следующий за стеной: Добро пожаловать, я Исаак, и это мой первый робот «Страйкер v1.0». Этот робот был разработан для решения простого лабиринта. В соревновании у нас было два лабиринта и робот смог их идентифицировать. Любые другие изменения в лабиринте могут потребовать изменения
Робот Otto DIY + Arduino Bluetooth Легко для 3D-печати: 6 шагов (с изображениями)
![Робот Otto DIY + Arduino Bluetooth Легко для 3D-печати: 6 шагов (с изображениями) Робот Otto DIY + Arduino Bluetooth Легко для 3D-печати: 6 шагов (с изображениями)](https://i.howwhatproduce.com/images/005/image-12447-j.webp)
Робот Otto DIY + Arduino Bluetooth Легко для 3D-печати: действительно открытый исходный код Otto позволяет открытое обучение STEAM, мы собираем отзывы из различных мастерских и школ по всему миру, которые уже используют Otto DIY в своих классах и в зависимости от открытости этих образовательных мест. мы или
ГОЛОДНЫЙ РОБОТ ДЛЯ БУМАГИ - Робот Pringles Recycle Arduino: 19 шагов (с изображениями)
![ГОЛОДНЫЙ РОБОТ ДЛЯ БУМАГИ - Робот Pringles Recycle Arduino: 19 шагов (с изображениями) ГОЛОДНЫЙ РОБОТ ДЛЯ БУМАГИ - Робот Pringles Recycle Arduino: 19 шагов (с изображениями)](https://i.howwhatproduce.com/images/010/image-27086-j.webp)
PAPER HUNGRY ROBOT - Pringles Recycle Arduino Robot: это еще одна версия Hungry Robot, которую я построил в 2018 году. Вы можете сделать этого робота без 3D-принтера. Все, что вам нужно сделать, это просто купить банку Pringles, серводвигатель, датчик приближения, ардуино и некоторые инструменты. Вы можете скачать все
Балансировочный робот / 3-колесный робот / STEM-робот: 8 шагов
![Балансировочный робот / 3-колесный робот / STEM-робот: 8 шагов Балансировочный робот / 3-колесный робот / STEM-робот: 8 шагов](https://i.howwhatproduce.com/images/005/image-12193-11-j.webp)
Робот-балансировщик / 3-колесный робот / STEM-робот: мы создали комбинированный балансировочный и 3-колесный робот для использования в учебных заведениях и после школьных образовательных программ. Робот основан на Arduino Uno, специальном щите (предоставлены все детали конструкции), литиево-ионном аккумуляторном блоке (все стро
Робот с маслом: робот Arduino в условиях экзистенциального кризиса: 6 шагов (с изображениями)
![Робот с маслом: робот Arduino в условиях экзистенциального кризиса: 6 шагов (с изображениями) Робот с маслом: робот Arduino в условиях экзистенциального кризиса: 6 шагов (с изображениями)](https://i.howwhatproduce.com/images/002/image-5407-50-j.webp)
Робот с маслом: робот Arduino в условиях экзистенциального кризиса: этот проект основан на мультсериале «Рик и Морти». В одном из эпизодов Рик создает робота, единственная цель которого - приносить масло. У студентов Bruface (Брюссельский инженерный факультет) есть задание на механику