Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:examples:vision [2012/05/16 13:21] – created raivo.sellen:examples:vision [2026/02/19 11:30] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Masinnägemine ====== +<pagebreak> 
-<note important>Translation needed / On preparation</note>+====== Machine vision ======
  
 +===== CMUCam3 camera emulation as CMUCam2 =====
  
-===== CMUCam3 kaamera emuleerimine CMUCam2-ena ===== +=== Required software and references === 
- +  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam3_datasheet.pdf?format=raw| CMUCam3 datasheet]] 
-===Vajalik tarkvara ja kirjandus=== +  - [[http://cmucam.org/wiki/cmucam2-emulation| CMUCam3 emulation page]] 
-  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam3_datasheet.pdf?format=raw| CMUCam3 andmeleht]] +  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam2GUI_overview.pdf?format=raw| CMUCam2 GUI tutorial]]
-  - [[http://cmucam.org/wiki/cmucam2-emulation| Lehekülg CMUCam3 emuleerimisest]] +
-  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam2GUI_overview.pdf?format=raw| CMUCam2 GUI õpetus]]+
   - [[http://www.cs.cmu.edu/~cmucam2/CMUcam2GUI.zip| CMUCam2 GUI]]   - [[http://www.cs.cmu.edu/~cmucam2/CMUcam2GUI.zip| CMUCam2 GUI]]
-  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam2_manual.pdf?format=raw| CMUCam2 juhendkus on ka serial käsustik]] +  - [[http://cmucam.org/attachment/wiki/Documentation/CMUcam2_manual.pdf?format=raw| CMUCam2 manualincluding serial commands]] 
-  - [[http://cmucam.org/attachment/wiki/Downloads/cmucam2_lpc2106-cmucam3.hex?format=raw| CMUCam3 hex fail CMUCam2 emuleerimiseks]] +  - [[http://cmucam.org/attachment/wiki/Downloads/cmucam2_lpc2106-cmucam3.hex?format=raw| CMUCam3 hex file for CMUCam2 emulation]] 
-  - [[http://cmucam.org/attachment/wiki/Downloads/lpc2106_isp_aug_03.zip?format=raw| Flash utiliit, mis võimaldab hex faili laadida]]+  - [[http://cmucam.org/attachment/wiki/Downloads/lpc2106_isp_aug_03.zip?format=raw| Flash utility for loading the hex file]]
  
-===Sissejuhatus===+=== Introduction ===
  
-CMUCam3 kaamera tarkvara ei toeta lihtsat serial pordi kaudu andmevahetustKuna see võimekus oli olemas CMUCam2 kaameralsiis on tehtud ka CMUCam3 jaoks tarkvara, mis emuleerib kaamera eelmist versiooniKasutada saab eelmise versiooni CMUcam2GUI liidest ja serial pordi käsklusi.+CMUCam3 firmware does not support simple serial communicationBecause this capability existed in the CMUCam2 camerafirmware has been created for CMUCam3 that emulates the previous versionYou can use the older CMUcam2GUI interface and the serial command set of the CMUCam2.
  
-===Kaamera seadistamine===+=== Camera setup ===
  
-CMUCam3 kaamera eelmise versiooni emuleerimiseks tuleb alla tõmmata ja installeerida lingil 6 toodud flash utiliit ja lingil 5 toodud hex failPeale hex faili kaamerasse laadimist emuleeritaksegi seda kui CMUCam2-te ja edaspidi tuleb kasutada eelmise versiooni jaoks mõeldud GUI-i pildi vaatamiseksLisaks on CMUCam2 andmelehel olemas serial käsustik kaameraga suhtlemiseksPikem ingliskeelne kirjeldus flashimisest on toodud CMUCam3 kasutusjuhendis lingil 1.+To emulate the CMUCam2 with a CMUCam3 camera, download and install the flash utility (link 6) and the hex file (link 5)After flashing the hex file, the camera is emulated as CMUCam2 and you can use the GUI intended for the previous version to view imagesThe CMUCam2 datasheet also provides the serial command set for communicationA longer English description of flashing is in the CMUCam3 user manual (link 1).
  
-===CMUCam2 GUI===+=== CMUCam2 GUI ===
  
-Tegemist on arvutile mõeldud graafilise kasutajaliidesega, mis võimaldab kaamerast pilti vaadata ja erinevaid muid funktrsioone testidaKasutajaliidese kohta on õpetus toodud lingil ja tarkvara lingil 4. Olgu kohe öeldudet see on Java programm ja käivitamiseks tuleb installida endale meelepärane JRE (Java Runtime Environment), mis võimaldab jar tüüpi faili käivitada.+This is a graphical user interface for a computer that lets you view camera images and test other functionsThe GUI tutorial is in link and the software in link 4. Note that this is a Java programso you need a JRE (Java Runtime Environment) to run the jar file.
  
-Programmi kasutamiseks tuleb kaamera ühendada võimaluse korral otse arvuti COM pordiga või kasutada selleks USB-Serial üleminekutProgrammi käivitamisel küsitakse COM pordi numbrit, kuhu kaamera on ühendatudPeale seda avaneb programmi töökeskkond.+To use the program, connect the camera directly to the computer COM port if possible, or use a USB-Serial adapterAt startup the program asks for the COM port number where the camera is connectedAfter that the work area opens.
  
-Üleval ääres on menüükust saab erinevaid funktsioone valida, nagu näiteks servode liigutamineKaamera pildi vaatamiseks tuleb minna vahelehele "Camera View" ja seejärel vajutada "Grab Frame" nuppuNüüd laetakse kaamerast piltSeda saab ka salvestada.+At the top there is a menu where you can select different functionssuch as moving servosTo view the camera image, go to the "Camera View" tab and press "Grab Frame"The image is then loaded from the cameraYou can also save it.
  
-Kaamera vaheleht on veel selle poolest väga tähtis, et pildil soovitud värvil klikates saab teada selle koodiSamal ajal tõstetakse teised sama värvi pikslid kah esile+The Camera tab is important because clicking a color in the image shows its codeAt the same time, other pixels of the same color are highlighted
  
-{{:et:examples:vision:gui2.png?300|Kaamera vaada}}+{{:et:examples:vision:gui2.png?300|Camera view}}
  
-Pilt 1. Kaamera GUI aken+Figure 1. Camera GUI window
  
-Pildil kaks on toodud "Color" vahekaartkus saab eespool valitud värvi otsimist testidaSinna genereeritakse automaatselt värvi minimaalsed ja maksimaalsed väärtusedmida saab soovi korral muutaVärvi trackimiseks tuleb vajutada "Track Color" nuppuÜmber sama värvi alade joonistatakse ristkülikKaamera saadab välja selle ristküliku külgede kaks koordinaati ja lisaks ka selle keskpunkti koordinaadid.+In Figure 2 the "Color" tab is shownwhere you can test the color search selected aboveIt automatically generates minimum and maximum values for the colorwhich you can adjustTo track the color, press the "Track Color" buttonA rectangle is drawn around areas of the same colorThe camera outputs the two corner coordinates and also the center point coordinates.
  
  
-{{:et:examples:vision:gui1.png?300|Leitud on pall}}+{{:et:examples:vision:gui1.png?300|Found the ball}}
  
-Pilt 2. Color Tracking+Figure 2. Color Tracking
  
-Kodulaboriga värviotsimist tehes on antud programmiga hea värvivahemik määratamida otsida ja see reaalselt ära testidaKodulabori väikesel ekraanil on ainult numbriline info ja selle järgi midagi kindlaks määrata on võimatu.+When searching for colors with HomeLabthis program is useful for determining the color range to track and testing it in practiceOn the HomeLab small display you only have numeric information, so you cannot determine it visually.
  
-===== CMUCam3 kaamera kasutamine kodulaboriga =====+===== Using the CMUCam3 camera with HomeLab =====
  
-Antud näited on mõeldud kasutama CMUCam3-kaamerat emuleeritud reziimisSee ei nõua kaamera enda programmeerimist ja saab keskenduda lihtsamata rakenduste arendamisele Kodulabori moodulitegaSuhtlemine käib, kasutades CMUCam2 juhendis toodud käsustikku.+These examples are intended for using the CMUCam3 camera in emulation modeThis does not require programming the camera itself and lets you focus on simpler applications with HomeLab modulesCommunication is done using the command set described in the CMUCam2 manual.
  
-==== Kodulabori tarkvara ====+==== HomeLab software ====
  
-Kodulabori poolne näitekood on tehtud, kasutades nii palju kui võimalik Kodulabori teekiSiiski serial liidesest andmete lugemine on kiiruse huvides katkestustepõhineTarkvara on jagatud eraldi failideksmillest main.c failis paikneb üldine funktsionaalsus, nagu ekraani ja nuppude juhtimine.+The HomeLab example code is built as much as possible using the HomeLab libraryHowever, serial reading is interrupt-based for speedThe software is split into multiple files. The general functionalitysuch as display and button control, is in main.c.
  
-Failis CMUCAM.c paiknevad kaameraspetsiifilised funktsioonidHetkel on sinna koondatud värvi otsimise ja andmete vastuvõtmiseks vajalikKuna erinevaid käskusi on küllaltki paljusiis on seda faili soovitav vastavalt projekti vajadustele täiendada.+In CMUCAM.c, the camera-specific functions are locatedCurrently it includes color search and data receptionBecause there are many commands, it is recommended to extend this file as needed, adding support for new packetsetc.
  
-Fail USART.c on mõeldud puhtalt serial ühenduse teenindamiseksFailis on funktsioon ühenduse seadistamiseks ja ka mõlemas suunas andmevahetuseksOlgu veel öeldudet kui andmed saabuvad, käivitatakse failis CMUCAM.c paiknev CMUPacketHandler, mis teeb kindlaks ja töötleb saabuva märgi ja koostab neist paketiCMUPacketHandler on näites mõeldud kindlate pakettide töötlemiseks ja seda võib vajadusel täiendada, lisades uute pakettide tuge jne.+USART.c is dedicated to handling the serial connectionIt includes functions to configure the connection and to exchange data in both directionsWhen data arrivesCMUPacketHandler in CMUCAM.c is executedIt parses the incoming bytes and builds packets. In this example it handles certain packets and can be extended with support for more.
  
  
-==== Värvi otsimine ==== +==== Color tracking ==== 
-==Vajalik riistvara==+== Required hardware ==
  
   - CMUCam3   - CMUCam3
-  - Kodulabori Kontrollermoodul ATmega2561 +  - HomeLab Controller module ATmega2561 
-  - Kodulabori Kommunikatsioonimoodul +  - HomeLab Communication module 
-  - Kodulabori Kasutajaliidese moodul+  - HomeLab User Interface module
  
-==Kirjeldus==+== Description ==
  
-Programm seadistab CMU kaamera kindla värvi otsimise reziimiKodulabori  +The program configures the CMU camera to track a specific colorThe center coordinates of the rectangle drawn around the color area are displayed on the HomeLab screen.
-ekraanil kuvatakse ümber seda värvi ala joonistatud ristküliku keskpunkti  +
-koordinadid.+
  
-{{:et:examples:vision:tracking1.jpg?300|Programm töös}}+{{:et:examples:vision:tracking1.jpg?300|Program running}}
  
-Pilt 3. Programm koordinaate kuvamas+Figure 3. Program showing coordinates
  
-==Kasutamine==+== Usage ==
  
-Ühenda moodulid kokkuLülita kaamera toitelüliti sisse+Connect the modulesTurn on the camera power switch
-Vajutades nupule S2 hakkab kaamera eelseadistatud värvi otsimaTulemus kuvatakse  +Pressing button S2 starts color tracking with the preset colorThe result is shown on the display in the format Mx and My, where Mx and My are the center coordinates of the rectangle drawn around the chosen color areaIf the color is not seen, zeros are shownThe program is set to search for orange.
-ekraanil formaadi Mx ja My. Kus Mx ja My on ümber valitud värvi ala joonistatud  +
-ristküliku keskpunkti koordinaadidKui värvi ei nähta kuvatakse nullidProgramm on  +
-seadistatud otsima oranzhi värvi+
  
   * {{:et:examples:vision:Color_Tracking_v1.1.rar| Color Tracking V1.1}}     * {{:et:examples:vision:Color_Tracking_v1.1.rar| Color Tracking V1.1}}  
  
-==== Lihtne terminal ==== +==== Simple terminal ==== 
-==Vajalik riistvara==+== Required hardware ==
  
   - CMUCam3   - CMUCam3
-  - Kodulabori Kontrollermoodul ATmega2561 +  - HomeLab Controller module ATmega2561 
-  - Kodulabori Kommunikatsioonimoodul +  - HomeLab Communication module 
-  - Kodulabori Kasutajaliidese moodul+  - HomeLab User Interface module
  
-==Kirjeldus==+== Description ==
  
-Programm kuvab suvalisi CMU-CAM pakette kodulabori ekraanileLisaks saab +The program displays random CMU-CAM packets on the HomeLab screenIt also lets you initialize the camerastart color tracking, and query firmware version using buttons.
-nuppude abil kaamerat algväärtustadavärvi otsida ja tarkvara versiooni küsida.+
  
-==Kasutamine==+== Usage ==
  
-Ühenda moodulid kokkuLülita kaamera toitelüliti sisse+Connect the modulesTurn on the camera power switch
-Vajutades nupule S1 kuvatakse kaamera tarkvara versioonNupp S2 paneb kaamera  +Press S1 to display the camera firmware version. S2 starts the preset color tracking. S3 resets the camera.
-eelseadistatud värvi otsimaNupp S3 aga resetib kaamera.+
  
   * {{:et:examples:vision:cmu_terminal_v1.0.rar| Terminal v1.0}}   * {{:et:examples:vision:cmu_terminal_v1.0.rar| Terminal v1.0}}
  
 +<code c>
 +//*****************************************************************************
 +// CMU CAM 3 juhtimisega seotud funktsioonid
 +// 2011
 +// Autor: Heiko Pikner   
 +//*****************************************************************************
 +
 +#include "CMUCAM.h"
 +
 +
 +//
 +// Globaalsed muutujad
 +//
 +volatile char str_x[5];
 +volatile char str_y[5];
 +volatile int8_t packet_received = 0;
 +int8_t packet_t_typ=0;
 +int8_t pitcounter =0;
 +
 +//
 +// Funktsiooni päised
 +//
 +void USART_Transmit(unsigned char);
 +
 +//*****************************************************************************
 +//
 +// Pakettide tõlgendamine ja andmete töötlemine
 +//
 +//*****************************************************************************
 +void CMUPacketHandler(unsigned char c)
 +{
 +
 +
 + // Paketi tähise järgi T paketi tuvastamine
 + if(c==0x54)
 + {
 + packet_t_typ=1;
 +
 + }
 +
 + // Paketist Mx ja My eraldamine. Kumbki võib olla 1-3 kohaline 
 + // number. Numbrid on eraldatud tühikutega. Mx talletatakse str_x massiivi
 + // ja My str_y massivi. Iga massiivi element on üks number.
 + if(packet_t_typ ==1)
 + {
 + pitcounter++;
 +
 +
 + if(pitcounter==3)
 + {
 +
 + str_x[0]=c;
 + }
 +
 + if(pitcounter==4)
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 +
 + str_x[1]=c;
 + }
 + }
 +
 +
 + if(pitcounter == 5)
 + {
 +
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 + str_x[2]=c;
 + }
 +
 + }
 +
 +
 + if(pitcounter==7)
 + {
 + str_y[0]=c;
 +
 + }
 + if((pitcounter==8)&& (c != 0x0D))
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 + str_y[1]=c;
 + }
 +
 + }
 + if((pitcounter==9)&& (c != 0x0D))
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 +
 + str_y[2]=c;
 + }
 +
 + }
 +
 +
 + if(c == 0x0D)
 + {
 + packet_t_typ=0;
 + pitcounter=0;
 + packet_received = 1;
 +
 + }
 +
 + }
 +
 +}
 +
 +//*****************************************************************************
 +//
 +//Funktsioon küsib kaamerast tarkvara numbri. Saada 'GV'
 +//
 +//*****************************************************************************
 +void GetVersion(void)
 +
 + USART_Transmit('g'); 
 + USART_Transmit('v');
 + USART_Transmit('\n');
 + USART_Transmit('\r');  
 +}
 +
 +//*****************************************************************************
 +//
 +//Funktsioon kaamera resettimiseks. Saada 'RS'
 +//
 +//*****************************************************************************
 +void ResetCam(void)
 +{
 + USART_Transmit('R'); 
 + USART_Transmit('S');
 + USART_Transmit('\n');
 + USART_Transmit('\r');
 +}
 +
 +//*****************************************************************************
 +//
 +// Alusta valitud värvi trakkimist. Saada mask 'OM 0 3' ja seejärel 
 +// 'TC 184 234 4 54 0 41'
 +//
 +//*****************************************************************************
 +void StartTracking(void)
 +{   
 + // Sea mask, et kaamera saadaks ainult Mx ja My koordinaadid
 + USART_Transmit('O'); 
 + USART_Transmit('M');
 + USART_Transmit(' ');
 + USART_Transmit('0');
 + USART_Transmit(' ');
 + USART_Transmit('3');
 +
 + USART_Transmit('\n');
 + USART_Transmit('\r'); 
 +
 +    
 +
 + //Värvi valimiseks on formaat minRed maxRed minGreen maxGreen minBlue maxBlue 
 + USART_Transmit('T');
 + USART_Transmit('C');
 +
 + USART_Transmit(' ');
 + USART_Transmit('1');
 + USART_Transmit('8');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('2');
 + USART_Transmit('3');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('5');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('0');
 +
 + USART_Transmit(' ');
 + USART_Transmit('4');
 + USART_Transmit('1');
 +
 +
 +
 + USART_Transmit('\n');
 + USART_Transmit('\r');  
 +
 +
 +</code>
 +
 +
 +<code c>
 +#include <avr/io.h>
 +#include <avr/interrupt.h>
 +#include <string.h>
 +#include <stdlib.h>
 +#include <homelab/delay.h>
 +#include <homelab/pin.h>
 +#include <homelab/module/lcd_gfx.h>
 +
 +#include "main.h"
 +
 +//
 +//Muutujad, mis on defineeritud mujal
 +//
 +
 +extern volatile int8_t packet_received;
 +
 +extern volatile char str_x[5];
 +extern volatile char str_y[5];
 +
 +
 +//
 +//Nuppude viikude valik
 +//
 +pin button1 = PIN(C, 0);
 +pin button2 = PIN(C, 1);
 +pin button3 = PIN(C, 2);
 +
 +
 +//
 +// Seadista süsteem
 +//
 +static inline void init()
 +{
 + // Seab nupud töökorda
 + pin_setup_input_with_pullup(button1);
 + pin_setup_input_with_pullup(button2);
 + pin_setup_input_with_pullup(button3);
 +
 + // LCD ekraani algseadistamine
 + lcd_gfx_init();
 + 
 + // Ekraani puhastamine
 + lcd_gfx_clear();
 + 
 + // Taustavalgustuse tööle lülitamine
 + lcd_gfx_backlight(true);
 + 
 + // Programmi nime kuvamine
 + lcd_gfx_goto_char_xy(3, 1);
 + lcd_gfx_write_string("CMU-CAM");
 +
 + // Kuva Mx
 + lcd_gfx_goto_char_xy(0, 4);
 + lcd_gfx_write_string("Mx");
 +
 + // Kuva My
 + lcd_gfx_goto_char_xy(0, 5);
 + lcd_gfx_write_string("My");
 +
 +
 + DDRE = (1<<PE1);
 +
 + // Seriali seadistamine
 + UsartInit();
 +
 + // Katkestuste lubamine
 + sei();
 +}
 +
 +//*****************************************************************************
 +//
 +//MAIN
 +//
 +//*****************************************************************************
 +int main(void)
 +{
 + unsigned char new_value1, old_value1 = 0, new_value2, 
 + old_value2 = 0, new_value3, old_value3 = 0;
 +
 +
 + // Seadista süsteem
 + init();
 +
 +
 + while (1)
 + {  
 +
 + // Loeb nuppude väärtused
 + new_value1 = pin_get_debounced_value(button1);
 + new_value2 = pin_get_debounced_value(button2);
 + new_value3 = pin_get_debounced_value(button3);
 + 
 + // Nupp S1 alla vajutatud
 + if((!new_value1) && (old_value1))
 + {
 +
 + // Tee midagi
 + }
 + 
 + // Nupp S2 alla vajutatud
 + if((!new_value2) && (old_value2))
 + {
 + // Alusta värvi otsimist
 + StartTracking();
 +
 + }
 + 
 + // Nupp S3 alla vajutatud
 + if((!new_value3) && (old_value3))
 + {
 + // Tee midagi
 +
 + }
 + 
 + // Jätab eelmised nupuväärtused meelde
 + old_value1 = new_value1;
 + old_value2 = new_value2;
 + old_value3 = new_value3;
 +
 +
 +
 +
 + // Kui pakett on saabunud, kuvab selle sisu ekraanile
 + if(packet_received == 1)
 + {
 + // Vii kursor algusesse
 + lcd_gfx_goto_char_xy(6, 4);
 +
 + // Kuva klobaalsest muutujast pakett ja kuva see
 + lcd_gfx_write_string((char*) &str_x);
 +
 + // Vii kursor algusesse
 + lcd_gfx_goto_char_xy(6, 5);
 +
 + // Kuva klobaalsest muutujast pakett ja kuva see
 + lcd_gfx_write_string((char*) &str_y);
 +
 +
 +
 + // Kustuta vana pakett, ehk täida see tühikutega
 + memset((char*) &str_x, 0x20, 4);
 + memset((char*) &str_y, 0x20, 4);
 +
 + // Nulli paketi saabumist märkiv lipp
 + packet_received = 0;
 + }
 +
 + }
 +}
 +</code>
  
  
en/examples/vision.1337163706.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0