niedziela, 3 grudnia 2017

Funkcje programu sterującego - opisanie rzeczy.

Całość programu sterującego rozpoczyna się od zaimportowania biblioteki - właściwie jednej z najpopularniejszych bibliotek pod platformę BeagleBone Black - mianowicie Adafruit-BBIO. Sposób instalacji tej biblioteki na platformie opisano dokładnie TUTAJ. Niemniej, żeby nie było Wam tak łatwo - sami sobie znajdźcie obraz Debiana na którym to działa :) W każdym bądź razie jak już to Zrobicie...
Było co innego, ale będzie czerstwo i nudno gdyż zostałem zaszczuty czymś o "obowiązkach domowych" - typical... :-D
No dość już ględzenia o nieczym!!!

Można za pomocą instrukcji opisanej w powyższym linku ustawiać i kontrolować zachowanie portów naszego Beagle'a.

Z innej beczki. Inna sprawa, że w Kanadzie można mieć Rysia domowego (normalnie ruchy jak kot - bo to jest kot :/):


A w Polsce...
Za to takie szczenię dobrze ułożone będzie na długooooo Waszym best frendem.

Aby program mógł w pełni funkcjonować potrzebne jest zdefiniowanie kilku stałych sterujących poszczególnymi fazami "wykonywania się" programu. Oto one:

PIN_SPEED_CH1_RightOkreśla, że ​​pin 14, portu rozszerzeń (P9) steruje prędkością prawego koła przedniego;

PIN_SPEED_CH2_LeftOkreśla, że ​​pin 16, portu rozszerzeń (P9) steruje prędkością lewego koła przedniego;

PIN_SPEED_CH3_RightOkreśla, że ​​pin 19 portu rozszerzeń (P8) steruje prędkością prawego koła tylnego;

PIN_SPEED_CH4_LeftOkreśla, że ​​pin 13 portu rozszerzeń (P8) steruje prędkością lewego koła tylnego.

PIN_DIR_CH1_LEFT:  Określa, że pin 27 portu rozszerzeń (P9) steruje kierunkiem obrotu prawego koła przedniego;

PIN_DIR_CH2_LEFT:  Określa, że pin 30 portu rozszerzeń (P9) steruje kierunkiem obrotu lewego koła przedniego;

PIN_DIR_CH3_LEFTOkreśla, że pin 17 portu rozszerzeń (P8) steruje kierunkiem obrotu prawego koła tylnego;

PIN_DIR_CH4_LEFT:  Określa, że pin 15 portu rozszerzeń (P8) steruje kierunkiem obrotu lewego koła tylnego.

MAX_SPEED: Jest to stała przechowująca aktualną maksymalną prędkość jaką można ustawić dla platformy (czyli jak ustawię ją na 100% [100] to platforma powinna się poruszać jakieś 1 może 1,5 km/h).

MIN_SPEED:  Jest to stała przechowująca minimalną prędkość jaką można ustawić dla platformy (czyli jak ustawię ją na 23% - 25% platforma powinna się praktycznie nie poruszać). Metodą prób i błędów ustaliłem, że w zasadzie na wartościach ustawionych poniżej 23 - 25 nie ruszymy platformą z miejsca :) - uważajcie więc, żeby nie spalić kontrolera i silniczków.

CHANGE_RATE: Jest to stała określająca wartość z jaką, czy też o jaką zwiększamy lub zmniejszamy prędkość (wartość ta to oczywiście % wypełnienia naszego sygnału podawanego z BBB do kontrolera silniczków). Domyślnie jest 5 ale można poeksperymentować z innymi mniejszymi lub większymi :).

STOP_SPEED: Jest to wartość jaką ustawiamy na wyjściu kiedy chcemy aby robot się zatrzymał.

FORWARD_DIR: Wartość definiująca kiedy robot ma jechać do przodu (jazda do przodu).

REVERSE_DIR: Wartość definiująca kiedy robot ma jechać do tyłu (jazda do tyłu).

Tak wygląda zdefiniowanie stałych sterujących w programie. Teraz należałoby zdefiniować zmienne globalne dla bieżącego kierunku.
Zmienne te będą śledziły, aktualną prędkość i kierunek naszego robota.
Pierwsza z tych definicji jest o tyle ważna, że inicjowane są definiowane są w niej piny na portach rozszerzeń które chcemy używać do kontroli naszej maszyny.
Inna sprawa, że sporo się nakombinowałem zanim znalazłem odpowiedni obraz Debiana, który ma wszystko ustawione prawidłowo ale nie będę tu teraz o tym pisał.
Ważne jest to, że używając funkcji PWM.start() dla odpowiednio: PIN_SPEED_CH1_RightPIN_SPEED_CH2_LeftPIN_SPEED_CH3_Right oraz PIN_SPEED_CH4_Left - inicjujemy po prostu przypisane do tych stałych pinouty PWM, naszego BeagleBone Black.
W dokładnie taki sam sposób użyjemy funkcji zmiennej GPIO.setup() dla pinów PIN_DIR_CH1_RightPIN_DIR_CH2_LeftPIN_DIR_CH3_Right oraz PIN_DIR_CH4_Left do inicjalizacji pinów cyfrowych Input/Output naszego komputera (to one będą zbierały sygnał z enkoderów i na jego podstawie program "podejmie decyzje" jak kręcić nimi dalej).
Dodatkowo w programie została założona funkcja init_rover(), którą jak Zobaczycie będziemy wywoływali przed wywołaniem każdej innej funkcji w tym programie.
W następnym poście (bo teraz już mi się nie chce), omówię pozostałe funkcje i pokrótce ich działanie.

A na koniec coś dla wszystkich zadufanych w technologii, wszechwiedzących, badających sedno wszystkiego i wszystkich, drążących prawdę w poszukiwaniu prawdy, która... jest szara jak szynszyla i rozczarowuje:

"Gdy
już nakarmię swoje ego
galaktyk
i harmonii pyłem
i Głos usłyszę ten
dlaczego
na ziemi
między wami byłem
to skłonię przed Nim
czoło dumne
podam
swą duszę pełną strachu
i
po raz drugi jeszcze umrę
by zostać
na wszechświata dachu"

Ryszard Szociński