Inhaltsverzeichnis:

Arduino Otto-Roboter mit Zustandsmaschine - Gunook
Arduino Otto-Roboter mit Zustandsmaschine - Gunook

Video: Arduino Otto-Roboter mit Zustandsmaschine - Gunook

Video: Arduino Otto-Roboter mit Zustandsmaschine - Gunook
Video: Arduino Vending Machine 2024, November
Anonim
Image
Image

Projektübersicht

In diesem Projekt möchte ich Ihnen eine Möglichkeit zeigen, den Otto Robot zu programmieren, einen Arduino-basierten DIY-Roboter. Mit YAKINDU Statechart Tools (kostenlos für nicht-kommerzielle) können wir Zustandsautomaten einfach verwenden, um das Verhalten des Otto Robot grafisch zu modellieren und C/C++-Code zu generieren. Wir werden eines ihrer Beispiele verwenden, um das Verhalten nach unserem Geschmack zu erweitern.

Für die Leute, die nicht wissen, was eine Zustandsmaschine ist und nicht den komplizierten Wikipedia-Artikel durchwühlen wollen, hier eine kleine Erklärung:

Eine Zustandsmaschine besteht nur aus Knoten und Pfaden zwischen diesen Knoten. Sie haben einen Startknoten und können die Pfade zu anderen Knoten in Abhängigkeit von deren Wachen nehmen, die durch Ereignisse dargestellt werden können. Diese Ereignisse werden entweder von der Zustandsmaschine selbst oder von außen (wie eine Funktion usw.) ausgelöst.

Das Tool selbst verwendet eine Drag&Drop-Oberfläche und eine domänenspezifische Sprache. Ich werde es für Sie durchgehen, damit Sie nicht durch die Dokumentation wühlen müssen, um Ihren Otto zum Laufen zu bringen. Das Einrichten der IDE ist nicht allzu schwer, da alle Plug-Ins usw. automatisch installiert werden sollten.

Lieferungen

Otto-Roboter oder Zowi-Roboter

Beide Roboter machen im Wesentlichen dasselbe und verwenden dieselbe API. Der Otto Robot ist ein DIY-Roboter, dessen Teile online sind und mit einem 3D-Drucker gedruckt werden können, falls Sie einen haben. Die Alternative ist der Zowi Robot, der online gekauft und sofort einsatzbereit ist.

YAKINDU Statechart-Tools

Das Werkzeug, das wir verwenden werden, um die Zustandsmaschine zu modellieren. Sie können mit einer 30-tägigen Testversion beginnen und anschließend eine kostenlose Lizenz für die nicht-kommerzielle Nutzung erhalten.

Eclipse C++ IDE für Arduino Plugin

Wir müssen es nicht manuell herunterladen, weil die IDE es für uns erledigt. Ich dachte immer noch, es wäre schön, es hier aufzulisten.

Schritt 1: Alles einrichten

Verstehen, wie man den Otto. anschließt
Verstehen, wie man den Otto. anschließt

Nachdem Sie die IDE installiert haben, führen Sie sie aus und richten Sie einen Arbeitsbereich an einer beliebigen Stelle auf Ihrem PC ein (das Setup ist identisch mit der erstmaligen Verwendung von Eclipse). Wenn das Programm vollständig gestartet ist, klicken Sie die Willkommensseite weg und klicken Sie auf 'Datei -> Neu -> Beispiel…' und wählen Sie dann 'YAKINDU Statechart Beispiele', warten Sie etwas und suchen Sie nach "Embedded Systems -> Zowi (C++.))" Beispiel.

WICHTIG: Klicken Sie oben rechts auf die Schaltfläche 'Abhängigkeiten installieren…'! Dies installiert alles für Sie, sodass Sie sich nicht um Bibliotheken, Plug-Ins und ähnliches kümmern müssen. Laden Sie das Beispiel herunter, folgen Sie den Anweisungen im Beispiel "Embedded Systems -> Zowi (C++)" und fahren Sie dann mit dem nächsten Schritt fort.

Schritt 2: Verstehen, wie man den Otto anschließt

Gehen Sie in die Datei ".sct" und bearbeiten Sie den Zustandsautomaten nach Ihren Wünschen. Auf der rechten Seite befindet sich ein Menü mit allen verfügbaren Elementen. Uns interessieren nur die Zustände und Übergänge.

Auf dem Bild sieht man, dass ich einiges an die Übergänge geschrieben habe; das "nach X s" ist ziemlich selbsterklärend und das "immer" bedeutet nur, dass es gleich nach Fertigstellung des Codes vom Staat dorthin geht. Der "Eintrag /" bedeutet, dass der Code direkt nach Eintritt in den Zustand ausgeführt werden soll.

Die IDE kompiliert die Zustandsmaschine nach C++, das Arduino-kompatibel ist. Um die Funktionen des Otto zu nutzen, müssen wir selbst ein wenig Arbeit auf die Benutzeroberfläche nehmen.

Die folgenden Schlüsselwörter können verwendet werden, um Dinge zu definieren, die der Zustandsautomat verwenden soll:

Konstanten, die Werte halten und nicht geändert werden können

Variablen, die Werte halten und geändert werden können

Operationen, die zu virtuellen C++-Methoden zur Implementierung generiert werden

Schnittstelle:

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 mund_heart: integer = 13 const mund_happyOpen: integer = 11 operation zowi_init(YL: integer, YR: integer, RL: integer, RR: integer) operation zowi_home() operation zowi_putMouth(mouthType: integer) operation zowi_sing(songName: integer) operation zowi_walk(steps: real, T: integer, dir: integer) operation zowi_shakeLeg()

Profi-Tipp: Wenn Sie an einer Stelle nicht wissen, was Sie eingeben sollen oder ein Fehler aufgetreten ist, drücken Sie "Strg + Leertaste", um einige Hinweise zu erhalten, was Sie eingeben können.

Außerdem sollten Sie sich die Beispiele ansehen, sie enthalten auch etwas Code! Sie können sie auch als Struktur verwenden, um nur das Modell zu bearbeiten, was derzeit der einzige Teil ist, der uns interessiert.

Schritt 3: Füllen der Lücken

Die Lücken füllen
Die Lücken füllen

Nachdem Sie Dinge im Modell geändert haben, können Sie mit der rechten Maustaste auf "zowiSCT.sgen -> Generate Code Artifacts" klicken. Dadurch werden die virtuellen Funktionen in C++ generiert, die in der State Machine im Ordner „src-gen“deklariert werden, die wir dann mit normalem C++ implementieren.

Erstellen Sie einfach diese beiden Dateien im Ordner "src", um die gewünschte Funktionalität von Otto zu erhalten.

Zuerst die Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); virtuell ~Impl(); void zowi_init(sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); void zowi_home(); void zowi_putMouth(sc_integer Mundtyp); 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_ */

Dann die Impl.cpp

#include "Impl.h"

#include "../Zowi/Zowi.h" Zowi zowi = new 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); aufrechtzuerhalten. Void Impl::zowi_putMouth (sc_integer MouthType) { zowi.putMouth (mouthType); aufrechtzuerhalten. 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); aufrechtzuerhalten. Void Impl::zowi_shakeLeg() {zowi.shakeLeg(); }

Schritt 4: Den Otto-Tanz machen

Wenn Sie mit Ihrem Produkt zufrieden sind, klicken Sie oben links auf den Hammer und warten Sie, bis der Vorgang abgeschlossen ist. Dann klicke auf den grünen Pfeil rechts neben dem Hammer und sieh deinen Otto tanzen!

Wenn Sie möchten, können Sie sich einige andere Beispiele ansehen: YAKINDU Statechart Tools

Empfohlen: