Planen for min anden robot var simpel;
- Bygges af billige stumper, ikke Lego
- Skal kunne køre både inde og ude
- Autonomt kunne finde vej inde
- Autonomt (og offline) at kunne levere en dåseøl til en nabo på vejen
At bygge den er knap så simpelt, et lille budget er aldrig let. Hver gang motorene skal være kraftigere skal der også bruges en kraftigere motorcontroller, batteri, hjul osv. og prisen stiger meget hurtigt.
Jeg valgte et 4-hjulstrukket rover design – havde set en del ret dyre kits med den konfiguration, så jeg gik ud fra det var en god ide… De 4 motorer burde give kræfter nok til at køre igennem græs eller løse sten og samtidig kunne dreje som en tank. At kunne dreje om sin egen akse burde også gøre det lette at køre inde og måske gøre beregningerne til navigering lettere.
For at robotten skal kunne køre i en lige linje skal alle motorer køre med nøjagtig samme hastighed, så jagten gik ind på motorer med indbyggede sensorer. Det lykkedes faktisk, 4 stk. 9v motorer med metalgear og indbyggede sensorer. Sammen med 11cm hjul fra en RC offroader, for ekstra godt greb, skulle det give en tophastighed på 3,1 Km/timen og der burde være kræfter nok til både græs og en dåse øl som ekstra payload.
Det var selvfølgeglig fristende at bygge større og kraftigere, men selv en lille opgradering ville gøre robotten flere gange dyrrere. Faktisk skulle der ikke meget til for at den samlede pris ville blive 10-doblet, og det er jo kun et hygge projekt.
Hver motor har fået sit egen L298N motor driver og forhåbentlig bliver det ikke nødvendigt med køling af dem. Batteriet til motorerne er lille bly batteri, som godt nok er billigt, men vejer ret meget. Raspberry Pi’en har sin egen USB powerbank.
At håndtere input fra motorernes senorer og styre deres hastighed med et PVM signal var ikke så let som jeg havde håbet. En Raspberry Pi kan ikke håndtere de hurtige input fra de 4 motorer og er faktisk heller ikke særlig god til at lave PWM signaler. Så jagten gik ind på et alternativ.
Jeg kunne desværre ikke finde noget egnet, der kunne programmeres i python. Jeg endte med en Arduino Mega, da den have interrupt porte nok til alle motorerne.
Det var en ren pine at få strikket motorcontrolleren sammen. Jeg har aldrig programmeret i C og det er absolut ikke noget jeg er blevet fan af efter det her projekt. Men jeg er stolt af slut resultatet, den virker;
- Input af hastighed fra alle 4 motorer
- PID controller så alle motorer kører med ønsket hastighed
- Beskyttelse af budget motorerne;
- Ikke skifte retning hvis allerede i bevægelse
- “Ease-in”, så motorerne eks. ikke starter med max hastighed
- I2C interface til kommunikation med Raspbery Pi
- LCD display til debugging og indstillinger
- Roterary encoder til menu
- Odometer feedback til Pi
- 3 farvet led til feedback
Jeg regnede ikke med at lave den perfekte robot i første forsøg, så jeg valgte at ignorere al estetik og bare skrue det hele på et stykke krydsfinner. Hjulene i hvert sit hjørne på et kvadrat.
Den kan køre snorlige og det er let at sende komandoer fra pi’en via I2C. Den har 3 ‘gear’; inde, ude og manuelt. Hvor skarpt den skal dreje styres med hastigheden (eller retningen) mellem højre og venstre side. Kan enten køre kontinuerligt eller med kommandoer ala ‘kør 75cm frem’ og det gør den meget nøjagtigt. Der er odometer feedback så Pi’en ved hvor langt den har kørt.
Min plan om at dreje som en tank virkede til gengæld overhovedet ikke. Der er virkeligt godt greb i de brede dæk jeg har valgt og for at rotere om sin egen akse, ved at kører højre- venstreside i hver sin retning, skal hjulene kunne ‘skride’. Det er de absolut ikke glade for og det lyder som om motorerne er ved at vride hele robotten fra hindanden når jeg prøver – bløde sving er ikke noget problem. Hvis jeg satte nogle meget tynde/glatte hjul på ville det sansynligvis fungere inde, men jeg vil også kunne køre udenfor.
Så robotten ryger på pension inden jeg overhovedet har fået sensorer på den. Jeg vil forsøge at få det til at virke på den næste robot med de motorer og hjul jeg allerede har, ved at gøre robotten bredere , flytte hjulene tæt på hindanden og evt. flytte tyngdepunktet tættere på af akslerne.
Jeg håber Robot #003 kan blive robotten hvor jeg endelig kommer lidt videre med at lege med autonomi. Vil gerne have en platform hvor jeg kan rode med programeringen og eksperimenter med at finde vej osv.
Så planen for Robot #003 er:
- Skal være bedre til at dreje
- Batteri opgradering
- Sikringer (så det ikke ender med blå røg hvis den sidder fast i en hæk)
- Sensorer, massere af sensorer
- Meget gerne en ny motorcontroller der kan programmeres i python
- Finde sweetspot for PWM Mhz for at minimere støj fra motorerne og også gøre dem mere energieffektive
- Kamera, evt. også en Xbox 360 Kinect
- Telemetri over radio når udenfor wifi range
Og når det fungere, kan jeg endeligt komme igang med at softwaren. Planen er at installere Robot Operating System (ROS) på Pi’en. Det bliver måske lidt svært at få ROS til at snakke sammen med min egen motorcontroller – men hvornår jeg kan finde tid til det er nok det største problem.