Hej!
Jag håller på och bygger en autonom miniatyr-bil för körning på "motorväg", dvs hålla sig inom vägbanan och köra lagom fort. Vi styr allting med en Raspberry Pi 3 som kör Raspbian. Vår mjukvara är programmerad i Python 2 och använder sig av ett antal OpenCV-funktioner för att hitta linjerna. Vårt problem är dock att själva bildtagningen tar över hälften av "cykeltiden" av att läsa av vägbanan (0,07s av totalt 0,12s vid optimala förhållanden).
Har ni kära SweC:are några tips på hur man kan snabba upp processen ytterligare, då kameran ska kunna klara 90 fps videoinspelning vid lägre upplösning? 0,07s motsvarar ca 14 fps (för enbart bildtagningen). Notera att vi helst vill kunna hantera olika ljusförhållanden, men att vi absolut kan tänka oss att anpassa oss för inomhusmiljöer för att kunna förbättra prestandan. Den låga upplösningen räcker för våra senare algoritmer, och gör att de snabbas upp en del.
Nedan följer de kamerainställningarna vi har. Många grejer är ju default-värden, men det känns bäst att ha stenkoll på vad som faktiskt gäller. Framrate:n på 40 verkar ju inte gälla (0,025s), och om vi går över detta beskärs bilden ("inzoomad"), vilket gör att vi bara får ett titthål att läsa av vägbanan genom.
Kamerainställningar:
camera = picamera.PiCamera() # The camera’s default resolution is the display’s resolution.
camera.resolution = (205, 154) # 1/32th of max resolution in x and y
camera.framerate = 40
camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 0
camera.exposure_compensation = 0
camera.exposure_mode = 'auto'
camera.meter_mode = 'average'
camera.awb_mode = 'auto'
camera.image_effect = 'none'
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)
Kodstycke för att ta bilder:
import picamera
from picamera.array import PiRGBArray
rawCapture = PiRGBArray(camera)
camera.capture(rawCapture, format = 'bgr', use_video_port = True)
img = rawCapture.array
Tyvärr kryper cykeltiden också iväg ibland (tidvis uppemot 0.3s, även om en liknande mängd linjeinnehåll hittas) - förmodligen på grund av andra processer? Tips där mottages också gärna! Målet är att komma till minst 10 stabila fps, men som det är nu kan vi inte garantera mer än runt 3 fps. Vårt styrsystem sker i en annan tråd genom att spara den beräknade positionen av bilen relativt vägbanan i en global list