Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:vision [2011/11/25 01:00] – Oluliselt täiendatud heikopikneret:examples:vision [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== Masinnägemine ====== ====== Masinnägemine ======
 <note important>Koostamisel</note> <note important>Koostamisel</note>
Line 24: Line 25:
 ===CMUCam2 GUI=== ===CMUCam2 GUI===
  
-Tegemist on Windowsi arvutile mõeldud graafilise kasutajaliidesega, mis võimaldab kaamerast pilti vaadata ja erinevaid muid funktrsioone testida. Kasutajaliidese kohta on õpetus toodud lingil 3 ja tarkvara lingil 4. Olgu kohe öeldud, et 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.+Tegemist on arvutile mõeldud graafilise kasutajaliidesega, mis võimaldab kaamerast pilti vaadata ja erinevaid muid funktrsioone testida. Kasutajaliidese kohta on õpetus toodud lingil 3 ja tarkvara lingil 4. Olgu kohe öeldud, et 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.
  
 Programmi kasutamiseks tuleb kaamera ühendada võimaluse korral otse arvuti COM pordiga või kasutada selleks USB-Serial üleminekut. Programmi käivitamisel küsitakse COM pordi numbrit, kuhu kaamera on ühendatud. Peale seda avaneb programmi töökeskkond. Programmi kasutamiseks tuleb kaamera ühendada võimaluse korral otse arvuti COM pordiga või kasutada selleks USB-Serial üleminekut. Programmi käivitamisel küsitakse COM pordi numbrit, kuhu kaamera on ühendatud. Peale seda avaneb programmi töökeskkond.
Line 32: Line 33:
 Kaamera vaheleht on veel selle poolest väga tähtis, et pildil soovitud värvil klikates saab teada selle koodi. Samal ajal tõstetakse teised sama värvi pikslid kah esile.  Kaamera vaheleht on veel selle poolest väga tähtis, et pildil soovitud värvil klikates saab teada selle koodi. Samal ajal tõstetakse teised sama värvi pikslid kah esile. 
  
-{{:et:examples:vision:gui2.png|Kaamera vaada}}+{{:et:examples:vision:gui2.png?300|Kaamera vaada}}
  
 Pilt 1. Kaamera GUI aken Pilt 1. Kaamera GUI aken
Line 39: Line 40:
  
  
- +{{:et:examples:vision:gui1.png?300|Leitud on pall}}
-{{:et:examples:vision:gui1.png|Leitud on pall}}+
  
 Pilt 2. Color Tracking Pilt 2. Color Tracking
  
-Kodulaboriga värviotsimist tehes on antud programmiga hea värvivahemik määrata, mida otsida ja see reaalselt ära testida. Kodulabori väikesel ekraanil on aimult numbrilist infot näha ja selle järgi midagi kindlaks määrata on võimatu.+Kodulaboriga värviotsimist tehes on antud programmiga hea värvivahemik määrata, mida otsida ja see reaalselt ära testida. Kodulabori väikesel ekraanil on ainult numbriline info ja selle järgi midagi kindlaks määrata on võimatu.
  
 ===== CMUCam3 kaamera kasutamine kodulaboriga ===== ===== CMUCam3 kaamera kasutamine kodulaboriga =====
  
-Antud näited on mõeldud kasutama CMUCam3-kaamerat emuleeritud versioonis. See ei nõua kaamera enda programmerimist ja saab keskenduda lihtsamata rakenduste arendamisele kodulabori moodulitega. Suhtlemine käib, kasutades CMUCam2 juhendis toodud käsustikku.+Antud näited on mõeldud kasutama CMUCam3-kaamerat emuleeritud reziimis. See ei nõua kaamera enda programmeerimist ja saab keskenduda lihtsamata rakenduste arendamisele Kodulabori moodulitega. Suhtlemine käib, kasutades CMUCam2 juhendis toodud käsustikku.
  
 ==== Kodulabori tarkvara ==== ==== Kodulabori tarkvara ====
  
-Kodulabori poolne kood on tehtud, kasutades nii palju kui võimalik kodulabori teeki. Siiski serial liidesest andmete lugemine on tehtud kiiruse huvides katkestustepõhine. Tarkvara on jagatud eraldi failideks, millest main.c failis paikneb üldine funktsionaalsus, nagu ekraani ja nuppude juhtimine.+Kodulabori poolne näitekood on tehtud, kasutades nii palju kui võimalik Kodulabori teeki. Siiski serial liidesest andmete lugemine on kiiruse huvides katkestustepõhine. Tarkvara on jagatud eraldi failideks, millest main.c failis paikneb üldine funktsionaalsus, nagu ekraani ja nuppude juhtimine.
  
-Failis CMUCAM.c paikneb kaameraspetsiifilised funktsioonid. Hetkel on sinna koondatud värvi otsimise ja andmete vastuvõtmiseks vajalik. Kuna erinebaid käskusid on küllaltki palju, siis on seda faili soovitav vastavalt projekti vajadustele täiendada.+Failis CMUCAM.c paiknevad kaameraspetsiifilised funktsioonid. Hetkel on sinna koondatud värvi otsimise ja andmete vastuvõtmiseks vajalik. Kuna erinevaid käskusi on küllaltki palju, siis on seda faili soovitav vastavalt projekti vajadustele täiendada.
  
-Fail USART.c on mõeldud puhtalt serial ühenduse teenindamiseks. Failis on funktsioon ühenduse seadistamiseks ja ka mõlemas suunas andmevahetuseks. Olgu veel öeldud, et kui andmed saabuvad, käivitatakse failis CMUCAM.c paiknev CMUPacketHandler, mis teeb kindlaks ja töötleb saabuva paketi. CMUPacketHandler on praegu mõeldud kindlate pakettide töötlemiseks ja seda võib vajadusel täiendada, lisades uute pakettide tuge jne.+Fail USART.c on mõeldud puhtalt serial ühenduse teenindamiseks. Failis on funktsioon ühenduse seadistamiseks ja ka mõlemas suunas andmevahetuseks. Olgu veel öeldud, et kui andmed saabuvad, käivitatakse failis CMUCAM.c paiknev CMUPacketHandler, mis teeb kindlaks ja töötleb saabuva märgi ja koostab neist paketi. CMUPacketHandler on näites mõeldud kindlate pakettide töötlemiseks ja seda võib vajadusel täiendada, lisades uute pakettide tuge jne.
  
  
Line 69: Line 69:
 ==Kirjeldus== ==Kirjeldus==
  
-Programm seadistab CMU kaamera kindla värvi otsimis rezhiimi. Kodulabori +Programm seadistab CMU kaamera kindla värvi otsimise reziimi. Kodulabori 
 ekraanil kuvatakse ümber seda värvi ala joonistatud ristküliku keskpunkti  ekraanil kuvatakse ümber seda värvi ala joonistatud ristküliku keskpunkti 
 koordinadid. koordinadid.
 +
 +{{:et:examples:vision:tracking1.jpg?300|Programm töös}}
 +
 +Pilt 3. Programm koordinaate kuvamas
  
 ==Kasutamine== ==Kasutamine==
Line 94: Line 98:
  
 Programm kuvab suvalisi CMU-CAM pakette kodulabori ekraanile. Lisaks saab Programm kuvab suvalisi CMU-CAM pakette kodulabori ekraanile. Lisaks saab
-nuppude abil resettida kaamerat, värvi otsida ja tarkvara versiooni küsida.+nuppude abil kaamerat algväärtustada, värvi otsida ja tarkvara versiooni küsida.
  
 ==Kasutamine== ==Kasutamine==
Line 104: Line 108:
   * {{: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>
  
  
et/examples/vision.1322182855.txt.gz · Last modified: 2020/07/20 09:00 (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