Gudrun

  • Sista veckan!

    Nu är exjobbet avslutat och avklarat!

    De senaste veckorna har vi lagt ner tid på rapportskrivning samt att få multithreading och multiprocessing att fungera. Detta lyckades vi tyvärr inte med så vår slutprodukt kan bara utföra en funktion i taget. Detta är vi inte är helt nöjda med men nu är tiden slut så det är upp till någon annan att utföra detta. Den sista veckan körde vi Gudrun på en bana och märkte att hon blev instabil vid vissa tillfällen. Vi beställde då ett gyro för att lösa detta problem men insåg att det kanske inte skulle gå att implementera då tiden började bli knapp. Vi fick gyrot två dagar senare men vi fick problem med att ansluta det till Raspberry Pi:n, så tyvärr fick denna lösning också slopas. Men vi nådde vårt mål och Gudrun kan ta sig från punk A till punkt B med hinder i vägen. Hindret får dock ej överstiga 10 cm då cylindrarna inte har längre slaglängd. Slutprodukten kan även streama trådlös samt finns en högtalare som för tillfället ger en varningssignal men denna signal kan väljas till det som önskas av opperatören.

    Här är då slutresultatet av vår produkt, en idè av VD:n för Broccoli Engineering AB & Broccoli Systems AB, Björn Bergholm.

    Filmen är klippt då den användes under redovisningen på Chalmers och denna är tidsbegränsad. Det som visas är hur den klarar av vissa hinder med olika höjd och densitet samt hur den streamar trådlöst och dess högtalarfunktion.

     

     

    Tack för visat intresse av vårt exjobb!

    / Isabelle Nilsson och Simon Modigh

  • Sjunde veckan

    Denna veckan har vi jobbat med programmeringen för att få roboten att röra sig bättre och så har vi arbetat med AD omvandlingen som vi ska ha för att känna av när benet når marken.

    En av dem stora förändringarna denna veckan är att vi har bytt sätt att kontrollera cylindrarna från att styra med PWM signal till att styra med RC signal. Detta gjorde att vi kunde få cylindrarna att uttnyttja hela sin slaglängd vilket den inte kunde annars.

    För att förbättra gången så har vi jobbat med att sakta in servona och bygga på funktionerna för att svänga, backa och lite andra små saker.

    Vi har också börjat exprimentera med AD konvertern som vi ska använda för att läsa av om cylindrarna har nått marken eller inte. För att känna av det så använder vi kraftkänsliga resistorer som sänker sin resistans när dem har kraft på sig. Sedan så hade konvertern ett färdigt python bibliotek som man kunde använda för att bl.a. läsa av skillnader, logga värdena till fil etc. Nästa steg är att fästa alla resistorer längst ner på benen och att programmera så att alla benen kan gå tills just det benets resistor känner en tillräckligt stor kraft.

  • Sjätte veckan

    Denna veckan har det mest varit försök till optimering och exprimenterande av hur vi skulle kunna sakta in servona så vi då skulle få en snyggare gång.

    Huvudmålet denna vecka var att vi skulle få servona att sakta in för att få roboten mer stabil, så som den gick innan gjorde att den nästan kastade sig framåt och därför började gunga. Efter en del försök insåg vi att det inte kunde göras programmeringsmässigt eftersom cylindrarna behöver en frekvens över 100 Hz och servona får ej ha frekvens över 40 Hz. PWM hat:en kan bara ge ut en frekvens och vi inte kunde byta frekvens under gång då vi kör cylindrarna och servona samtidgt. Vi försökte lösa det hårdvarumässigt genom att testa med resistorer, transistorer och dylikt utan att få önskat resultat (tanken var då att minska spänningen som gavs ut).Tillslut insåg vi att vi kunde lösa det genom att använda två separata PWM HAT:ar, med var sin frekvens. Eftersom vi redan hade två i reserv så kunde vi bara löda på kontakterna och köra.

    Servona läser av pulsen den får och ställer sig sedan i ett visst läge beroende av längden på pulsen (duty cykeln). Den läser av under en period på ca 20 ms, vi mätte med ossiloskop och fick en period på 22 ms då vi kör servona i 40 Hz. Det var därför det inte funkade med att sänka spänningen till servona då det enbart är pulsens längd som bestämmer positionen.


    Förutom det har vi jobbat lite med programmeringen för att svänga och för att få kameran att kunna ta lite bilder och video efter vi övergått till threading fick vi koda lite så den inte hoppade i "fel tillfälle". Vi lärde oss också hur man spelar upp ljud i programmeringen som vi har tänkt ha till en tuta och eventuellt ljud för att få folk att märka den (om man letar efter folk i skogen).

    Blev inte mer denna vecka då det var Valborg så vi valde att ta ledigt tordag och fredag.

     

  • Femte veckan

    Denna veckan har vi gjort roboten trådlös, installerat en kamera, stabiliserat benen samt börjat använda multithreading för att kunna köra flera funktioner samtidigt. 

    Gudrun är numera trådlös, vi har köpt batterier (6v, 4200mAh) som strömförsörjning till PWM HAT:en, de ska hålla i drygt 1 timme. Raspberry:n får ström från en power bank med usb anslutning. Vi installerade även en wifi adapter igår, denna behöver vi då vi tänkt att streama från kameran på Gudrun till datorn. Som nämts i tidigare inlägg stryrs roboten av en PS3 kontroller via Bluetooth.

    Vi började veckan med att stabilisera roboten.

    Första gången vi försökte få den att gå:

    Efter stabilisering

    Författarens egna video

    att fixa just nu - få servona att gå långsammare så att det blir en "snyggare" gång sedan händer det ibland att någon cylinder fastnar när den är påväg upp/ned och detta ska vi då försöka felsöka och justera.

    Sedan har Simon installerat och kört kameran som vi nu kan använda för att streama och även ta bilder som sparas ner med tid och datum i en mapp.

    Programmet saktades ned på grund av delayer m m så behövde vi en lösning till detta. Vi hittade då att man kunde använda sig av multithreading i Python som gör att programmet kan köra flera funktioner sammtidigt. Detta är inget vi använt tidigare men än så länge har det inte varit alltför svårt att lära sig och implementera i vår kod. När detta var klart började vi med att försöka få roboten att rotera på stället samt svänga vid gång, men ett ben lossnade så vi kunde inte fortsätta just då.

     

  • Fjärde veckan

    Denna veckan har vi bara jobbat i två dagar pga tentor, men vi har gjort några framsteg.

    Först så började vi med att löda och installera den nya PWM HAT:en och började programmera själva gången för roboten. Cylindarna går ut och in som vi vill och nu försöker vi få att dem att jobba ihop med servona. Vi har stött på lite problem när vi programerade detta i move funktionen. 

    def Move():
     
    if j.get_button(R2) and not j.get_button(L2):  #Om R2 på handkontroll är intryckt kör kod
     
    setServoPulse(Servo1, 330)    # Servo Forward 60 Hz
    setCylinderPulse(Cyl1, 4095)   # Cylinder down 100 Hz
    pygame.time.wait(3000)           # Delay
     
    setServoPulse(Servo1, 700)    # Servo Back 60 Hz
    setCylinderPulse(Cyl1, 0)         # Cylinder up 100 Hz
    pygame.time.wait(3000)           # Delay
     
    def setServoPulse(channel, pulse):                  # PWM signal for Servo
      pwm.setPWMFreq(60)                                    # 60 Hz
      pwm.setPWM(channel, 0, pulse)
      
    def setCylinderPulse(channelCyl, pulseCyl):     # PWM signal for Servo
      pwm.setPWMFreq(100)                                    # 100 Hz
      pwm.setPWM(channelCyl, 0, pulseCyl)

    Vi kör med olika frekvenser på servo (60 Hz) och cylinder (100 Hz). Detta gjorde att våra servon gick längre än det vi tänkt då det sattes en ny frekvens, cylindrarnas, direkt efter. Vilket gör att servonas frekvens skrivs över (som kan ses i koden ovan).

    Vi har installerat en kamera och experimenterade lite med den, och efter några försök så fick vi den till slut att kunna streama till en dator på samma nätverk. Detta kanske inte är en viktig funktion (speciellt eftersom det sällan finns trådlöst nätverk i skogen) men vi tänkte att det var någonting som var intressant att testa, och det medför också att vi kan styra roboten från ett annat rum.

     

     

    Författarens egna video

    Vi lyckades röra servona utan att bränna sönder kortet (för en gångs skull) och de går i hyfsat samma vinkel, fast mycket instabilt för att benen inte sitter fast tillräckligt bra. Kaoset vi pratat om innan uppkommer när cylindrarna körs samtidigt med servona, vilket då inte är fallet i denna video.

KarriärTjänsterOm ossBloggar