Spisu treści:

Robot Arduino Otto z automatem stanowym: 4 kroki
Robot Arduino Otto z automatem stanowym: 4 kroki

Wideo: Robot Arduino Otto z automatem stanowym: 4 kroki

Wideo: Robot Arduino Otto z automatem stanowym: 4 kroki
Wideo: Was Roboter (noch) nicht so gut können wie Menschen. 2024, Lipiec
Anonim
Image
Image

Przegląd projektu

W tym projekcie chcę pokazać sposób programowania Otto Robota, który jest robotem DIY opartym na Arduino. Korzystając z narzędzi YAKINDU Statechart Tools (bezpłatnych dla niekomercyjnych) możemy łatwo użyć maszyn stanowych do graficznego modelowania zachowania Otto Robota i generowania kodu C/C++. Użyjemy jednego z ich przykładów, aby rozszerzyć zachowanie według naszych upodobań.

Dla ludzi, którzy nie wiedzą, czym jest maszyna stanów i nie chcą grzebać w skomplikowanym artykule w Wikipedii, oto małe wyjaśnienie:

Automat stanów to tylko węzły i ścieżki między tymi węzłami. Masz węzeł początkowy i możesz podążać ścieżkami do innych węzłów w zależności od ich strażników, które mogą być reprezentowane przez zdarzenia. Zdarzenia te są wywoływane albo z samej maszyny stanu, albo z zewnątrz (jak funkcja itp.).

Samo narzędzie korzysta z interfejsu drag&drop i języka specyficznego dla domeny. Przejdę przez to dla ciebie, więc nie musisz przekopywać się przez ich dokumentację, aby uruchomić swojego Otto. Konfiguracja IDE nie jest zbyt trudna, ponieważ wszystkie wtyczki itp. powinny zostać zainstalowane automatycznie.

Kieszonkowe dzieci

Robot Otto lub Robot Zowi

Oba te roboty robią zasadniczo to samo i używają tego samego interfejsu API. Otto Robot to robot DIY, z częściami online, gotowy do wydrukowania za pomocą drukarki 3D, jeśli masz taką. Alternatywą jest Robot Zowi, który można kupić online i jest gotowy do użycia.

Narzędzia wykresów stanu YAKINDU

Narzędzie, którego będziemy używać do modelowania maszyny stanów. Możesz zacząć od 30-dniowego okresu próbnego, a później uzyskać bezpłatną licencję do użytku niekomercyjnego.

Eclipse C++ IDE dla wtyczki Arduino

Nie musimy pobierać go ręcznie, ponieważ IDE robi to za nas. Nadal uważałem, że fajnie byłoby to tutaj wymienić.

Krok 1: Konfiguracja wszystkiego

Zrozumienie, jak połączyć Otto
Zrozumienie, jak połączyć Otto

Po zainstalowaniu IDE uruchom je i skonfiguruj obszar roboczy w dowolnym miejscu na komputerze (konfiguracja jest taka sama, jak w przypadku korzystania z Eclipse po raz pierwszy). Gdy program uruchomi się w pełni, kliknij stronę powitalną i kliknij „Plik -> Nowy -> Przykład…”, a następnie wybierz „Przykłady wykresów stanu YAKINDU”, poczekaj chwilę i wyszukaj „Systemy wbudowane -> Zowi (C++)" przykład.

WAŻNE: Kliknij prawy górny przycisk o nazwie „Zainstaluj zależności…”! Instaluje to wszystko za Ciebie, więc nie musisz się martwić o biblioteki, wtyczki i tym podobne. Pobierz przykład, postępuj zgodnie z instrukcjami w przykładzie „Systemy wbudowane -> Zowi (C++)”, a następnie przejdź do następnego kroku.

Krok 2: Zrozumienie, jak połączyć Otto

Przejdź do pliku ".sct" i edytuj maszynę stanów według własnych upodobań. Po prawej stronie znajduje się menu ze wszystkimi dostępnymi pozycjami. Interesują nas tylko stany i przejścia.

Na zdjęciu widać, że napisałem kilka rzeczy na przejściach; „po X s” jest dość oczywiste, a „zawsze” oznacza po prostu, że trafia tam zaraz po skończeniu kodu od państwa. „Entry /” oznacza, że kod należy wykonać zaraz po wejściu w stan.

IDE kompiluje maszynę stanów do C++, zgodnego z Arduino. Aby korzystać z funkcji Otto, musimy sami wykonać trochę pracy, uzyskując dostęp do interfejsu.

Następujące słowa kluczowe mogą być użyte do zdefiniowania rzeczy, których ma używać maszyna stanów:

stałe, które przechowują wartości i nie można ich zmienić

zmienne, które przechowują wartości i mogą być zmieniane

operacje, które zostaną wygenerowane do wirtualnych metod C++ do implementacji

berło:

const PIN_YL: liczba całkowita = 2 const PIN_YR: liczba całkowita = 3 const PIN_RL: liczba całkowita = 4 const PIN_RR: liczba całkowita = 5 const dźwięk: liczba całkowita = 2 const usta_serce: liczba całkowita = 13 const usta_happyOpen: liczba całkowita = 11 operacja zowi_inger (YR: liczba całkowita: liczba całkowita, RL: liczba całkowita, RR: liczba całkowita) operacja zowi_home() operacja zowi_putMouth(typ ust: liczba całkowita) operacja zowi_sing(nazwa utworu: liczba całkowita) operacja zowi_walk(kroki: wartość rzeczywista, T: liczba całkowita, dir: liczba całkowita) operacja zowi_shakeLeg()

Wskazówka dla profesjonalistów: jeśli nie wiesz, co w danym miejscu wpisać, lub wydaje się, że wystąpił błąd, naciśnij „ctrl+spacja”, aby uzyskać wskazówki dotyczące tego, co możesz wpisać.

Dodatkowo powinieneś zajrzeć do przykładów, tam też jest trochę kodu! Możesz również użyć ich jako struktury do edycji modelu, co jest jedyną częścią, którą na razie jesteśmy zainteresowani.

Krok 3: Wypełnianie luk

Wypełnianie luk
Wypełnianie luk

Po zmianie rzeczy w modelu możesz kliknąć prawym przyciskiem myszy na "zowiSCT.sgen -> Generuj artefakty kodu". Generuje to funkcje wirtualne w C++, które są deklarowane w maszynie stanów w folderze „src-gen”, które następnie implementujemy przy użyciu normalnego C++.

Po prostu utwórz te dwa pliki w folderze "src", aby uzyskać funkcjonalność, jakiej oczekujemy od Otto.

Najpierw Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" klasa Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); wirtualny ~Impl(); void zowi_init(sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); nieważne zowi_home(); void zowi_putMouth(sc_integer mouthType); void zowi_sing(sc_integer nazwa_piosenki); void zowi_walk(sc_real steps, sc_integer T, sc_integer dir); nieważne zowi_shakeLeg(); }; #endif /* SRC_IMPL_H_ */

Następnie Impl.cpp

#include "Impl.h"

#include "../Zowi/Zowi.h" Zowi zowi = nowy 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 nazwa_piosenki) { zowi.sing(nazwa_piosenki); } void Impl::zowi_walk(sc_real steps, sc_integer T, sc_integer dir) { zowi.walk(steps, T, dir); } void Impl::zowi_shakeLeg() { zowi.shakeLeg(); }

Krok 4: Wykonanie tańca Otto

Gdy jesteś zadowolony ze swojego produktu, kliknij młotek w lewym górnym rogu i poczekaj na zakończenie procesu. Następnie kliknij zieloną strzałkę po prawej stronie młotka i zobacz, jak Twój Otto tańczy!

Jeśli chcesz, możesz sprawdzić inne przykłady: YAKINDU Statechart Tools

Zalecana: