Jag programmerade ett enkelt filter med glidande medelvärde. Detta lågpassfiltrerar bort snabba förändringar vilket gjorde roboten lugnare och med färre översvängningar.
Som man ser i videon klarar den nu av större stötar än tidigare.
Jag programmerade ett enkelt filter med glidande medelvärde. Detta lågpassfiltrerar bort snabba förändringar vilket gjorde roboten lugnare och med färre översvängningar.
Som man ser i videon klarar den nu av större stötar än tidigare.
I videon kan man se att roboten håller sig på någorlunda samma ställe på golvet och klarar av att ta emot lättare stötar. För att uppnå detta kaskadkopplade jag två PID-regulatorer och la till lågpassfilter på både hjulens rotationshastighet och robotens lutning.
Eftersom en Arduino inte har väldigt mycket processorkraft valde jag att använda totalt 3 mikroprocessorer:
Två kaskadkopplade PID-regulatorer. Den första har hastighet som setpoint (alltid 0 i det här fallet) och lutning som output. Om roboten rullar framåt kommer regulatorn att få ett positivt är-värde och skicka ut en negativt utsignal. Detta innebär att roboten kommer att vilja luta bakåt för att bromsa upp hastigheten.
PID-regulatorn nummer 2 tar hand om robotens vinkel relativt golvet. Börvärdet är utsignal från den tidigare PID-regulatorn. Normalt kommer börvärdet att variera från -3 till 3. Noll motsvarar att roboten ska stå helt rakt upp. Utsignalen kopplas till motorstyrningen och varierar från -100 till 100. -100 motsvarar full spänning till motorerna i bakåtriktning.
För att få renare insignaler används FIR-filter på både vinkel och hjulens hastighet. Lågpassfilter gör att snabba förändringar (exempelvis sensorbrus) inte släpps igenom.
Till vinkeln relativt golvet används en IMU med accelerometer och gyro. Ett komplementärfilter kombinerar signalerna från dessa och ger en utsignal som går att använda.
Jag hade som mål att all kod till detta projekt ska vara öppen och finnas att hämta på github. I readme finns länkar till bibliotek jag använt.
Lägger också upp cad och ritningar.
Jag kommer behöva justera PID för att få den självbalanserande. Det är för stora översvängningar och den beter sig väldigt oroligt. Uppdaterar när jag får bättre stabilitet.
Jag har nu fått tillräckligt många delar för att börja montera roboten.
Jag blev tvungen att borra upp hålen något för att få dem att passa M3.
Accellerometern sätts så nära motoraxeln som möjligt.
Smart grej för att dra åt alla muttrar är att ta en skruvdragare, en bit tejp och därefter snurra den gängade stången. Håll fast muttern med fingrarna och låt borrmaskinen göra jobbet. Annars tar det ett bra tag att få dit alla 24 muttrar.
Såhär ser den ut just nu:
Nu ikväll gjorde jag cad och beställde delar till att göra en egen självbalanserande robot. Kommer att använda Arduino som mikroprocessor och en liten 6 degrees of freedom som tilt-sensor.
Cadden på bilderna är inte helt klar men jag tror att de flesta delar är på sin rätta plats.
Uppdatterar med nya blogginlägg allt eftersom framsteg blir gjorda.
La till skruvförband till motorfäste, hjul och de stängerna. Uppdaterade bilder: