Czech English

Rocker

terénní robot

Robota s nezávislým pohonem a řízením všech kol jsem si chtěl postavit již dávno. Konečně jsem objevil vhodné pohony - robotická serva (WaveShare ST3215), která splnila téměř všechny požadavky (a za rozumnou cenu). A tak vznikl robot se čtyřkolovým podvozkem typu rocker-bogie.

Aktualizace: 28.1.2024 Odladěn driver pro komunikaci se servy


Základní údaje

Autor
  • Martin Locker
Řídicí počítače
  • low level - STM32F103
  • high level - Raspberry Pi 3B
Senzory
  • IMU
  • GPS
  • Lidar LDrobot LD-06
  • hloubková kamera RealSense D455
Pohon
  • 8x digitální robotické servo WaveShare ST3215
Napájení
  • pohony LiPol 3s 5Ah
  • elektronika power banka 20Ah
Koncepce
  • čtyřkolový podvozek typu Rocker-bogie (výkyvné uložení kol)
  • každé kolo má nezávislý pohon a nezávislé natočení směru

Charakteristika robota

Podvozek

Podvozek robota je postaven z hliníkových profilů, plexi a dílů vyrobených 3D tiskem z PLA. Snahou bylo udělat konstrukci co nejčistší (aby nikde nic nepřekáželo, nekoukaly dráty, ...). Takže některé části jsou nakonec celkem komplikované - převodovka s pohonem uvnitř kola, vidlice kol, jejímž vnitřkem vedou vodiče k servům (viz. fotky).

Řízení pohybu

Podvozek je navržen tak, že osy zatáčení kol jsou ve vrcholech čtverce (robot má stejný rozchod i rozvor kol).
Díky nezávislému natáčení každého kola lze realizovat dva základní způsoby řízené:
  • "automobilové" řízení s (ackermannovým) řízením všech čtyř kol a samostatným řízením rychlosti každého kola
  • synchrodrive (všesměrové řízení) - všechna kola natáčena do stejného směru a otáčejí se stejnou rychlostí
    + otáčení na místě (kola se natočí ve směru kružnice procházející osami natáčení kol)

Vlastní řízení (výpočty natočení kol a jejich rychlosti) řídí mikrokontroler na základě povelů z nadřízeného systému
(1. dopředná rychlost + úhlová rychlost, 2. rychlost + směr).

Video


První jízda - dálkově řízeno

28. ledna 2024 - Odladěn driver pro komunikaci se servy

Po postrčení Martinem D. jsem (po delší době) vytáhl robota a pustil se konečně do napsání rozumného rozhraní pro komunikaci s digitálními servy.
Snažil jsem se to napsat tak, aby to bylo použitelné na různých platformách (zatím tedy AVR, STM32 a ESP32). Nejnižší vrstvu implementující jednodrátovou sériovou komunikaci jsem oddělil od vyšších vrstev a pro STM32 vyzkoušel tři varianty realizace - standardní využití knihovní obsluhy uartu (s možností využití hw řešení single wire half duplex na STM32), vlastní obsluha uartu přes přerušení (zatím nevyzkoušeno) a využití dma přenosu (to by měla být cílová varianta). Bohužel zatím DMA přenos nepůjde použít, protože na použité desce zrovna UART3 sdílí stejné kanály s rozhraním SPI1, které bude sloužit pro komunikaci s RPi a tam je dma nutností.
Low level mikrokontroler by měl být v budoucnu schopen obsloužit všechny periferie (kromě kamery), tj. pohony, imu, gps a lidar. Z hlediska pohonů bude zajišťovat výpočet natočení jednotlivých kol a jejich rychlosti dle povelů z nadřízeného systému a zpětné čtení enkodérů. U dalších periferií bude zajišťovat periodické vyčítání dat. Proto se snažím napsat obsluhu tak, aby co nejméně zatěžovala mikrokontroler. Použití dma pro uart jsem už zvládl (po větším úsilí) při vyčítání lidaru. Proto to u komunikace se servy už celkem šlo (jen se museli použít dva kanály - pro vysílání a příjem).
Závěr
  • hotovo: vyčítání dat z lidaru, komunikace se servy
  • k řešení: doladit řízení pohonů (výpočty natočení a rychlostí), komunikace s imu (třetí uart po fyzické vrstvě can), komunikace s RPi (spi)