Veelgestelde vragen#
Wat zijn de verschillen tussen de CMUcam1 en de CMUcam2?#
Inleiding#
De CMUcam2 bevat alle functionaliteit van de CMUcam1 in een verbeterde vorm en nog veel meer. Hieronder beschrijven we kort de nieuwe functionaliteit en de verschillen. Je wilt misschien ook naar het antwoord kijken op de vraag hoe je beslist of je een CMUcam1 of CMUcam2 aanschaft.
Hardware-overzicht#
Er zijn twee belangrijke hardwareverschillen die van belang zijn: de CMUcam2 gebruikt een andere processor dan de CMUcam1 en de CMUcam2 bevat een framebufferchip, terwijl de CMUcam1 dat niet doet.
De CMUcam2 gebruikt de SX52-processor en de CMUcam1 gebruikt de SX28-processor, beide uit de SX-processorserie van Ubicom. In beide gevallen draait de processor op 75 MHz, dus er is geen verschil in processorsnelheid of rekenkracht. De voordelen van de SX52-processor zijn dat deze meer RAM heeft (262 versus 136 bytes), meer ROM (4096 versus 2048 woorden) en meer I/O-pinnen. Meer RAM en ROM betekende dat we complexere code konden schrijven, waardoor we meer functionaliteit in de CMUcam2 konden opnemen. Het grotere aantal I/O-pinnen betekende dat we meer pinnen overhadden voor andere functies – zoals meer servo’s, meer configuratiejumpers, enz.
Het grote verschil tussen de twee systemen is dat de CMUcam2 de AL422B-framebufferchip van AverLogic bevat, terwijl de CMUcam1 dat niet doet. Hierdoor kan de CMUcam2-hardware snel een enkel volledig frame vastleggen en dit opslaan in het framebuffergeheugen. Dit heeft een aantal voordelen:
Complexere verwerking. Bij de CMUcam1 moest de processor de pixeldatastroom on-the-fly verwerken zoals deze door de cameramodule werd uitgevoerd. Dit ontwerp hielp de complexiteit en kosten van de systeemhardware te verminderen. Het beperkte echter de complexiteit van de verwerking, omdat deze in realtime tussen pixels of tussen beeldrijen moest worden uitgevoerd. Omdat de processor op de CMUcam2 pixelgegevens in zijn eigen tempo uit de framebuffer haalt, kan hij complexere verwerking per pixel uitvoeren.
Snellere verwerking. De keerzijde van het niet gesynchroniseerd hoeven blijven met de pixelstroom van de cameramodule is dat de processor niet op de cameramodule hoeft te wachten wanneer hij pixelgegevens nodig heeft. Het elimineren van deze wachttijd betekent dat de CMUcam2-processor een frame daadwerkelijk sneller kan verwerken dan de CMUcam1, ook al is de processor niet krachtiger.
Meerdere bewerkingen per frame. Omdat het in de framebuffer opgeslagen beeld niet verandert, kan de CMUcam2 meerdere bewerkingen op een enkel frame uitvoeren. Zo kan bijvoorbeeld beweging worden gedetecteerd, kunnen regiostatistieken worden berekend en kunnen meerdere kleuren worden gevolgd, allemaal op een enkel frame.
Betere frame dumps. Omdat de CMUcam1 de verzonden frame-dumpgegevens moest synchroniseren met de datastroom van de cameramodule, kon hij slechts één kolom gegevens per cameraframe verzenden. Dit betekende dat verschillende delen van het beeld op verschillende momenten werden vastgelegd, waardoor snel bewegende objecten uitgesmeerd werden over de frame dumps van de CMUcam1. Aangezien de CMUcam2 het beeld verzendt vanuit de vaste gegevens in de framebuffer, is dit niet langer een probleem.
Betere verwerking van lagere baudrates. Het hebben van een framebuffer betekent ook dat de timing van de door de CMUcam2 verzonden gegevens volledig kan worden losgekoppeld van de timing van de gegevens die uit de cameramodule worden gelezen. Dit betekent dat de CMUcam2-gegevens van frame dumps en bitmap-lijnmodi niet veranderen wanneer de communicatiebaudrate verandert; de CMUcam2 zal dezelfde frame- of bitmapgegevens naar de hostprocessor communiceren, ongeacht de baudrate. Het aantal per seconde verwerkte frames kan echter nog steeds veranderen bij lagere baudrates, omdat het uiteindelijk nog steeds het verzenden van alle gegevens van één frame moet voltooien voordat de volgende kunnen worden verwerkt.
Betere werking van de cameramodule. Om ervoor te zorgen dat de processor in de CMUcam1 gesynchroniseerd kon blijven met de datastroom van de cameramodule, moest de framesnelheid van de cameramodule worden verlaagd tot 17 fps. De framebuffer die de CMUcam2 gebruikt, stelt ons in staat de cameramodule op de volledige framesnelheid te laten werken. Een voordeel hiervan is dat de automatische belichting en witbalansaanpassing van de camera sneller kunnen werken, omdat er slechts één aanpassing per frame kan worden gemaakt en er nu meer frames per seconde zijn. Het tweede voordeel is dat de analoge zwart-witvideo-uitgang (die alleen werkt wanneer de module op de volledige framesnelheid werkt) kan worden gebruikt terwijl de CMUcam2 beeldgegevens verwerkt, wat bij de CMUcam1 niet het geval was.
Functionaliteitsoverzicht#
De CMUcam2 implementeert alle functionaliteit van de CMUcam1 en voegt ook veel nieuwe functionaliteit toe. Het volgende is een samenvatting.
Kleurvolging. De CMUcam2 implementeert kleurvolging net zoals de CMUcam1 dat deed. Net als bij de CMUcam1 is er een optionele bitmap-lijnmodus geïmplementeerd die een bitmap van de gevolgde pixels verzendt. Er zijn ook enkele verbeteringen. Er is een nieuwe optionele lijnmodus die statistieken van gevolgde pixels voor elke rij levert, inclusief de gemiddelde, minimale en maximale posities van de gevolgde pixels. Dit is zeer nuttig voor lijnvolging. Er is ook een nieuwe optionele modus waarin de interpretatie van de volggrenzen kan worden omgekeerd. In deze modus worden pixels buiten de volggrenzen als “goed” beschouwd. Dit is nuttig voor het volgen van een object tegen een homogene achtergrond – denk aan bluescreen-special effects. Het is ook nuttig voor het detecteren van randen wanneer pixeldifferentiatie (hieronder beschreven) is ingeschakeld. De ruisfilteroptie is ook verbeterd om aanpassing van de hoeveelheid filtering voor ruisrijke situaties mogelijk te maken.
Beeldstatistieken. De CMUcam2 implementeert de berekening van de gemiddelde- en variatiestatistieken van beeldregio’s net zoals de CMUcam1 dat deed. Net als bij de CMUcam1 is er een optionele lijnmodus geïmplementeerd die het gemiddelde van elke lijn van het beeld verzendt. Er is ook een nieuwe verbeterde lijnmodus die optioneel variatie-informatie op regel-voor-regel-basis bevat.
Bewegingsdetectie. Volledig nieuw in de CMUcam2 zijn de commando’s voor bewegingsdetectie (frameverschil). Deze commando’s kunnen worden gebruikt om de CMUcam2 te instrueren een lage-resolutieversie van het huidige beeld vast te leggen en dit continu te vergelijken met nieuwe binnenkomende beelden. Pakketten van de CMUcam2 melden of een deel van het beeld meer dan een opgegeven hoeveelheid verandert, wat mogelijk op beweging duidt. Deze pakketten kunnen het zwaartepunt en de omvang van de veranderde beeldblokken beschrijven of een bitmap leveren van welke beeldblokken zijn veranderd. Deze modus kan ook worden gecombineerd met pixeldifferentiatie (hieronder beschreven) om bewegingsdetectie robuuster te maken tegen veranderingen in de belichting.
Histogramvorming. Volledig nieuw in de CMUcam2 zijn de histogramberekeningscommando’s. Deze commando’s kunnen worden gebruikt om een eendimensionaal histogram van een enkel kleurkanaal vast te leggen met een resolutie van maximaal 28 bins. Histogrammen leveren nuttige informatie die het uiterlijk van een beeld samenvat. Met aanvullende programmering op de hostprocessor kan deze informatie worden gebruikt om te helpen bij het detecteren van obstakels, specifieke objecten of locaties.
Beeldvensters. De CMUcam2 implementeert de mogelijkheid om de verwerking te beperken tot een klein gebied (subvenster) van het volledige beeld, net zoals de CMUcam1 dat deed. In de CMUcam2 is deze functie nog nuttiger, omdat deze kan worden gebruikt om subvensters van een enkel in de framebuffer opgeslagen beeld nauwkeurig te onderzoeken. Ook kan het verkleinen van de verticale venstergrootte worden gebruikt om het aantal per seconde verwerkte frames aanzienlijk te verhogen door het aantal pixels dat door de CMUcam2 moet worden verwerkt sterk te verminderen.
Aanpassing van uitvoerpakketten. De CMUcam2 implementeert veel flexibelere pakketaanpassing dan de CMUcam1. Er zijn commando’s waarmee de gebruiker elk door elk commando gegenereerd pakket kan aanpassen om alleen de waarden te retourneren die nodig zijn voor een bepaalde toepassing. Dit kan in veel situaties de hoeveelheid gegevens die naar de hostprocessor wordt verzonden en door deze wordt verwerkt aanzienlijk verminderen.
Pixeldifferentiatie. Volledig nieuw in de CMUcam2 is een optionele pixeldifferentiatiemodus. In de pixeldifferentiatiemodus worden pixels voorbewerkt voordat ze aan de rest van de CMUcam2-code worden doorgegeven. Deze voorbewerkingsstap stuurt nieuwe pixelwaarden naar de rest van de code, die het verschil zijn tussen de huidige pixelwaarde en de vorige. Wat dit in feite doet, is alles wegfilteren behalve de verticale randen in het beeld. Dit is een zeer krachtige bewerking en kan, met aanvullende programmering op de hostprocessor, worden gebruikt om te helpen bij obstakeldetectie en lijnvolging.
Downsampling. Volledig nieuw in de CMUcam2 is een optionele downsampling-modus. In de downsampling-modus verlaagt de CMUcam2-software de resolutie van het camerabeeld voordat het wordt verwerkt. Het voordeel hiervan is dat er veel minder pixels te verwerken en te verzenden zijn. Omdat het in software gebeurt, resulteert downsampling slechts in een zeer kleine toename van de verwerkingssnelheid. Het grote voordeel zit in het verminderen van de hoeveelheid verzonden gegevens. In het geval van een gedumpt beeldframe kan downsampling de gegevensgrootte gemakkelijk verkleinen en daarmee de verzendtijd met een factor 2 of 4 of meer verminderen. Op vergelijkbare wijze kan bij het gebruik van bitmap-lijnmodi de grootte van de bitmapafbeelding sterk worden verkleind, waardoor de hoeveelheid gegevens die een hostprocessor moet ontvangen en verwerken afneemt.
Servobesturing. De oorspronkelijke CMUcam1 ondersteunde slechts één servo en die servo werkte alleen goed bij specifieke baudrates en wanneer de CMUcam1 in streamingmodus stond. De CMUcam2 ondersteunt tot vijf servo’s. De servobesturingscode in de CMUcam2 is geïmplementeerd als een achtergrondproces, zodat de servo-uitgangen altijd stabiel blijven en deze kan worden gebruikt zoals elke andere servobesturing zou worden gebruikt. Daarnaast kan de CMUcam2 worden geconfigureerd om pan- en tilt-servo’s automatisch te besturen. In deze modus zal de CMUcam2 de servoposities bijwerken telkens wanneer hij de opdracht krijgt om kleurvolggegevens te berekenen.
Energiebesparing. Volledig nieuw in de CMUcam2 zijn de energiebesparingsmodi. In sommige toepassingen hoeft de CMUcam2 niet continu beeldgegevens te verwerken. In deze gevallen kan de CMUcam2 de opdracht krijgen om in verschillende power-down- (of slaap-) modi te gaan. Er vinden geen volgcommando’s of servobesturing plaats wanneer de CMUcam2 in een van deze modi staat. Het verzenden van een eenvoudig serieel commando maakt de camera binnen enkele milliseconden weer wakker.
Wat is het verschil tussen het gebruik van de OV6620- en de OV7620-module met de CMUcam2?#
Inleiding#
Wat betreft mogelijkheden is de OV7620-sensor een sensor met hogere resolutie (664x492 ruwe sensorlocaties) dan de OV6620-sensor (356x292 ruwe sensorlocaties). Maar dit feit heeft heel weinig te maken met de kwesties die zich voordoen bij het overwegen welke van deze sensoren het best past bij jouw toepassing van de CMUcam2. Hierna volgt een lijst met overwegingen.
Resolutie#
Hoewel het waar is dat de OV7620-sensor een sensor met hogere resolutie is dan de OV6620, ondersteunt de CMUcam2 vanwege de vaste geheugengrootte van de framebuffer van de CMUcam2 slechts een enkele resolutie van 160x239 voor de OV7620-sensor. De CMUcam2 ondersteunt een lage-resolutiemodus van 88x143 en een hoge-resolutiemodus van 176x255 voor de OV6620-sensor. Dus door de OV6620 in de hoge-resolutiemodus te gebruiken, kan men daadwerkelijk een werking met hogere resolutie bereiken dan de enkele-resolutiemodus die beschikbaar is voor de OV7620-sensor.
Framesnelheid#
Een ander resolutiegerelateerd probleem is de maximale framesnelheid bij het continu verwerken van een stroom beelden. Hoe lager de resolutie, hoe minder pixels er moeten worden verwerkt en hoe hoger de haalbare framesnelheid. Hoewel een verhoging van de framesnelheid kan worden bereikt door de downsampling-snelheid en de virtuele venstergrootte te wijzigen, heeft het werkelijke aantal door de sensor uitgevoerde pixels een veel groter effect. Hierdoor kan de CMUcam2 een veel hogere framesnelheid bereiken wanneer de OV6620 in zijn lage-resolutiemodus wordt gebruikt dan de enkele-resolutiemodus die beschikbaar is voor de OV7620.
Analoge video-uitvoer#
Een ander verschil tussen de twee sensoren is het formaat van de analoge video-uitvoer van de twee sensoren. De OV6620-sensor levert uitvoer in analoog PAL-formaat en de OV7620-sensor levert uitvoer in analoog NTSC-formaat. In beide gevallen is de uitvoer zwart-wit.
Het is belangrijk op te merken dat bij de meeste toepassingen van de CMUcam2 de analoge uitvoer niet zal worden gebruikt. In een typische toepassing worden de resultaten van het verwerken van het beeld of de ruwe pixels digitaal via de seriële poort naar de hostcomputer of microcontroller verzonden, dus dit is geen probleem. Als live zwart-witvideo echter belangrijk is, wil je misschien rekening houden met het formaat van de analoge video-uitvoer.
Samenvatting#
Onze aanbeveling is dat de OV6620-module de beste keuze is voor bijna alle toepassingen, vooral gezien de lagere kosten en de snellere verwerkingstijd die met deze module haalbaar is. In de zeldzame toepassingen waarbij NTSC-monochrome analoge video-uitvoer vereist is, wil je misschien de OV7620 overwegen.
Zijn er bekende problemen met de huidige CMUcam2-firmwarereleases?#
Ja. In de 1.00-release werkte het “RM”-commando (Raw Mode) niet correct. De 1.01-release verhelpt dat probleem.
De firmware in de CMUcam2 is upgradebaar, maar er is een SX-Key- (of compatibele) programmer voor nodig. De “hex”-bestanden voor de ROM-images zijn beschikbaar op de Downloads-pagina.