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! 😀