Obsah:

Robot Arduino Otto se stavovým strojem: 4 kroky
Robot Arduino Otto se stavovým strojem: 4 kroky

Video: Robot Arduino Otto se stavovým strojem: 4 kroky

Video: Robot Arduino Otto se stavovým strojem: 4 kroky
Video: Robotic Arm assembly. 3D printed Robot arm. #engineering #actuators #robot #roboticarm #robotics 2024, Listopad
Anonim
Image
Image

Přehled projektu

V tomto projektu vám chci ukázat způsob programování Otto Robot, což je robot DIY založený na Arduinu. Pomocí nástrojů YAKINDU Statechart Tools (zdarma pro nekomerční) můžeme snadno pomocí stavových strojů graficky modelovat chování robota Otto a generovat kód C/C ++. Použijeme jeden z jejich příkladů k rozšíření chování podle našich představ.

Pro lidi, kteří nevědí, co je to státní stroj, a nechtějí se hrabat ve složitém článku na Wikipedii, zde je malé vysvětlení:

Stavový stroj jsou jen uzly a cesty mezi těmito uzly. Máte počáteční uzel a můžete se vydat po cestách k jiným uzlům v závislosti na jejich strážích, které mohou být reprezentovány událostmi. Tyto události jsou vyvolány buď ze stavového stroje samotného, nebo zvenčí (jako funkce atd.).

Samotný nástroj používá rozhraní drag & drop a jazyk specifický pro doménu. Projdu to za vás, abyste nemuseli kopat jejich dokumentaci, abyste mohli svůj Otto zprovoznit. Nastavení IDE není příliš obtížné, protože všechny doplňky atd. By se měly nainstalovat automaticky.

Zásoby

Otto Robot nebo Zowi Robot

Oba tito roboti dělají v podstatě totéž a používají stejné API. Otto Robot je robot pro kutily s online součástmi připravenými k tisku na 3D tiskárně, pokud ji náhodou máte. Alternativou je robot Zowi, který lze zakoupit online a je připraven k použití.

Nástroje YAKINDU Statechart

Nástroj, který budeme používat k modelování stavového stroje. Můžete začít s 30denní zkušební verzí a poté získat bezplatnou licenci pro nekomerční použití.

Eclipse C ++ IDE pro Arduino Plugin

Nemusíme to stahovat ručně, protože IDE to dělá za nás. Pořád jsem si říkal, že by bylo fajn to tady vypsat.

Krok 1: Nastavení všeho

Pochopení, jak propojit Otto
Pochopení, jak propojit Otto

Po instalaci IDE spusťte a vytvořte pracovní prostor kdekoli na vašem počítači (nastavení je totožné s prvním použitím Eclipse). Po úplném spuštění programu klikněte na uvítací stránku a klikněte na „Soubor -> Nový -> Příklad…“a poté vyberte „Příklady stavu YAKINDU Statechart“, chvíli počkejte a vyhledejte „Embedded Systems -> Zowi (C ++) "příklad.

DŮLEŽITÉ: Klikněte na pravé horní tlačítko s názvem „Instalovat závislosti …“! Tím se vše nainstaluje za vás, takže si nemusíte dělat starosti s knihovnami, zásuvnými moduly a podobně. Stáhněte si příklad, postupujte podle pokynů v příkladu „Embedded Systems -> Zowi (C ++)“a poté pokračujte dalším krokem.

Krok 2: Pochopení, jak propojit Otto

Přejděte do souboru „.sct“a upravte stavový stroj podle svých představ. Vpravo je nabídka se všemi dostupnými položkami. Zajímají nás pouze stavy a přechody.

Na obrázku vidíte, že jsem do přechodů napsal nějaké věci; "po X s" je docela samozřejmé a "vždy" znamená, že tam jde hned po dokončení kódu ze státu. "Vstup /" znamená, že kód by měl být spuštěn hned po zadání stavu.

IDE kompiluje stavový stroj do C ++, což je kompatibilní s Arduino. Abychom mohli využívat funkce Otto, musíme si s přístupem k rozhraní udělat trochu práce.

K definování věcí, které má stavový stroj použít, lze použít následující klíčová slova:

konstanty, které uchovávají hodnoty a nelze je změnit

proměnné, které uchovávají hodnoty a lze je měnit

operace, které budou generovány do virtuálních metod C ++ pro implementaci

rozhraní:

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

Pro tip: pokud na nějakém místě nevíte, co zadat, nebo se zdá, že došlo k chybě, stiskněte „ctrl+mezera“, abyste získali rady, co můžete zadat.

Kromě toho byste se měli podívat na příklady, mají tam také nějaký kód! Můžete je také použít jako strukturu pro úpravu modelu, což je jediná část, která nás nyní zajímá.

Krok 3: Vyplnění mezer

Vyplnění mezer
Vyplnění mezer

Po změně věcí v modelu můžete pravým tlačítkem kliknout na „zowiSCT.sgen -> Generovat artefakty kódu“. Tím se generují virtuální funkce v C ++, které jsou ve stavovém stroji deklarovány do složky „src-gen“, kterou následně implementujeme pomocí normálního C ++.

Stačí vytvořit tyto dva soubory ve složce „src“, abyste získali funkce, které od Otto požadujeme.

Nejprve Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" třída Impl: public ZowiSCT:: DefaultSCI_OCB {public: Impl (); virtuální ~ Impl (); neplatné zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); neplatné zowi_home (); neplatné zowi_putMouth (sc_integer mouthType); neplatné zowi_sing (sc_integer songName); neplatné zowi_walk (sc_real kroky, sc_integer T, sc_integer dir); neplatné zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /

Poté Impl.cpp

#include "Impl.h"

#include "../Zowi/Zowi.h" Zowi zowi = nový Zowi (); Impl:: Impl () {} Impl:: ~ Impl () {} void Impl:: zowi_home () {zowi.home (); } neplatné 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); } neplatné Impl:: zowi_sing (sc_integer songName) {zowi.sing (songName); } void Impl:: zowi_walk (sc_real kroky, sc_integer T, sc_integer dir) {zowi.walk (kroky, T, dir); } neplatné Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }

Krok 4: Roztančení Otto

Když jste s produktem spokojeni, klikněte na kladivo vlevo nahoře a počkejte, až se proces dokončí. Poté klikněte na zelenou šipku napravo od kladiva a uvidíte, jak váš Otto tančí!

Pokud chcete, můžete se podívat na další příklady: YAKINDU Statechart Tools

Doporučuje: