Оглавление:

Робот Arduino Otto с конечным автоматом: 4 шага
Робот Arduino Otto с конечным автоматом: 4 шага

Видео: Робот Arduino Otto с конечным автоматом: 4 шага

Видео: Робот Arduino Otto с конечным автоматом: 4 шага
Видео: Робот паук и стенка! @enjoyrobotics Логическое зрение робота! 2024, Июль
Anonim
Image
Image

Обзор проекта

В этом проекте я хочу показать вам способ программирования робота Otto, который представляет собой DIY-робот на базе Arduino. Используя инструменты диаграммы состояний YAKINDU (бесплатно для некоммерческих целей), мы можем легко использовать конечные автоматы для графического моделирования поведения робота Отто и генерации кода C / C ++. Мы воспользуемся одним из их примеров, чтобы расширить поведение по своему усмотрению.

Для людей, которые не знают, что такое конечный автомат, и не хотят рыться в сложной статье в Википедии, вот небольшое объяснение:

Конечный автомат - это просто узлы и пути между этими узлами. У вас есть начальный узел, и вы можете переходить к другим узлам в зависимости от их охранников, которые могут быть представлены событиями. Эти события вызываются либо самим конечным автоматом, либо извне (например, функцией и т. Д.).

Сам инструмент использует интерфейс перетаскивания и язык, специфичный для предметной области. Я расскажу об этом за вас, поэтому вам не придется рыться в их документации, чтобы настроить Otto и запустить его. Настроить IDE не так уж сложно, потому что все плагины и т. Д. Должны устанавливаться автоматически.

Запасы

Робот Отто или Робот Зоуи

Оба этих робота, по сути, делают одно и то же и используют один и тот же API. Робот Otto - это робот, сделанный своими руками, его части онлайн, готовые к печати на 3D-принтере, если он у вас есть. Альтернативой является робот Zowi, который можно приобрести в Интернете и подготовить к использованию.

Инструменты диаграммы состояний YAKINDU

Инструмент, который мы будем использовать для моделирования конечного автомата. Вы можете начать с 30-дневной пробной версии, а затем получить бесплатную лицензию для некоммерческого использования.

Eclipse C ++ IDE для подключаемого модуля Arduino

Нам не нужно загружать его вручную, потому что IDE делает это за нас. Я все же подумал, что неплохо бы это здесь перечислить.

Шаг 1. Настройка всего

Понимание того, как взаимодействовать с Отто
Понимание того, как взаимодействовать с Отто

После установки 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. Заполнение пробелов

Заполнение пробелов
Заполнение пробелов

После внесения изменений в модель вы можете щелкнуть правой кнопкой мыши на «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

Рекомендуемые: