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ą:
•
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');
>> 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
sygnału y dla obu serii pomiarowych korzystając
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