Category Archives: Smart Systems 2014 – Robothund

Robothund – Siste Oppdatering (04.12.2014)

Hei!

Da er vi ferdig med presentasjonen av vårt prosjekt. Vi hadde enkelte problemer med routeren i starten av fremføringen, men utenom det, føler gruppen at presentasjonen ble vel gjennomført. Video, Power Point og demonstrasjon fungerte tilslutt bra sammen! 🙂

Under har vi vedlagt koden vi bruker til å kontrollere roboten. Litt videre nedover har vi også vedlagt både koden/skriptet vi bruker for å starte Gstreamer pipelinen og mottakeren fra Windows.

KODEN TIL KONTROLLERING:

import curses, time #curses library is used to get realtime keypress and time for sleep function
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode (GPIO.BOARD)

#Motor 1 Venstre drivhjul
#Motor 2 Høyre drivhjul
#Motor 3 Fremre heve/senke
#Motor 4 Bakre heve/senke

Motor1A = 5
Motor1B = 7

Motor2A = 8
Motor2B = 10

Motor3A = 11
Motor3B = 13

Motor4A = 16
Motor4B = 18

#Definere GPIO pinner som output

GPIO.setup(Motor1A, GPIO.OUT)
GPIO.setup(Motor1B, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)

GPIO.setup(Motor2A, GPIO.OUT)
GPIO.setup(Motor2B, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)

GPIO.setup(Motor3A, GPIO.OUT)
GPIO.setup(Motor3B, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)

GPIO.setup(Motor4A, GPIO.OUT)
GPIO.setup(Motor4B, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)

#Sette PWM på enable pinner og frekvens

Motor1E = GPIO.PWM(3, 100)
Motor2E = GPIO.PWM(12, 100)
Motor3E = GPIO.PWM(15, 50)
Motor4E = GPIO.PWM(22, 50)

#Definere duty cycle

fart1 = 20 #Frem/bak
fart2 = 30 #Svinge
fart3 = 40 #Heve/senke

Motor1E.start(fart1)
Motor2E.start(fart1)
Motor3E.start(fart3)
Motor4E.start(fart3)

stdscr = curses.initscr() #initialize the curses object
curses.cbreak() #to get special key characters
stdscr.keypad(1) #for getting values such as KEY_UP

key = ”
while key != ord(‘q’): #press ‘q’ to quit from program
key = stdscr.getch() #get a character from terminal

stdscr.refresh()

#change the motor speed based on key value

if key == curses.KEY_UP : #Kjoere Frem
Motor1E.ChangeDutyCycle(fart1)
GPIO.output(Motor1A, GPIO.LOW)
GPIO.output(Motor1B, GPIO.HIGH)

Motor2E.ChangeDutyCycle(fart1)
GPIO.output(Motor2A, GPIO.LOW)
GPIO.output(Motor2B, GPIO.HIGH)

elif key == curses.KEY_DOWN : #Kjoere bakover
Motor1E.ChangeDutyCycle(fart1)
GPIO.output(Motor1A, GPIO.HIGH)
GPIO.output(Motor1B, GPIO.LOW)

Motor2E.ChangeDutyCycle(fart1)
GPIO.output(Motor2A, GPIO.HIGH)
GPIO.output(Motor2B, GPIO.LOW)

elif key == curses.KEY_LEFT : #Svinge venstre
Motor1E.ChangeDutyCycle(fart2)
GPIO.output(Motor1A, GPIO.HIGH)
GPIO.output(Motor1B, GPIO.LOW)

Motor2E.ChangeDutyCycle(fart2)
GPIO.output(Motor2A, GPIO.LOW)
GPIO.output(Motor2B, GPIO.HIGH)

elif key == curses.KEY_RIGHT : #Svinge hoeyre
Motor1E.ChangeDutyCycle(fart2)
GPIO.output(Motor1A, GPIO.LOW)
GPIO.output(Motor1B, GPIO.HIGH)

Motor2E.ChangeDutyCycle(fart2)
GPIO.output(Motor2A, GPIO.HIGH)
GPIO.output(Motor2B, GPIO.LOW)

elif key == ord(‘e’): #Forhjul opp
Motor3E.ChangeDutyCycle(fart3)
GPIO.output(Motor3A, GPIO.LOW)
GPIO.output(Motor3B, GPIO.HIGH)

elif key == ord(‘d’): #Forhjul ned
Motor3E.ChangeDutyCycle(fart3)
GPIO.output(Motor3A, GPIO.HIGH)
GPIO.output(Motor3B, GPIO.LOW)

elif key == ord(‘r’): #Bakhjul opp
Motor4E.ChangeDutyCycle(fart3)
GPIO.output(Motor4A, GPIO.HIGH)
GPIO.output(Motor4B, GPIO.LOW)

elif key == ord(‘f’): #Bakhjul ned
Motor4E.ChangeDutyCycle(fart3)
GPIO.output(Motor4A, GPIO.LOW)
GPIO.output(Motor4B, GPIO.HIGH)

sleep(0.040) #pause for 40 ms

GPIO.output(Motor1A, GPIO.LOW)
GPIO.output(Motor1B, GPIO.LOW)

GPIO.output(Motor2A, GPIO.LOW)
GPIO.output(Motor2B, GPIO.LOW)

GPIO.output(Motor3A, GPIO.LOW)
GPIO.output(Motor3B, GPIO.LOW)

GPIO.output(Motor4A, GPIO.LOW)
GPIO.output(Motor4B, GPIO.LOW)

 

Koden til Gstreamer skriptet på Raspberry Pi’en (Pipeline sender):

#!/bin/bash
clear
raspivid -n -t 0 -w 500 -h 500 -fps 30 -b 600000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.1.2 port=5000

Koden til Gstreamer skripet på Windows (Pipeline mottaker):

@echo off
cd C:\gstreamer\1.0\x86_64\bin
gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false

Takk til alle som har fulgt med på bloggen! 🙂
Takk for oss! 😀

Robothund – Tiende Oppdatering (03.12.2014)

Hallo! 

Dette blir da vår siste oppdatering, ettersom at det er fremføring i morgen. i dag har vi fokuser på å få bilen til å se litt penere ut, og å kjøre diverse tester. I tillegg lå mye av fokuset på presentasjonen.

Vi begynte med å stripse og feste enkelte av ledningen som hang fritt. Videre så testet vi at alt fungerte sammen; kamera, kjøring og heising. Alt gikk relativt bra, bortsett fra at hakkinga i tannhjula, ved heising, førte til at bilen slet litt med trappene. Dette kom hovedsakelig av all vekta den har blitt påført for å kunne være trådløs. Ellers så fungerte roboten ganske bra. På bildet under ser du sluttresultatet av Lego roboten, med alt montert på robotkroppen.

Sluttresultat

Da vi følte oss fornøyde med testing, fokuserte vi på presentasjonen, for å gjøre oss klar til i morgen!

Takk til alle som har fulgt med på bloggen! 😀

Robothund – Niende Oppdatering (02.12.2014)

Hei!

I dag (02.12.2014) begynte vi med å ta for oss koblingen av roboten, slik at vi kunne komme tilbake til der vi var fire dager tidligere. Selve oppkoblingen gikk ganske greit, i og med at vi hadde gjort mye av jobben dagen før. Det som tok litt tid, var å koble opp riktig motor til riktig GPIO pinne på Raspberry Pi’en.

Så fort oppkoblingen var klar, så var vi klare til testing. Alt var koblet opp, men da vi tilslutt skulle gi strøm til Raspberry Pi’en, så ville den ikke starte med strømmen fra batteriet. Vi koblet så Pi’en med USB kabelen til PC’en, og da klarte vi ikke å komme inn på Raspberry Pi’en igjen. Det viste seg da at SD-kortet hadde krasjet. Vi måtte da formatere og installere all software på nytt, og prøve igjen. Etter litt fikling og re-installering, greide vi endelig å kjøre en suksessfull test, hvor alt fungerte.
Vi rakk tilogmed å jobbe litt med presentasjonen!

Vi snakkes! 🙂

Robothund – Åttende Oppdatering (01.12.2014)

Hei!

Denne oppdateringen går igjennom det som har blitt gjort mandag  1. desember.

Dagen begynte med at vi satte oss inn i hvordan vi skulle ta i bruk skolens motorskjold. De kalles Keyes L298 motorskjold. Disse har da ikke de samme inngangene som vi har på BrickPi’en, slik at vi blir nødt til å klippe og avisolere ledningene til motorene. På bildet ser vi et motorskjold koblet opp til Raspberry Pi’en og et batteri, for å teste motoren som ligger ved siden av.

Test av skjold

For å kunne ta i bruk et slikt motorskjold, må man i tillegg kunne bruke GPIO pinnene på Raspberry Pi’en. Vi måtte derfor også finne ut hvordan vi fikk tilgang til å bruke disse pinnene. Med det, så måtte vi også sette oss inn i puls-bredde modulasjon av Lego motorene våre. Dette var for å prøve å unngå at motorene skulle gi ut like mye ampere under stalling. I tillegg førte det til at vi enklere kunne styre hvor fort vi ønsket at motorene skulle gå.

Videre blir det å koble opp alt slik vi hadde det tidligere, og teste at motorskjoldene klarer å kjørte alt samtidig.

Vi snakkes! 🙂

Robothund – Syvende Oppdatering (28.11.2014)

Hei igjen! 

Vi mottok skjoldet den 27., slik at den 28. satte vi oss ned for å få alt opp og gå.

Vi startet dagen med å fokusere på Gstreamer, for å få til kamera strømmen. Mens Raspberry Pi’en sto og installerte, bygde vi om på roboten, for å forsterke den. Dette var da for å gjøre heisingen/senkingen enklere og med mindre hakking. Støttehjulene ble også festet og styrket, slik at trappeutfordringene skulle løses. På bildet under ser man hvordan vi har bygget opp roboten. Ledninger til heising/senking festet vi enkelt med noen strips på toppen, for enkelhetens skyld. 🙂

Robot Oppbygning

Da vi var fornøyde med oppbyggingen, gikk vi over til å koble roboten til Raspberry Pi’en, og da med det nye BrickPi skjoldet. Vi koblet alt opp slik at vi kunne få til både kjøring og heising/senking, trådløst. Uken før hadde endelig spenningsregulatoren vår ankommet, slik at ved litt lodding, kunne vi koble vårt 11,1 volt batteri til Raspberry Pi’en som bare tåler 3,3 volt. På bildet under ser vi gruppa jobber med både lodding og installering av kamera!

Lodding og kamera testing
Lodding og kamera testing

Etterhvert som både oppbygning og oppkobling var gjennomført, gikk vi over for å fikse kamera strømming og Gstreamer problemene. Med litt feilsøking og googling, greide vi endelig å finne ut av kamera problemene. Vi klarte da å starte en “pipeline” via Gstreamer, som sender videofeeden til en mottaker på Windows. Bildet under viser at “pipelinen” og kameraet strømmer direkte fra kameraet.

Raspberry Pi Camera in action!
Raspberry Pi Camera in action!

 

Tilslutt koblet vi alt slik at det fungerte trådløst via Wi-Fi, og feste både Brick Pi og batteriet på roboten. Deretter testet vi alt kjørende samtidig, og alt fungerte relativt greit uten store problemer! 🙂 Det var litt hakking ved heising og senking, men den trådløse kjøringen og kameraet fungerte akkurat som det skulle. En person styrte alt fra en ende av dronesonen, mens roboten var i andre enden.
Men etter en liten stund, mens vi kjørte litt rundt, så sa det “puff” og det kom røyk. BrickPi skjoldet ble ødelagt igjen. På bildet under ser man tydelig, på den nederste brikken, hvor det har gått galt på BrickPi’en.

Ødelagt BrickPi
Ødelagt BrickPi

Vi bestemte oss derfor for å prøve med skolens motorskjold på mandag, og se om det var mulig å få ting tilbake til der de var. Med utslitte hoder dro vi skuffende hjem uten robot eller BrickPi skjold.

Vi snakkes! 🙂

Robothund – Sjette Oppdatering (20.11.2014)

Hallo!

Denne perioden har det dessverre oppstått problemer med prosjektet.

Forrige uke ble BrickPi skjoldet vårt ødelagt. Da vi skulle koble til strøm på skjoldet, hørte vi en ulyd og det begynte å lukte brent. Etter å ha latt skjoldet ligge en stund, testet vi igjen, og da fungerte bare motorport A, mens port C og D fungerte litt. B porten fungerte derimot ikke i det hele tatt. I og med at skolen ikke har flere slike BrickPi skjold, så blir vi enten nødt til å bestille ett nytt motorskjold eller å koble til motorskjoldene som er tilgjengelig på skolen.

Kamera strømminga sliter vi noe med. Gstreamer vil ikke installere seg på Raspberry Pi’en, slik at koden vi skriver fungerer ikke. Vi er nødt til å finne en løsning på dette, slik at strømming fungerer uten problemer.

Vi snakkes! 😀

 

Robothund – Femte Oppdatering (07.11.2014)

Hei!

Prosjektet har gått fremover, men sykdom og operasjoner har før til at enkelte dager har vært mindre effektive.

Vi har jobbet en del med kameraet, for å klare å strømme videofeed fra VNC til Windows. Foreløpig har vi brukt programmene Netcat og Mplayer for å kunne strømme. Det programmene skal gjøre, er at på Raspberry Pi’en, skal de lage en “pipeline” med en videofeed, som blir mottatt i en mottaker i Windows. Vi fikk dette til å fungere, men med veldig mye forsinkelse. Det var nesten opp imot 10 sekunders forsinkelse. Derfor skal vi se om vi istedet kan ta i bruk et annet program som kalles Gstreamer. Dette skal være mer optimalisert for Raspberry Pi.

De bestilte Lego tannstengene har blitt satt på, slik at roboten kan nå heises høyt nok, slik at vi kan få roboten over trappekanten! Vi må finne ut hvordan vi skal sette opp støttehjulene, slik at full trappetesting kan utprøves.

I tillegg har vi diskutert og testet ut ulike oppbygninger av Lego roboten.
Vi har diskutert hva slags metode vi skal bruke på svingingen. Enten om vi skal svinge i fronten av roboten, eller om vi skal svinge ved å kjøre de to hjulene på hver side av bilen med ulik fart.
Heising/senking har også vært med i diskusjonen. Skal vi heise robotkroppen med tannhjul og tannstenger på en side av heisepålen, eller om det fungerer bedre å ha det på begge sidene.
Gruppa har også kommet frem til at roboten må bygges ganske stabilt for at den skal kunne heises. Disse punktene må alle testes og planlegges før vi går videre.

Fremover kommer altså gruppa til å jobbe videre med kamera strømming og videreutvikling av roboten. Deretter kan vi gå videre og koble alt opp mot Brick Pi’en, og se hva som må jobbes med.

Vi snakkes! 🙂

Robothund – Fjerde Oppdatering (23.10.2014)

Hallo!

Denne perioden har vi fokusert på å fikse “små tingene” som må på plass for at roboten skal fungere.

Wi-Fi har vært første prioritet, hvor vi har prøvd og testet lenge for å få dette til å fungere bra. Dessverre har vi ikke kommet noe sted med eduroam, men istedet har vi skaffet en egen router. Dette gjør at vi kan koble oss opp til Raspberry Pi’en ved bruk av VNC viewer. Da slipper vi endelig å måtte koble til skjerm, tastatur og mus. Da trenger vi egentlig bare spenningsregulatoren for å få den fullstendig trådløs.

Videre har vi bestilt Lego tannstagene vi mangler for optimal heising. Forhåpentligvis ankommer de innen en uke.

I tillegg har vi testet kamera, for å se om det er noe som kan være passende til vår robot. Raspberry Pi Camera kobles direkte inn på Raspberry Pi’en, slik at man da kan skrive en relativt enkel kode for å få kameraet til å ta bilder/vise video. På bildet under ser vi Kristian med kameraet rettet mot Anders, som da gir et bilde på skjermen! For at dette skal kunne sende over VNC viewer, blir vi nødt til å finne ut en måte å strømme videoen på. Dette er da noe vi må jobbe med fremover.

Raspberry Pi Camera Test
Raspberry Pi Camera Test

Vi snakkes! 🙂