Lidar Robootika Kodulaboris

Autor: Raivo Sell

Käesolev õpiobjekt tutvustab lidari kasutamist Robootika Kodulaboriga.

LIDAR (LIght Detection And Ranging) on optiline kaugseire süsteem, mis kaardistab ümbrust. Lidareid kasutatakse autonoomsete autode ja robotite peal, kuid ka erinevates koobaste ja keskkonna kaardistamise süsteemides ning tööstusrobootikas. Lidar võimaldab saada küllaltki täpse kujutise ruumist ja takistustest.

ESF

Õpiobjekti nimi: Lidar Robootika Kodulaboris


Õpiväljundid:

Pärast mooduli läbimist õpilane:

  • Kirjeldab lidari tööprintsiipi
  • Kirjeldab lidari SICK LMS seeria andmevahetusprotokolli
  • Kirjeldab mikrokontrolleri UART käskusid lidariga suhtlemisel
  • Ühendab SICK LMS seeria lidari mikrokontrolleriga õigesti
  • Ühendab vajalikud Robootika Kodulabori moodulid õigesti

Kasutusjuhend:

  • Teoreetilise taustamaterjaliga tutvumine
  • Graafilise materjaliga tutvumine
  • Enesekontrolli küsimustele vastamine

Õpetatav osa: Lugeda teoreetilist ülevaadet enne riistvara reaalset ühendamist ja pingestamist. Vaadata juhendeid korrektse riistvara käsitlemise tagamiseks. Õpitu kinnistamiseks tuleb praktilised näited reaalselt läbi teha.

Seoste loomine: Läbi õppejuhendite ja sõnalise selgituse järgimise.

Kinnistav osa: Iseseisev praktika reaalse riistvarakomplekti baasil.

TEOREETILINE OSA

Lidar koosneb laserist, mis saadab kiire objektini ja vastuvõtjast. Vastuvõtja on võimeline mõõtma valguse tagasipeegeldunud komponenti objektilt, mis on samasihiline saadetud laserkiirega. Selle järgi arvutatakse kaugus. Mõõtmisi tehakse paljudes punktides. Laserkiire juhtimine toimub mehhaaniliselt liigutatava peegli abil. Tasapinnalist skaneerimist võimaldavad lidarid on odavamad. Nende puhul katab kiir tasapinna, näiteks 180 kraadi ulatuses. Võimalik on skaneerida veel ruumiliselt, kus laserkiire katvus on osa sfäärist. Kiire liigutamine toimub sellisel juhul kahe telje ümber. Skanneeritud ala mõõtmisandmete järgi saab luua kas tasapinnalise kaardi või kolmemõõtmelise mudeli keskkonnast.

Tööpõhimõte

Valguse tagasipeegeldunud komponendi mõõtmiseks on kaks erinevat viisi. Esimesel juhul saadetakse välja infrapuna laseri impulss ja oodatakse, kuni see tagasi peegeldub. Tagasipeegeldumise aja järgi saab arvutada antud suunas oleva objekti kauguse. Kuna mõõtmine toimub pikosekundites, siis selliste seadmete hind on väga kõrge.

Faasinihke mõõtmine

Teine odavam võimalus on kasutada moduleeritud infrapuna laserkiirt ja mõõta saadetava ja objektilt tagasipeegelduva valguse faasinihet. Faasinihke suurus on sõltuv objekti kaugusest. Moduleeritud signaali lainepikkus on leitav valemist:

c = f ∙ τ

kus c on valguse kiirus, f modulatsioonisagedus ja τ tuntud moduleerimiseks kasutatud lainepikkus.

Summaarne kaugus D', mille kiiratud valgus läbib on:

D' = B + 2A = B + (θ * τ) / 2π

kus A on mõõdetav kaugus ja B on faasinihkesensori vahemaa kiirejagajast. Soovitud kaugus D kiirtejagaja ja takistuse vahel on avaldatav järgmiselt:

D = τ * θ / 4π

kus θ on elektrooniliselt mõõdetav faasi erinevus kiiratud ja tagasipeegeldunud valguskiire vahel.

Lidariga mõõdetud kaart

Robootikas ja tööstuses on SICK laserkaugusmõõdikud laialdaselt kasutustusel. SICK LMS 200 on lihtsalt ühendatav RS-232 või RS-422 liidese abil, võimaldades skaneerida 180 kraadist ala 80 meetri kauguselt. Lidari tööpõhimõte seisneb saadetud valgusimpulsi tagasipeegeldumiseks kulunud aja mõõtmises. Paremal oleval pildil on ühe skaneerimise tulemused kujutatud kaardina.

Ühendusskeem

SICK lidari töökorda seadmiseks tuleb ühendada toite ja andmeside kaablid. Lidari tagaosas ülemise nurga lähedal on kaks pistikut, mis sarnanevad arvuti jadaliidese pordi omaga. Emane pistik on mõeldud toite ja isane andmeside jaoks. Toite ja jadaliidese kaabel tuleb ühendada vastavalt pildile. Lidari saab ühendada Kodulabori Kommunikatsioonimooduliga RS-232 pistiku abil. Toide 24 V DC tuleb võtta eraldi toiteallikast, mida ei ole lisatud Kodulabori komplekti.

SICK võtab vastu käsklusi bittide striimina jadaliidese vahendusel. Andmete edastamisel saadab andur tagasi bittide jada sõltuvalt mõõtetulemusest antud nurgas.

Andmete saamiseks andurilt tuleb kõigepealt saata stardistring, et öelda lidarile, et see alustaks saatmist. See string on järgmine:

Kuueteistkümmnendkujul: 02 00 02 00 20 24 34 08

Kümnendkujul: 2 0 2 0 32 36 52 8

Kui stardistring on edukalt saadetud, alustab lidar andmete striimimist üle jadaliidese. Andmed skaneerimise tulemusest saadetakse järjestikku iga kraadi kohta. Näiteks kui lidar on seadistatud skaneerima 180° kraadi ulatuses eraldusvõimega 0.5°, siis esimene lugem on nurga 0° kohta, teine lugem nurga 0.5° kohta ja nii edasi. See tähendab, et kokkuvõttes saadetakse 361 lugemit. Iga kauguse lugem saadetakse kahe baidina. Kõige vähem tähtis bait saadetakse esimesena. Sellele järgneb kõige tähtsam bait. Töötades „metric“ režiimil on mõõdetav kaugus antud millimeetrites.

Andmete saatmise lõpetamiseks tuleb saata stopp käsk. See käsk on järgnev:

Kuueteistkümnendkujul: 02 00 02 00 20 25 35 08

Kümnendkujul: 2 0 2 0 32 37 53 8

NÄITEKOOD

 

Järgmine näide tutvustab, kuidas seadistada lidar ja lugeda saabunud pakettide arvu, kasutades Robootika Kodulaborit.

#include <stdio.h>
#include <homelab/delay.h>
#include <homelab/pin.h>
#include <homelab/module/lcd_gfx.h>
#include <homelab/usart.h>
 
// USART liidese seadistamine
usart port = USART(0);
 
// Nuppude viikude määramine
pin button1 = PIN(C, 0);
pin button2 = PIN(C, 1);
 
// Riistvara seadistamine
static inline void init()
{
	// Nupu viikude sisendiks määramine
	pin_setup_input_with_pullup(button1);
	pin_setup_input_with_pullup(button2);
 
	// LCD ekraani seadistamine
	lcd_gfx_init();
 	// LCD ekraani puhastamine
	lcd_gfx_clear();
 	// LCD ekraani taustavalgustuse tööle lülitamine
	lcd_gfx_backlight(true);	
// Programmi nime kuvamine lcd_gfx_goto_char_xy(3, 1); lcd_gfx_write_string("Lidar");   // USART liidese seadistamine usart_init_async ( port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600) );
}   // Põhiprogramm int main(void) {
unsigned char new_value1, new_value2, old_value1 = 0, old_value2 = 0;   char c; int i = 0; int count = 0; char text[16];   // Seadista riistvara init();
 
// Lõputu tsükkel while (1) {
// Nupu oleku lugemine new_value1 = pin_get_debounced_value(button1); new_value2 = pin_get_debounced_value(button2);   // Nupp S1 on alla vajutatud if((!new_value1) && (old_value1)) {
//Saada lidarile "02 00 02 00 20 24 34 08", et alustada skanneerimist usart_send_char(port, 0x02); usart_send_char(port, 0x00); usart_send_char(port, 0x02); usart_send_char(port, 0x00); usart_send_char(port, 0x20); usart_send_char(port, 0x24); usart_send_char(port, 0x34); usart_send_char(port, 0x08); }   // Nupp S2 on alla vajutatud if((!new_value2) && (old_value2)) { //Saada lidarile "0x 02 00 02 00 20 25 35 08", et lõpetada //skanneerimine usart_send_char(port, 0x02); usart_send_char(port, 0x00); usart_send_char(port, 0x02); usart_send_char(port, 0x00); usart_send_char(port, 0x20); usart_send_char(port, 0x25); usart_send_char(port, 0x35); usart_send_char(port, 0x08);
}   // Mäleta nupu viimast olekut old_value1 = new_value1; old_value2 = new_value2;   // Jadaliidesest märgi lugemine if (usart_try_read_char(port, &c)) { // Paketi päise "0x 02 81 D6 02 B0 69 41" otsimine if(c == 0x02) i++; if(c == 0x81) i++;
if(c == 0xD6) i++;
if(c == 0x02) i++;
if(c == 0xB0) i++;
if(c == 0x69) i++;
if(c == 0x41) i++;   // Päise olemasolu kontroll if(i >= 7) { //Paketi loenduri suurendamine count++;   //LCD ekraanil pakettide arvu kuvamine lcd_gfx_goto_char_xy(0, 3);   sprintf(text, "Pakette: %i", count);   lcd_gfx_write_string(text);   i=0; } }
} }

 

lidari ühendused

ENESEKONTROLL

Vastates alljärgnevatele küsimustele, saad proovida oma teadmisi antud teema kohta

Milline on lidari peamine tööorgan?
Vali õige vastus

Ultraheliandur
Värviandur
Laser
LED

Milleste meetoditega leitakse objekti kaugus?
Vali õiged vastused

laseri impulsi ja selle tagasipeegeldumise aja kaudu
moduleeritud laserkiire ja tagasipeegelduva valguse faasinihke kaudu
moduleeritud laserkiire ja selle tagasipeegeldumise aja kaudu

Millist andmevahetusstandardit kasutab SICK LMS 200 seeria lidar?
Vali õiged vastused

RS-232
USB
RS-422
I2C
SPI

Millist andmevahetusprotokolli kasutatakse Robootika Kodulabori mikrokontrolleris lidariga suhtlemisel?
Vali õige vastus

SPI
UART

Milleks kasutatakse lidarit?
Vali õiged vastused

Ohutustsooni kontrollimiseks tööstuses
Valguse kiiruse mõõtmiseks
Objektide kauguse mõõtmiseks
Laseriga materjali lõikamiseks

LISAMATERJAL

  1. Robootika Kodulabor - Lidar
  2. SICK LMS 200 seeria andmeleht

Teoreetilise osa algtekstide autor: Raivo Sell ja Heiko Pikner