Table des matières:

Robot Arduino Otto avec machine d'état : 4 étapes
Robot Arduino Otto avec machine d'état : 4 étapes

Vidéo: Robot Arduino Otto avec machine d'état : 4 étapes

Vidéo: Robot Arduino Otto avec machine d'état : 4 étapes
Vidéo: How to Make a Mini Robot bug 2024, Juillet
Anonim
Image
Image

Aperçu du projet

Dans ce projet, je veux vous montrer une façon de programmer le robot Otto, qui est un robot de bricolage basé sur Arduino. En utilisant YAKINDU Statechart Tools (gratuit pour les non commerciaux), nous pouvons facilement utiliser des machines à états pour modéliser graphiquement le comportement du robot Otto et générer du code C/C++. Nous utiliserons l'un de leurs exemples pour étendre le comportement à notre convenance.

Pour les personnes qui ne savent pas ce qu'est une machine à états et qui ne veulent pas fouiller dans l'article compliqué de Wikipédia, voici une petite explication:

Une machine à états n'est que des nœuds et des chemins entre ces nœuds. Vous avez un nœud de départ et pouvez emprunter les chemins vers d'autres nœuds en fonction de leurs gardes, qui peuvent être représentés par des événements. Ces événements sont déclenchés soit depuis la machine à états elle-même, soit depuis l'extérieur (comme une fonction, etc.).

L'outil lui-même utilise une interface glisser-déposer et un langage spécifique au domaine. Je vais l'examiner pour vous, afin que vous n'ayez pas à fouiller dans leur documentation pour que votre Otto soit opérationnel. La configuration de l'IDE n'est pas trop difficile, car tous les plug-ins, etc. devraient être installés automatiquement.

Fournitures

Robot Otto ou Robot Zowi

Ces deux robots font essentiellement la même chose et utilisent la même API. Le Robot Otto est un robot DIY, avec ses pièces en ligne, prêt à être imprimé avec une imprimante 3D si vous en possédez une. L'alternative est le robot Zowi, qui peut être acheté en ligne et prêt à l'emploi.

Outils de diagramme d'états YAKINDU

L'outil que nous utiliserons pour modéliser la machine d'état. Vous pouvez commencer par un essai de 30 jours et obtenir une licence gratuite pour une utilisation non commerciale par la suite.

Eclipse C++ IDE pour le plugin Arduino

Nous n'avons pas besoin de le télécharger manuellement, car l'IDE le fait pour nous. Je pensais toujours que ce serait bien de l'énumérer ici.

Étape 1: tout configurer

Comprendre comment interfacer l'Otto
Comprendre comment interfacer l'Otto

Après avoir installé l'IDE, lancez-le et configurez un espace de travail n'importe où sur votre PC (la configuration est identique à l'utilisation d'Eclipse pour la première fois). Lorsque le programme a complètement démarré, cliquez en dehors de la page d'accueil et cliquez sur 'Fichier -> Nouveau -> Exemple…' puis sélectionnez 'YAKINDU Statechart Exemples', attendez un peu et recherchez le "Systèmes embarqués -> Zowi (C++)" Exemple.

IMPORTANT: Cliquez sur le bouton en haut à droite appelé « Installer les dépendances… » ! Cela installe tout pour vous, vous n'avez donc pas à vous soucier des bibliothèques, des plug-ins, etc. Téléchargez l'exemple, suivez les instructions de l'exemple "Systèmes embarqués -> Zowi (C++)", puis passez à l'étape suivante.

Étape 2: Comprendre comment interfacer l'Otto

Allez dans le fichier ".sct" et modifiez la machine d'état à votre guise. Sur la droite se trouve un menu avec tous les éléments disponibles. Nous ne nous intéressons qu'aux états et transitions.

Sur la photo, vous pouvez voir que j'ai écrit des trucs sur les transitions; le "après X s" est assez explicite et le "toujours" signifie simplement qu'il y va juste après avoir terminé le code de l'État. L'"entrée /" signifie que le code doit être exécuté juste après être entré dans l'état.

L'IDE compile la machine d'état en C++, qui est compatible Arduino. Pour utiliser les fonctionnalités de l'Otto, nous devons faire un peu de travail nous-mêmes en accédant à l'interface.

Les mots-clés suivants peuvent être utilisés pour définir des éléments à utiliser par la machine d'état:

constantes, qui contiennent des valeurs et ne peuvent pas être modifiées

variables, qui contiennent des valeurs et peuvent être modifiées

opérations, qui seront générées vers des méthodes C++ virtuelles pour la mise en œuvre

interface:

const PIN_YL: entier = 2 const PIN_YR: entier = 3 const PIN_RL: entier = 4 const PIN_RR: entier = 5 const son: entier = 2 const bouche_coeur: entier = 13 const bouche_happyOpen: entier = 11 opération zowi_init(YL: entier, YR: entier, RL: entier, RR: entier) opération zowi_home() opération zowi_putMouth(mouthType: entier) opération zowi_sing(songName: entier) opération zowi_walk(steps: réel, T: entier, dir: entier) opération zowi_shakeLeg()

Conseil de pro: si vous ne savez pas quoi saisir à un endroit ou s'il semble y avoir une erreur, appuyez sur « ctrl+espace » pour obtenir des conseils sur ce que vous pouvez saisir.

De plus, vous devriez regarder les exemples, ils contiennent également du code ! Vous pouvez également les utiliser comme structure pour simplement éditer le modèle, qui est la seule partie qui nous intéresse pour le moment.

Étape 3: combler les lacunes

Combler les lacunes
Combler les lacunes

Après avoir modifié des éléments dans le modèle, vous pouvez cliquer avec le bouton droit sur "zowiSCT.sgen -> Générer des artefacts de code". Cela génère les fonctions virtuelles en C++, qui sont déclarées dans la machine d'état dans le dossier "src-gen", que nous implémentons ensuite en utilisant le C++ normal.

Créez simplement ces deux fichiers dans le dossier "src" pour obtenir les fonctionnalités que nous voulons d'Otto.

D'abord l'Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" classe Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); virtuel ~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(pas sc_real, sc_integer T, sc_integer dir); void zowi_shakeLeg(); }; #endif /* SRC_IMPL_H_ */

Ensuite, l'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(pas sc_real, sc_integer T, sc_integer dir) { zowi.walk(steps, T, dir); } void Impl::zowi_shakeLeg() { zowi.shakeLeg(); }

Étape 4: Faire danser Otto

Lorsque vous êtes satisfait de votre produit, cliquez sur le marteau en haut à gauche et attendez la fin du processus. Cliquez ensuite sur la flèche verte à droite du marteau et voyez votre Otto danser !

Si vous le souhaitez, vous pouvez consulter d'autres exemples: YAKINDU Statechart Tools

Conseillé: