Inhoudsopgave:

Arduino Otto-robot met staatsmachine - Ajarnpa
Arduino Otto-robot met staatsmachine - Ajarnpa

Video: Arduino Otto-robot met staatsmachine - Ajarnpa

Video: Arduino Otto-robot met staatsmachine - Ajarnpa
Video: Raspberry Pi Pico для робототехники 2024, Juli-
Anonim
Image
Image

Projectoverzicht

In dit project wil ik je een manier laten zien om de Otto Robot te programmeren, een op Arduino gebaseerde doe-het-zelfrobot. Met behulp van YAKINDU Statechart Tools (gratis voor niet-commercieel) kunnen we eenvoudig state-machines gebruiken om het gedrag van de Otto Robot grafisch te modelleren en C/C++-code te genereren. We zullen een van hun voorbeelden gebruiken om het gedrag naar onze smaak uit te breiden.

Voor de mensen die niet weten wat een staatsmachine is en niet door het ingewikkelde Wikipedia-artikel willen snuffelen, volgt hier een kleine uitleg:

Een toestandsmachine is slechts knooppunten en paden tussen die knooppunten. Je hebt een startknooppunt en kunt de paden naar andere knooppunten nemen, afhankelijk van hun bewakers, die kunnen worden weergegeven door gebeurtenissen. Deze gebeurtenissen worden opgewekt vanuit de toestandsmachine zelf of van buitenaf (zoals een functie, enz.).

De tool zelf maakt gebruik van een drag&drop-interface en een domeinspecifieke taal. Ik zal het voor je doornemen, zodat je niet door hun documentatie hoeft te spitten om je Otto aan de gang te krijgen. Het instellen van de IDE is niet zo moeilijk, omdat alle plug-ins, enz. automatisch zouden moeten worden geïnstalleerd.

Benodigdheden

Otto Robot of Zowi Robot

Beide robots doen in wezen hetzelfde en gebruiken dezelfde API. De Otto Robot is een doe-het-zelf-robot, waarvan de onderdelen online staan, klaar om geprint te worden met een 3D-printer als je die hebt. Het alternatief is de Zowi Robot, die online en gebruiksklaar te koop is.

YAKINDU Statechart-tools

De tool die we zullen gebruiken om de staatsmachine te modelleren. U kunt beginnen met een proefperiode van 30 dagen en daarna een gratis licentie krijgen voor niet-commercieel gebruik.

Eclipse C++ IDE voor Arduino-plug-in

We hoeven het niet handmatig te downloaden, omdat de IDE het voor ons doet. Toch dacht ik dat het leuk zou zijn om het hier te vermelden.

Stap 1: Alles instellen

Inzicht in de interface van de Otto
Inzicht in de interface van de Otto

Nadat u de IDE hebt geïnstalleerd, voert u deze uit en stelt u een werkruimte in waar dan ook op uw pc (de installatie is identiek aan het voor het eerst gebruiken van Eclipse). Wanneer het programma volledig is gestart, klikt u de welkomstpagina weg en klikt u op 'Bestand -> Nieuw -> Voorbeeld…' en selecteert u vervolgens 'YAKINDU Statechart-voorbeelden', wacht even en zoekt naar de "Embedded Systems -> Zowi (C++))" voorbeeld.

BELANGRIJK: Klik op de knop rechtsboven genaamd 'Install Dependencies…'! Deze installeert alles voor je, zodat je je geen zorgen hoeft te maken over bibliotheken, plug-ins en dergelijke. Download het voorbeeld, volg de instructies in het voorbeeld "Embedded Systems -> Zowi (C++)" en ga verder met de volgende stap.

Stap 2: Begrijpen hoe de Otto. te koppelen

Ga naar het ".sct"-bestand en bewerk de statusmachine naar wens. Aan de rechterkant is een menu met alle beschikbare items. We zijn alleen geïnteresseerd in de toestanden en overgangen.

Op de foto kun je zien dat ik wat dingen op de overgangen heb geschreven; de "na X s" is vrij duidelijk en de "altijd" betekent gewoon dat het daar naartoe gaat direct na het voltooien van de code van de staat. De "entry /" betekent dat de code direct na het invoeren van de status moet worden uitgevoerd.

De IDE compileert de toestandsmachine naar C++, wat Arduino-compatibel is. Om de functies van de Otto te gebruiken, moeten we zelf wat werk doen om toegang te krijgen tot de interface.

De volgende trefwoorden kunnen worden gebruikt om dingen te definiëren die de staatsmachine moet gebruiken:

constanten, die waarden bevatten en niet kunnen worden gewijzigd

variabelen, die waarden bevatten en kunnen worden gewijzigd

bewerkingen, die worden gegenereerd naar virtuele C++-methoden voor implementatie

koppel:

const PIN_YL: geheel getal = 2 const PIN_YR: geheel getal = 3 const PIN_RL: geheel getal = 4 const PIN_RR: geheel getal = 5 const geluid: geheel getal = 2 const mond_hart: geheel getal = 13 const mond_happyOpen: geheel getal = 11 operatie zowi_init(YL: geheel getal, YR: integer, RL: integer, RR: integer) operatie zowi_home() operatie zowi_putMouth(mouthType: integer) operatie zowi_sing(songName: integer) operatie zowi_walk(steps: real, T: integer, dir: integer) operatie zowi_shakeLeg()

Pro-tip: als u ergens niet weet wat u moet invoeren of als er een fout lijkt te zijn, drukt u op "ctrl+spatie" om enkele hints te krijgen over wat u kunt invoeren.

Bovendien moet je de voorbeelden bekijken, ze hebben daar ook wat code! Je kunt ze ook gebruiken als een structuur om alleen het model te bewerken, wat het enige deel is waar we vanaf nu in geïnteresseerd zijn.

Stap 3: De hiaten opvullen

De hiaten opvullen
De hiaten opvullen

Nadat u dingen in het model hebt gewijzigd, kunt u met de rechtermuisknop op "zowiSCT.sgen -> Generate Code Artifacts" klikken. Dit genereert de virtuele functies in C++, die in de state-machine worden gedeclareerd in de map "src-gen", die we vervolgens implementeren met behulp van normale C++.

Maak gewoon deze twee bestanden in de map "src" om de functionaliteit te krijgen die we van Otto willen.

Eerst de Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); virtuele ~Impl(); void zowi_init(sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); ongeldig 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); ongeldig zowi_shakeLeg(); }; #endif /* SRC_IMPL_H_ */

Dan de 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); } 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(); }

Stap 4: Het maken van de Otto Dance

Als je tevreden bent met je product, klik je op de hamer linksboven en wacht je tot het proces is voltooid. Klik dan op de groene pijl rechts van de hamer en zie je Otto dansen!

Als je wilt, kun je enkele andere voorbeelden bekijken: YAKINDU Statechart Tools

Aanbevolen: