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:10] 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 47: Line 48:
 ===== CMUCam3 kaamera kasutamine kodulaboriga ===== ===== CMUCam3 kaamera kasutamine kodulaboriga =====
  
-Antud näited on mõeldud kasutama CMUCam3-kaamerat emuleeritud reziimis. 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 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.+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 paiknevad 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 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. 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 68: 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 93: 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 103: 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.1322183455.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