http://www.youtube.com/watch?v=hwKpyZyOO6E
Edit (försök att göra det lite mer "projekt"-trådsaktigt):
Jag tänker alltså "bygga" en liten robot som skall kunna navigera runt på egen hand. (Bygga är satt inom "fnuttar" då jag inte
är så intresserad/kunnig i att bygga själva robotmekaniken utan mer av mjukvaran). Roboten är baserad på Rover5-chassit med
ett tillhörande motorstyrningskort vilket sen skall styrsa av en RaspberryPI.
Jag har helt sonika direkt kopplat GPIO-pinnarna 22,23,24 och 25 till kanal 1 och 2 på motorstyrningen. Än så länge har jag struntat i att motorkortet jobbar med 5V logik och pajen med 3.3V då jag inte tar in någon signal _till_ pajen. (När det är dags att koppla in rotationsenkodrarna så måste det till någon nivåkonvertering).
Här är det första naivt stapplande lilla robotstyrprogrammet (robot.py) för att se om det funkar:
Kod: Markera allt
#!/usr/bin/python
import RPi.GPIO as GPIO
from time import sleep
Forward = 1
Reverse = 2
Left = 3
Right = 4
# initiera och kör runt roboten i en liten fyrkant och stanna sedan
def main():
init()
engage(Forward)
sleep(3.0)
engage(Right)
sleep(1.0)
engage(Forward)
sleep(3.0)
engage(Right)
sleep(1.0)
engage(Forward)
sleep(3.0)
engage(Right)
sleep(1.0)
engage(Forward)
sleep(3.0)
engage(Right)
stop()
cleanup()
# starta motorerna med riktning beroende på (d)irection parametern
def engage(d):
if d==Forward:
GPIO.output(23, GPIO.HIGH)
GPIO.output(25, GPIO.HIGH)
elif d==Reverse:
GPIO.output(23, GPIO.LOW)
GPIO.output(25, GPIO.LOW)
elif d==Left:
GPIO.output(23, GPIO.HIGH)
GPIO.output(25, GPIO.LOW)
elif d==Right:
GPIO.output(23, GPIO.LOW)
GPIO.output(25, GPIO.HIGH)
GPIO.output(22, GPIO.HIGH)
GPIO.output(24, GPIO.HIGH)
def stop():
# stanna
GPIO.output(22, GPIO.LOW)
GPIO.output(24, GPIO.LOW)
def init():
# använd gpio portnummer istället för den fysiska pinpositionen
GPIO.setmode(GPIO.BCM)
# initiera gpio portar
GPIO.setup(22, GPIO.OUT, initial=GPIO.LOW) # power motor 1
GPIO.setup(23, GPIO.OUT, initial=GPIO.LOW) # riktning motor 1
GPIO.setup(24, GPIO.OUT, initial=GPIO.LOW) # power motor 2
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW) # riktning motor 2
def cleanup():
GPIO.cleanup()
if __name__ == "__main__":
main()
som är lämpligare att ta in interrupten från enkodrarna och som kan presentera ett gränssnitt med lite högre nivå till
pajen.
Navigeringen sen, det jag vill göra är att utforska RTK lite för att se hur bra man kan få till det med två relativt billiga gpsmottagare och antenner.
Projektet är absolut lågbudget så långt det är möjligt.
/johan