background image

Katedra Sterowania i Inżynierii Systemów

Laboratorium Podstaw Robotyki

Sprawozdanie z ćwiczenia

Temat

Budowanie lokalnej mapy otoczenia – skaner z

czujnikiem podczerwieni

Rok 
akademicki

2010/2011

Data wykonania 
ćwiczenia

2010-05-31

Data oddania 
sprawozdania

2010-05-31

Termin zajęć

Wtorek

9:45

Ocena

Skład grupy laboratoryjnej

1.

Rok/semestr/grupa

R
o
k

 

3

,

S

e

m

 

6

,

gr A2

1. Wprowadzenie

1.1. Cel ćwiczenia

Ćwiczenie  ma   na  celu   zbadanie  wybranych  właściwości   pomiarowych   optycznego

czujnika   odległości,   przeprowadzenie   jego   kalibracji   i   opracowanie   oprogramowanie  
w środowisku MATLAB umożliwiającego obsługę systemu pomiarowego za pośrednictwem
łącza RS-232. Końcowym rezultatem ćwiczenia jest pobieranie danych ze skanera optycznego
i wykreślenie na tej podstawie dwuwymiarowej lokalnej mapy otoczenia.

2. Przebieg ćwiczenia

2.1.  Do   portu   szeregowego   komputera   PC   podłączono   (wyłączone)   urządzenia

mikroprocesorowe   wraz   ze   sterownikiem   silnika   krokowego   i   optycznym   czujnikiem
odległości. Następnie włączono zasilanie urządzenia – do mikrosterownika doprowadzono
napięcie stałe o wartości z zakresu 8 – 12 [V], a do sterownika silnika krokowego napięcie
stałe o wartości z zakresu 12 – 24 [V]. (Przełącznik  Enable  sterownika silnika ustawiono  
w pozycji Off, a pokrętło wyboru ograniczenia prądu ustawiono w pozycji środkowej.)

2.2.  W   środowisku   MATLAB   zainicjalizowano   port   szeregowy,   do   którego

podłączono   urządzenie   mikroprocesorowe   i   ustawiono   wymagane   parametry   transmisji
zgodnie z instrukcja laboratoryjną:

background image

prędkość transmisji: 115 200 [b/s],

długość znaków: 8-bit,

liczba bitów stopu: 1,

kontrola parzystości: brak,

sterowanie przepływem danych: brak.

Polecenie:

>> s=serial('COM1');
>> set(s,'BaudRate',115200,'DataBits',8,'Parity','none',
      'StopBits',1,'FlowControl','none');
>> fopen(s);

Dodatkowo (w razie problemu z portem szeregowym) utworzono skrypt zamykający port
szeregowy.

Polecenie:

>> fclose(s);
>> delete(s);
>> clear s;

2.3. Zdefiniowano w postaci pięcioelementowego wektora ramki realizujące:

rozkaz obrócenia silnika krokowego o jeden krok w prawo,

rozkaz obrócenia silnika krokowego o jeden krok w lewo,

rozkaz wykonania pomiaru sygnału z czujnika odległości.

Zweryfikowano   poprawność   działania   dwóch   pierwszych   rozkazów,   wysyłając  
je   do   urządzenia   (funkcja  fwrite)   i   zaobserwowano   ruch   silnika.   (Przełącznik  Enable
ustawiono w pozycji On i przełącznik Stop ustawiono w pozycji Off.)

Zaimplementowano   odbiór   ramki   odpowiedzi   (funkcja  fread).   Następnie   wysłano   ramki
zapytań i odczytano odpowiedzi urządzenia. Zdekodowano ramkę odpowiedzi rozkazu  02h,
aby otrzymać wynik przetwarzania A/C w postaci znormalizowanej.

Polecenie: 

>> slew = [170 1 1 0 0];
>> spr = [170 1 2 0 0];
>> odcz = [170 2 0 0 0];
>> fwrite(s,slew,'uint8','sync');
>> fwrite(s,spr,'uint8','sync');
>> fwrite(s,odcz,'uint8','sync');
>> ileDanych = s.BytesAvailable;
>> [dane, ileDanych, komunikat] = fread(s, 15, 'uint8');

background image

>> komunikat;
>> dane
>> n =(dane(13,1) + dane(14,1)*16 + dane(15,1)*256)/(1024);

2.4. Napisano skrypt umożliwiający wykonanie 100 serii pomiarów 

(jeden po drugim), zwracający znormalizowane dane z przetwornika A/C czujnika Sharp  
w   postaci   100-elementowego   wektora.   Przed   czujnikiem   ustawiono   ekran   w   odległości  
0,15 [m], a następnie w odległości 0,6 [m] względem punktu bazowego i wykonano serie
pomiarów.   Obliczono   wariancję   σ

2

    sygnału   y   dla   obu   serii   pomiarowych   korzystając  

ze wzoru:

Polecenie:

>> slew = [170 1 1 0 0];
>> spr = [170 1 2 0 0];
>> odcz = [170 2 0 0 0];
>> for k=1:100
    fwrite(s,odcz,'uint8');
    pause(0.2);
    [dane] = fread(s,5,'uint8');
    dane
    n(k) =(dane(3) + dane(4)*16 + dane(5)*256)/(1024);
end

>> nsr = 0;
>> for i=1:100,
    nsr = n(i) + nsr;
end
 
>> nsr = nsr/100;
>> sigm = 0;
>> for i=1:100,
    sigm = (n(i)-nsr)^2 + sigm;
end
 
>> sigm = sigm/99 

Rezultat:

dla odległości 0,15 [m]

>> sigma = 0.00427285348526

dla odległości 0,6 [m]

>> sigma = 0.00248552755876

http://notatek.pl/budowanie-lokalnej-mapy-otoczeni
a-skaner-z-czujnikiem-podczerwieni-1?notatka