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


Leave a Reply