<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>https://senzor.robotika.sk/sensorwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Balogh</id>
	<title>SensorWiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="https://senzor.robotika.sk/sensorwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Balogh"/>
	<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Balogh"/>
	<updated>2026-05-14T21:17:32Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18636</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18636"/>
		<updated>2026-05-06T19:16:10Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Aktualizácia polohy (dead reckoning) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (-180 až +180)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&lt;br /&gt;
&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (0–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&lt;br /&gt;
&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7,8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu (x, y) a orientáciu θ chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &#039;&#039;k-1&#039;&#039; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &#039;&#039;Δtick_L&#039;&#039; a &#039;&#039;Δtick_R&#039;&#039; impulzov. Dráha jednotlivých kolies je: &#039;&#039;d_L = Δtick_L · c_f,  d_R = Δtick_R · c_f&#039;&#039;,&lt;br /&gt;
kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &lt;br /&gt;
 d_c = (d_L + d_R)/2,      &lt;br /&gt;
  Δθ = (d_R - d_L)/L.&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (d_L = d_R), robot ide rovno (Δθ = 0). Ak sa pravé koleso pohne viac, robot zatáča doľava (Δθ &amp;gt; 0 v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &lt;br /&gt;
&lt;br /&gt;
 θ_mid = \theta(k-1) + Δθ/2&lt;br /&gt;
  x(k) = x(k-1) + d_c · cos(θ_mid) &lt;br /&gt;
  y(k) = y(k-1) + d_c · sin(θ_mid)&lt;br /&gt;
  θ(k) = θ(k-1) + Δθ&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: x(0) = 0, y(0) = 0, θ(0) = 0 (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18635</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18635"/>
		<updated>2026-05-06T19:12:41Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Kinematika diferenciálneho podvozku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (-180 až +180)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&lt;br /&gt;
&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (0–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&lt;br /&gt;
&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7,8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu (x, y) a orientáciu θ chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &#039;&#039;k-1&#039;&#039; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &#039;&#039;Δtick_L&#039;&#039; a &#039;&#039;Δtick_R&#039;&#039; impulzov. Dráha jednotlivých kolies je: &#039;&#039;d_L = Δtick_L · c_f,  d_R = Δtick_R · c_f&#039;&#039;,&lt;br /&gt;
kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &lt;br /&gt;
 d_c = (d_L + d_R)/2,      &lt;br /&gt;
  Δθ = (d_R - d_L)/L.&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (d_L = d_R), robot ide rovno (Δθ = 0). Ak sa pravé koleso pohne viac, robot zatáča doľava (Δθ &amp;gt; 0 v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18634</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18634"/>
		<updated>2026-05-06T19:05:45Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Kinematika diferenciálneho podvozku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (-180 až +180)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&lt;br /&gt;
&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (0–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&lt;br /&gt;
&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7,8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu (x, y) a orientáciu &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &#039;&#039;k-1&#039;&#039; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &amp;lt;math&amp;gt;\Delta tick_L&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;\Delta tick_R&amp;lt;/math&amp;gt; impulzov. Dráha jednotlivých kolies je: &amp;lt;math&amp;gt;d_L = \Deltatick_L · c_f,      d_R = \Deltatick_R · c_f,&lt;br /&gt;
\label{eq:dl_dr}&amp;lt;/math&amp;gt; kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{d_c = \frac{d_L + d_R}{2}},      \boxed{\Delta\theta = \frac{d_R - d_L}{L}}.&lt;br /&gt;
\label{eq:dc_dtheta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_L = d_R&amp;lt;/math&amp;gt;), robot ide rovno (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta = 0&amp;lt;/math&amp;gt;). Ak sa pravé koleso pohne viac, robot zatáča doľava (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta &amp;gt; 0&amp;lt;/math&amp;gt; v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18633</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18633"/>
		<updated>2026-05-06T19:03:13Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Formát záznamových súborov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (-180 až +180)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&lt;br /&gt;
&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (0–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&lt;br /&gt;
&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7,8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x, y)&amp;lt;/math&amp;gt; a orientáciu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k{-}1&amp;lt;/math&amp;gt; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; impulzov. Dráha jednotlivých kolies je: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;d_L = \Deltatick_L · c_f,      d_R = \Deltatick_R · c_f,&lt;br /&gt;
\label{eq:dl_dr}&amp;lt;/math&amp;gt; kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{d_c = \frac{d_L + d_R}{2}},      \boxed{\Delta\theta = \frac{d_R - d_L}{L}}.&lt;br /&gt;
\label{eq:dc_dtheta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_L = d_R&amp;lt;/math&amp;gt;), robot ide rovno (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta = 0&amp;lt;/math&amp;gt;). Ak sa pravé koleso pohne viac, robot zatáča doľava (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta &amp;gt; 0&amp;lt;/math&amp;gt; v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18632</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18632"/>
		<updated>2026-05-06T19:01:38Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Formát záznamových súborov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-180&amp;lt;/math&amp;gt; až &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+180&amp;lt;/math&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&lt;br /&gt;
&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt;–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&lt;br /&gt;
&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7.8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x, y)&amp;lt;/math&amp;gt; a orientáciu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k{-}1&amp;lt;/math&amp;gt; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; impulzov. Dráha jednotlivých kolies je: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;d_L = \Deltatick_L · c_f,      d_R = \Deltatick_R · c_f,&lt;br /&gt;
\label{eq:dl_dr}&amp;lt;/math&amp;gt; kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{d_c = \frac{d_L + d_R}{2}},      \boxed{\Delta\theta = \frac{d_R - d_L}{L}}.&lt;br /&gt;
\label{eq:dc_dtheta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_L = d_R&amp;lt;/math&amp;gt;), robot ide rovno (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta = 0&amp;lt;/math&amp;gt;). Ak sa pravé koleso pohne viac, robot zatáča doľava (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta &amp;gt; 0&amp;lt;/math&amp;gt; v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18631</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18631"/>
		<updated>2026-05-06T18:58:40Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Laserový diaľkomer RPlidar A1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| 98,5 × 70 × 60 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-180&amp;lt;/math&amp;gt; až &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+180&amp;lt;/math&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt;–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7.8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x, y)&amp;lt;/math&amp;gt; a orientáciu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k{-}1&amp;lt;/math&amp;gt; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; impulzov. Dráha jednotlivých kolies je: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;d_L = \Deltatick_L · c_f,      d_R = \Deltatick_R · c_f,&lt;br /&gt;
\label{eq:dl_dr}&amp;lt;/math&amp;gt; kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{d_c = \frac{d_L + d_R}{2}},      \boxed{\Delta\theta = \frac{d_R - d_L}{L}}.&lt;br /&gt;
\label{eq:dc_dtheta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_L = d_R&amp;lt;/math&amp;gt;), robot ide rovno (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta = 0&amp;lt;/math&amp;gt;). Ak sa pravé koleso pohne viac, robot zatáča doľava (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta &amp;gt; 0&amp;lt;/math&amp;gt; v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18630</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18630"/>
		<updated>2026-05-06T17:23:10Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Mapovanie bludiska mobilným robotom =&lt;br /&gt;
&#039;&#039;&#039;Cvičenie z mobilnej robotiky — Kobuki + RPlidar A1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Cieľ cvičenia =&lt;br /&gt;
&lt;br /&gt;
Cieľom cvičenia je ručne previesť mobilného robota cez bludisko, zaznamenať dáta z odometrie a laserového diaľkomera (lidaru), a následne z nameraných dát zrekonštruovať:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;trajektóriu robota&#039;&#039;&#039; v rovine &#039;&#039;x&#039;&#039;–&#039;&#039;y&#039;&#039; (dead reckoning z enkodérov a gyroskopu),&lt;br /&gt;
# &#039;&#039;&#039;plánik bludiska&#039;&#039;&#039; (mračno bodov z lidaru transformované do globálnych súradníc).&lt;br /&gt;
&lt;br /&gt;
Spracovanie dát vykonáte &#039;&#039;offline&#039;&#039; v prostredí Matlab alebo Python na základe dvoch logovacích súborov: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; (odometria) a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; (lidar).&lt;br /&gt;
&lt;br /&gt;
= Technický opis zariadení =&lt;br /&gt;
&lt;br /&gt;
== Mobilný robot Kobuki ==&lt;br /&gt;
&lt;br /&gt;
Kobuki je kompaktná mobilná platforma s diferenciálnym podvozkom — má dve nezávisle poháňané kolesá a jedno voľnobežné (kastorové) koleso. Pohyb robota sa meria inkrementálnymi optickými enkodérmi na oboch kolesách a jednoosovým gyroskopom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre robota Kobuki&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Rozmery&lt;br /&gt;
|| Priemer tela&lt;br /&gt;
|| 351.5 mm (kruh)&lt;br /&gt;
|-&lt;br /&gt;
|| Výška&lt;br /&gt;
|| 124.8 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Pohon a kinematika&lt;br /&gt;
|| Typ podvozku&lt;br /&gt;
|| diferenciálny (2 kolesá + kastor)&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies (wheelbase)&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 230 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Polomer kolesa&lt;br /&gt;
|| &#039;&#039;r&#039;&#039; = 35 mm&lt;br /&gt;
|-&lt;br /&gt;
|| Šírka kolesa&lt;br /&gt;
|| 21 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Dynamika&lt;br /&gt;
|| Max. translačná rýchlosť&lt;br /&gt;
|| 70 cm s&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Max. rotačná rýchlosť&lt;br /&gt;
|| 180°/s (gyroskop spoľahlivý do 110°/s)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Enkodéry&lt;br /&gt;
|| Rozlíšenie enkodéra&lt;br /&gt;
|| 52 tick/ot. enkodéra&lt;br /&gt;
|-&lt;br /&gt;
|| Prevodový pomer&lt;br /&gt;
|| 6545 : 132 = 49,5833&lt;br /&gt;
|-&lt;br /&gt;
|| Ticky na otáčku kolesa&lt;br /&gt;
|| 52 × 49,5833 = 2578,33 tick/ot.&lt;br /&gt;
|-&lt;br /&gt;
|| Registre enkodérov&lt;br /&gt;
|| 16-bit unsigned (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Prepočtové konštanty&lt;br /&gt;
|| Tick → metre&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Ekvivalent&lt;br /&gt;
|| ≈ 11,7 tick/mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;| Gyroskop&lt;br /&gt;
|| Typ&lt;br /&gt;
|| 1-osový, továrensky kalibrovaný&lt;br /&gt;
|-&lt;br /&gt;
|| Rozsah&lt;br /&gt;
|| do 110°/s&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot;| Senzory a bezpečnosť&lt;br /&gt;
|| Nárazníky (bumpers)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzory útesu (cliff)&lt;br /&gt;
|| ľavý, stredný, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Senzor poklesu kolesa&lt;br /&gt;
|| ľavý, pravý&lt;br /&gt;
|-&lt;br /&gt;
|| Dátová frekvencia&lt;br /&gt;
|| 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Pripojenie k PC&lt;br /&gt;
|| USB alebo RX/TX piny&lt;br /&gt;
|-&lt;br /&gt;
|| Ochrana motora&lt;br /&gt;
|| vypnutie pri &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;I &amp;gt; 3 A&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Napájanie&lt;br /&gt;
|| Batéria&lt;br /&gt;
|| Li-Ion 14.8 V, 2200 mAh&lt;br /&gt;
|-&lt;br /&gt;
|| Výdrž&lt;br /&gt;
|| 3/7 h (malá/veľká batéria)&lt;br /&gt;
|-&lt;br /&gt;
|| Nosnosť&lt;br /&gt;
|| 5 kg (tvrdá podlaha) / 4 kg (koberec)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Laserový diaľkomer RPlidar A1 ==&lt;br /&gt;
&lt;br /&gt;
RPlidar A1 je 2D laserový skener (lidar), ktorý rotáciou laserového lúča okolo zvislej osi sníma vzdialenosti k prekážkam v celom rozsahu 360°. Senzor je upevnený na robot v strede medzi kolesami (offset &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;= 0&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre lidaru RPlidar A1&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Kategória&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Hodnota&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozmery a hmotnosť&lt;br /&gt;
|| Rozmery&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;98,5 × 70 × 60 mm&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Hmotnosť&lt;br /&gt;
|| 170 g&lt;br /&gt;
|-&lt;br /&gt;
|| Napájanie&lt;br /&gt;
|| externé (z robota)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| Rozsah&lt;br /&gt;
|| Vzdialenosť&lt;br /&gt;
|| 0.15 – 12 m (biele objekty)&lt;br /&gt;
|-&lt;br /&gt;
|| Uhlový rozsah&lt;br /&gt;
|| 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
|| Rozlíšenie vzdialenosti&lt;br /&gt;
|| &amp;lt; 0,5 mm&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot;| Rýchlosť&lt;br /&gt;
|| Uhlové rozlíšenie&lt;br /&gt;
|| &amp;lt; 1°&lt;br /&gt;
|-&lt;br /&gt;
|| Doba jedného merania&lt;br /&gt;
|| 0.5 ms&lt;br /&gt;
|-&lt;br /&gt;
|| Vzorkovacia frekvencia&lt;br /&gt;
|| 2000 – 2010 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Rýchlosť otáčania (scan rate)&lt;br /&gt;
|| 1 – 10 Hz, typicky 5.5 Hz&lt;br /&gt;
|-&lt;br /&gt;
|| Kvalita merania&lt;br /&gt;
|| Rozsah hodnôt&lt;br /&gt;
|| 0 – 15 (vyššia = lepšia)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Postup merania =&lt;br /&gt;
&lt;br /&gt;
# Umiestnite robota na štartovaciu pozíciu pred vstupom do bludiska. Zapnite robota a spustite záznam dát.&lt;br /&gt;
# Pomocou joysticku preveďte robota cez celé bludisko. &#039;&#039;&#039;Prejdite aj všetky slepé uličky&#039;&#039;&#039; — cieľom je získať kompletný obraz o geometrii bludiska.&lt;br /&gt;
# Pohybujte sa plynulo, bez prudkých zmien smeru. Pri otáčaní neprekračujte rotačnú rýchlosť 110°/s (limit gyroskopu).&lt;br /&gt;
# Po prechode bludiskom zastavte robota a ukončite záznam.&lt;br /&gt;
# Z robota stiahnite dva logovacie súbory: &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Formát záznamových súborov =&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt; — odometria ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie, hodnoty sú oddelené medzerami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;enc_left&amp;amp;gt; &amp;amp;lt;enc_right&amp;amp;gt; &amp;amp;lt;gyro_deg&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;robot.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Enc. Left&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov ľavého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Enc. Right&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint16&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kumulatívny počet tickov pravého enkodéra (0–65 535)&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Gyro&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol z gyroskopu v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-180&amp;lt;/math&amp;gt; až &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+180&amp;lt;/math&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  3067284773  1288  58777  174.98&lt;br /&gt;
  3067301111  1288  58777  174.98&lt;br /&gt;
  3067323915  1288  58777  174.98&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frekvencia záznamu zodpovedá dátovej frekvencii robota, t. j. približne 50 Hz.&lt;br /&gt;
&lt;br /&gt;
== Súbor &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt; — lidar ==&lt;br /&gt;
&lt;br /&gt;
Každý riadok obsahuje jedno meranie laserového lúča:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;timestamp_us&amp;amp;gt; &amp;amp;lt;distance_mm&amp;amp;gt; &amp;amp;lt;angle_deg&amp;amp;gt; &amp;amp;lt;quality&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Štruktúra súboru &amp;lt;code&amp;gt;laser.log&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!| &#039;&#039;&#039;Stĺpec&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Typ&#039;&#039;&#039;&lt;br /&gt;
!| &#039;&#039;&#039;Popis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 1 — Timestamp&lt;br /&gt;
|| &amp;lt;code&amp;gt;uint64&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Čas merania v mikrosekundách&lt;br /&gt;
|-&lt;br /&gt;
|| 2 — Distance&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Vzdialenosť k prekážke v milimetroch&lt;br /&gt;
|-&lt;br /&gt;
|| 3 — Angle&lt;br /&gt;
|| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Uhol laserového lúča v stupňoch (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt;–360), &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota&lt;br /&gt;
|-&lt;br /&gt;
|| 4 — Quality&lt;br /&gt;
|| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|| Kvalita merania (0–15); 0 = neplatné&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Príklad záznamov:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  3067236764  3713.75  351.047   15&lt;br /&gt;
  3067237463  3666.75  352.438   15&lt;br /&gt;
  3067237467  3708.75  353.812   15&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jedna kompletná otáčka lidaru (sken) obsahuje typicky okolo 260 bodov. Pri scan rate cca 7.8 Hz to zodpovedá vzorkovacej frekvencii cca 2000 Hz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Teoretický základ — ideálny prípad =&lt;br /&gt;
&lt;br /&gt;
V tejto kapitole odvodíme všetky vzťahy za predpokladu, že dáta sú bezchybné: enkodéry nepretekajú, gyroskop nedriftuje a časy sú presne synchronizované. Praktické komplikácie riešime v kapitole [[#sec:prakticke|6]].&lt;br /&gt;
&lt;br /&gt;
== Kinematika diferenciálneho podvozku ==&lt;br /&gt;
&lt;br /&gt;
Robot má dve kolesá vzdialené &#039;&#039;L&#039;&#039; = 0,23 m. Stredom medzi nimi je referenčný bod &#039;&#039;P&#039;&#039;, ktorého polohu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x, y)&amp;lt;/math&amp;gt; a orientáciu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; chceme sledovať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:kinematika&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V každom časovom kroku (medzi vzorkou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k{-}1&amp;lt;/math&amp;gt; a &#039;&#039;k&#039;&#039;) enkodéry napočítajú &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; impulzov. Dráha jednotlivých kolies je: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;d_L = \Deltatick_L · c_f,      d_R = \Deltatick_R · c_f,&lt;br /&gt;
\label{eq:dl_dr}&amp;lt;/math&amp;gt; kde &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; je prepočtový faktor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obr. 1:&#039;&#039;&#039; &#039;&#039;Kinematický model diferenciálneho podvozku. d&amp;lt;sub&amp;gt;L&amp;lt;/sub&amp;gt;, d&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; sú dráhy kolies, d&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt; je stredná dráha bodu P.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stredná dráha (pohyb bodu &#039;&#039;P&#039;&#039;) a zmena orientácie sú: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{d_c = \frac{d_L + d_R}{2}},      \boxed{\Delta\theta = \frac{d_R - d_L}{L}}.&lt;br /&gt;
\label{eq:dc_dtheta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intuitívne: ak sa obe kolesá pohnú rovnako (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_L = d_R&amp;lt;/math&amp;gt;), robot ide rovno (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta = 0&amp;lt;/math&amp;gt;). Ak sa pravé koleso pohne viac, robot zatáča doľava (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta &amp;gt; 0&amp;lt;/math&amp;gt; v štandardnej konvencii).&lt;br /&gt;
&lt;br /&gt;
== Aktualizácia polohy (dead reckoning) ==&lt;br /&gt;
&lt;br /&gt;
Polohu robota aktualizujeme iteratívne. Používame &#039;&#039;aproximáciu stredným uhlom&#039;&#039; (second-order midpoint method), ktorá je výrazne presnejšia než jednoduchá Eulerova metóda: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\theta_{mid} &amp;amp;= \theta(k{-}1) + \frac{\Delta\theta}{2} \\[4pt]&lt;br /&gt;
x(k) &amp;amp;= x(k{-}1) + d_c · \cos(\theta_{mid}) \\[2pt]&lt;br /&gt;
y(k) &amp;amp;= y(k{-}1) + d_c · \sin(\theta_{mid}) \\[2pt]&lt;br /&gt;
\theta(k) &amp;amp;= \theta(k{-}1) + \Delta\theta&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:update}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Počiatočné podmienky: &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(0) = 0&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(0) = 0&amp;lt;/math&amp;gt; (robot smeruje v osi &#039;&#039;x&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Tri zdroje orientácie ==&lt;br /&gt;
&lt;br /&gt;
Pre výpočet zmeny uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; máme tri možnosti:&lt;br /&gt;
&lt;br /&gt;
=== A) Len enkodéry ===&lt;br /&gt;
&lt;br /&gt;
Uhol sa počíta podľa rovnice [[#eq:dc_dtheta|[eq:dc_dtheta]]]. Jednoduché, ale citlivé na šmýkanie kolies.&lt;br /&gt;
&lt;br /&gt;
=== B) Len gyroskop ===&lt;br /&gt;
&lt;br /&gt;
Gyroskop Kobuki dáva priamo absolútny uhol (firmvér integruje uhlovú rýchlosť interne). Zmenu uhla medzi dvoma vzorkami vypočítame ako: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Delta\theta_{gyro} = [gyro(k) - gyro(k{-}1)] · \frac{\pi}{180}&lt;br /&gt;
\label{eq:gyro_delta}&amp;lt;/math&amp;gt; s korekciou pretečenia cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; (pozri sekciu [[#sec:pretecenie_gyro|6.2]]). Táto metóda je odolná voči šmyku kolies, ale dlhodobo trpí driftom gyroskopu.&lt;br /&gt;
&lt;br /&gt;
=== C) Komplementárny filter ===&lt;br /&gt;
&lt;br /&gt;
Fúzia oboch zdrojov jedným parametrom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha \in (0, 1)&amp;lt;/math&amp;gt;: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{\Delta\theta = \alpha · \Delta\theta_{gyro} + (1 - \alpha) · \Delta\theta_{enc}}&lt;br /&gt;
\label{eq:compfilter}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; vyjadruje “dôveru” v gyroskop. Typicky &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha = 0,95&amp;lt;/math&amp;gt; — gyroskop je na krátkych škálach presnejší, enkodéry kompenzujú jeho dlhodobý drift. Na ladenie použite uzavretú trasu — správne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; minimalizuje odchýlku koncovej polohy od štartu.&lt;br /&gt;
&lt;br /&gt;
== Transformácia lidarových bodov do mapy ==&lt;br /&gt;
&lt;br /&gt;
Lidar meria vzdialenosť &#039;&#039;d&#039;&#039; v smere uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; (v stupňoch, rastúci &#039;&#039;v smere hodinových ručičiek&#039;&#039; od prednej časti robota). Cieľom je transformovať tento bod zo súradníc robota do globálnych (mapových) súradníc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;fig:lidar&amp;quot; class=&amp;quot;figure&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Priama transformácia z polárnych súradníc lidaru do mapy: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\boxed{&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\alpha_{world} &amp;amp;= \theta - \alpha · \frac{\pi}{180} \\[4pt]&lt;br /&gt;
x_{global} &amp;amp;= x_R + \frac{d}{1000} · \cos(\alpha_{world}) \\[2pt]&lt;br /&gt;
y_{global} &amp;amp;= y_R + \frac{d}{1000} · \sin(\alpha_{world})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
}&lt;br /&gt;
\label{eq:lidar_transform}&amp;lt;/math&amp;gt; kde &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta&amp;lt;/math&amp;gt; je orientácia robota v radiánoch, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; je uhol lidaru v stupňoch (CW), &#039;&#039;d&#039;&#039; je vzdialenosť v mm a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R)&amp;lt;/math&amp;gt; je poloha robota v metroch. Znamienko mínus pred &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha&amp;lt;/math&amp;gt; konvertuje smysel otáčania z CW na matematicky kladný (CCW).&lt;br /&gt;
&lt;br /&gt;
= Riešenie praktických problémov =&lt;br /&gt;
&lt;br /&gt;
== Pretečenie enkodérov ==&lt;br /&gt;
&lt;br /&gt;
Enkodéry Kobuki sú 16-bitové bezznamienkové čítače s rozsahom &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;. Keď čítač dosiahne &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt; a koleso sa ďalej otáča, hodnota preskočí na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; (a opačne pri pohybe vzad). V surovom rozdiele &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick = enc(k) - enc(k{-}1)&amp;lt;/math&amp;gt; sa to prejaví obrovským skokom.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltatick_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltatick - 65536 &amp;amp; \text{ak } \Deltatick &amp;gt; 32768 \\&lt;br /&gt;
\Deltatick + 65536 &amp;amp; \text{ak } \Deltatick &amp;lt; -32768 \\&lt;br /&gt;
\Deltatick &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_enc}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: yellow!20&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: warnorange&amp;quot;&amp;gt;{{Upozornenie|typ=pozor|text=&amp;lt;/span&amp;gt; Bez tejto korekcie dostanete v trajektórii obrovské skoky rádovo desiatky metrov. Toto je najčastejší zdroj chýb!}}&lt;br /&gt;
&lt;br /&gt;
Ukážka v Matlabu / Pythone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dTick = enc(k) - enc(k-1);&lt;br /&gt;
if dTick &amp;amp;gt; 32768&lt;br /&gt;
    dTick = dTick - 65536;&lt;br /&gt;
end&lt;br /&gt;
if dTick &amp;amp;lt; -32768&lt;br /&gt;
    dTick = dTick + 65536;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dTick = enc[k] - enc[k-1]&lt;br /&gt;
if dTick &amp;gt; 32768:&lt;br /&gt;
    dTick -= 65536&lt;br /&gt;
if dTick &amp;lt; -32768:&lt;br /&gt;
    dTick += 65536&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Pretečenie gyroskopu ==&lt;br /&gt;
&lt;br /&gt;
Gyroskop vracia uhol v rozsahu &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(-180^{\circ}, +180^{\circ}]&amp;lt;/math&amp;gt;. Pri prechode cez &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt; hodnota skočí, napr. z &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+179^{\circ}&amp;lt;/math&amp;gt; na &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;-179^{\circ}&amp;lt;/math&amp;gt;. To nie je skutočná zmena o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;358^{\circ}&amp;lt;/math&amp;gt;, ale o &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;+2^{\circ}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Korekcia: &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\Deltagyro_{cor} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
\Deltagyro - 360 &amp;amp; \text{ak } \Deltagyro &amp;gt; 180 \\&lt;br /&gt;
\Deltagyro + 360 &amp;amp; \text{ak } \Deltagyro &amp;lt; -180 \\&lt;br /&gt;
\Deltagyro &amp;amp; \text{inak}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\label{eq:wrap_gyro}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;dGyro = gyro(k) - gyro(k-1);&lt;br /&gt;
if dGyro &amp;amp;gt; 180&lt;br /&gt;
    dGyro = dGyro - 360;&lt;br /&gt;
end&lt;br /&gt;
if dGyro &amp;amp;lt; -180&lt;br /&gt;
    dGyro = dGyro + 360;&lt;br /&gt;
end&lt;br /&gt;
dTheta = dGyro * pi / 180;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;dGyro = gyro[k] - gyro[k-1]&lt;br /&gt;
if dGyro &amp;amp;gt; 180:&lt;br /&gt;
    dGyro -= 360&lt;br /&gt;
if dGyro &amp;amp;lt; -180:&lt;br /&gt;
    dGyro += 360&lt;br /&gt;
dTheta = dGyro * math.pi / 180&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Synchronizácia časových značiek ==&lt;br /&gt;
&lt;br /&gt;
Odometria sa zaznamenáva s frekvenciou &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 50 Hz&amp;lt;/math&amp;gt;, lidar produkuje &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;≈ 2000&amp;lt;/math&amp;gt; bodov za sekundu. Časové značky pochádzajú z rovnakých hodín, ale nie sú identické. Pre každý lidarový bod musíme nájsť najbližšiu polohu robota.&lt;br /&gt;
&lt;br /&gt;
Efektívne riešenie — paralelný prechod oboma logmi s jedným ukazovateľom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;ridx = 1;&lt;br /&gt;
for i = 1:length(laser_ts)&lt;br /&gt;
    while ridx &amp;amp;lt; N &amp;amp;amp;&amp;amp;amp; ...&lt;br /&gt;
      abs(robot_ts(ridx+1) ...&lt;br /&gt;
        - laser_ts(i)) &amp;amp;lt; ...&lt;br /&gt;
      abs(robot_ts(ridx) ...&lt;br /&gt;
        - laser_ts(i))&lt;br /&gt;
        ridx = ridx + 1;&lt;br /&gt;
    end&lt;br /&gt;
    % robot_ts(ridx) je &lt;br /&gt;
    % najblizsi k laser_ts(i)&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;ridx = 0&lt;br /&gt;
for i in range(len(laser_ts)):&lt;br /&gt;
    while ridx &amp;amp;lt; N-1 and \&lt;br /&gt;
      abs(robot_ts[ridx+1] &lt;br /&gt;
        - laser_ts[i]) &amp;amp;lt; \&lt;br /&gt;
      abs(robot_ts[ridx] &lt;br /&gt;
        - laser_ts[i]):&lt;br /&gt;
        ridx += 1&lt;br /&gt;
    # robot_ts[ridx] je &lt;br /&gt;
    # najblizsi k laser_ts[i]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tento algoritmus má lineárnu zložitosť &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;O(N+M)&amp;lt;/math&amp;gt;, pretože ukazovateľ &amp;lt;code&amp;gt;ridx&amp;lt;/code&amp;gt; sa nikdy nevracia — funguje to, pretože oba logy sú chronologicky usporiadané.&lt;br /&gt;
&lt;br /&gt;
== Filtrovanie neplatných lidarových meraní ==&lt;br /&gt;
&lt;br /&gt;
Nie všetky lidarové body sú platné. Pred spracovaním je nutné vyradiť:&lt;br /&gt;
&lt;br /&gt;
* merania s nulovou vzdialenosťou (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d = 0&amp;lt;/math&amp;gt;) — lidar nezachytil odraz,&lt;br /&gt;
* merania s nízkou kvalitou (odporúčame prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\text{quality} ≥ 10&amp;lt;/math&amp;gt;),&lt;br /&gt;
* voliteľne merania mimo dosahu senzora (&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d &amp;gt; 12000 mm&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;if laser_dist(i) &amp;amp;lt; 20 || ...&lt;br /&gt;
   laser_qual(i) &amp;amp;lt; 10&lt;br /&gt;
    continue;&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;if dist &amp;lt; 20 or quality &amp;lt; 10:&lt;br /&gt;
    continue&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Postup spracovania dát =&lt;br /&gt;
&lt;br /&gt;
Tu je celkový algoritmus zhrnutý do piatich krokov. Kúsky kódu z predchádzajúcich sekcií spojte do jedného skriptu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Načítajte oba súbory.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;R = load(&#039;robot.log&#039;);&lt;br /&gt;
robot_ts = R(:,1);&lt;br /&gt;
encL = R(:,2); encR = R(:,3);&lt;br /&gt;
gyro = R(:,4);&lt;br /&gt;
&lt;br /&gt;
L = load(&#039;laser.log&#039;);&lt;br /&gt;
laser_ts = L(:,1);&lt;br /&gt;
laser_d  = L(:,2);&lt;br /&gt;
laser_a  = L(:,3);&lt;br /&gt;
laser_q  = L(:,4);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np, math&lt;br /&gt;
R = np.loadtxt(&#039;robot.log&#039;)&lt;br /&gt;
robot_ts = R[:,0]&lt;br /&gt;
encL = R[:,1]; encR = R[:,2]&lt;br /&gt;
gyro = R[:,3]&lt;br /&gt;
&lt;br /&gt;
L = np.loadtxt(&#039;laser.log&#039;)&lt;br /&gt;
laser_ts = L[:,0]&lt;br /&gt;
laser_d  = L[:,1]&lt;br /&gt;
laser_a  = L[:,2]&lt;br /&gt;
laser_q  = L[:,3]&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vypočítajte trajektóriu robota&#039;&#039;&#039; (sekcie [[#sec:kinematika|5.1]]–[[#sec:deadreckoning|5.2]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každý krok &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;k = 2, \ldots, N&amp;lt;/math&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_L&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Deltatick_R&amp;lt;/math&amp;gt; s korekciou pretečenia (rov. [[#eq:wrap_enc|[eq:wrap_enc]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepočítajte na dráhy &#039;&#039;d_L&#039;&#039;, &#039;&#039;d_R&#039;&#039; (rov. [[#eq:dl_dr|[eq:dl_dr]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Vypočítajte &#039;&#039;d_c&#039;&#039; a &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\Delta\theta&amp;lt;/math&amp;gt; (rov. [[#eq:dc_dtheta|[eq:dc_dtheta]]] alebo [[#eq:gyro_delta|[eq:gyro_delta]]] alebo [[#eq:compfilter|[eq:compfilter]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aktualizujte &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;x(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;y(k)&amp;lt;/math&amp;gt;, &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k)&amp;lt;/math&amp;gt; (rov. [[#eq:update|[eq:update]]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Výsledkom sú polia &amp;lt;code&amp;gt;robot_x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;robot_theta&amp;lt;/code&amp;gt; o dĺžke &#039;&#039;N&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Transformujte lidarové body do mapy&#039;&#039;&#039; (sekcia [[#sec:lidar_transform|5.4]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Pre každé platné meranie &#039;&#039;i&#039;&#039; (po filtrovaní, sekcia [[#sec:filter|6.4]]):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Nájdite najbližšiu polohu robota &#039;&#039;k&#039;&#039; podľa timestampu (sekcia [[#sec:sync|6.3]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Aplikujte transformáciu (rov. [[#eq:lidar_transform|[eq:lidar_transform]]]) s použitím &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;(x_R, y_R, \theta)&amp;lt;/math&amp;gt; z kroku &#039;&#039;k&#039;&#039;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Uložte globálne súradnice bodu do poľa mapy.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Vykreslite výsledok.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;figure; hold on; axis equal;&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
% Steny bludiska&lt;br /&gt;
plot(map_x, map_y, &#039;.&#039;, ...&lt;br /&gt;
     &#039;Color&#039;, [.5 .5 .5], ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 1);&lt;br /&gt;
&lt;br /&gt;
% Trajektoria&lt;br /&gt;
plot(robot_x, robot_y, ...&lt;br /&gt;
     &#039;b-&#039;, &#039;LineWidth&#039;, 2);&lt;br /&gt;
&lt;br /&gt;
% Start a ciel&lt;br /&gt;
plot(0, 0, &#039;go&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 10, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;g&#039;);&lt;br /&gt;
plot(robot_x(end), ...&lt;br /&gt;
     robot_y(end), &#039;rs&#039;, ...&lt;br /&gt;
     &#039;MarkerSize&#039;, 8, ...&lt;br /&gt;
     &#039;MarkerFaceColor&#039;, &#039;r&#039;);&lt;br /&gt;
&lt;br /&gt;
xlabel(&#039;x [m]&#039;);&lt;br /&gt;
ylabel(&#039;y [m]&#039;);&lt;br /&gt;
title(&#039;Mapa bludiska&#039;);&lt;br /&gt;
legend(&#039;Steny&#039;, &#039;Trajektoria&#039;, ...&lt;br /&gt;
       &#039;Start&#039;, &#039;Ciel&#039;);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.set_aspect(&#039;equal&#039;)&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
&lt;br /&gt;
# Steny bludiska&lt;br /&gt;
ax.plot(map_x, map_y, &#039;.&#039;,&lt;br /&gt;
        color=&#039;gray&#039;,&lt;br /&gt;
        markersize=0.5)&lt;br /&gt;
&lt;br /&gt;
# Trajektoria&lt;br /&gt;
ax.plot(robot_x, robot_y,&lt;br /&gt;
        &#039;b-&#039;, linewidth=2)&lt;br /&gt;
&lt;br /&gt;
# Start a ciel&lt;br /&gt;
ax.plot(0, 0, &#039;go&#039;,&lt;br /&gt;
        markersize=10)&lt;br /&gt;
ax.plot(robot_x[-1],&lt;br /&gt;
        robot_y[-1], &#039;rs&#039;,&lt;br /&gt;
        markersize=8)&lt;br /&gt;
&lt;br /&gt;
ax.set_xlabel(&#039;x [m]&#039;)&lt;br /&gt;
ax.set_ylabel(&#039;y [m]&#039;)&lt;br /&gt;
ax.set_title(&#039;Mapa bludiska&#039;)&lt;br /&gt;
ax.legend([&#039;Steny&#039;,&lt;br /&gt;
           &#039;Trajektoria&#039;,&lt;br /&gt;
           &#039;Start&#039;, &#039;Ciel&#039;])&lt;br /&gt;
plt.show()&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;&#039;Porovnajte tri metódy orientácie.&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Vykreslite trajektóriu a priebeh uhla &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(t)&amp;lt;/math&amp;gt; pre všetky tri prístupy (A, B, C) do spoločného grafu. Diskutujte rozdiely.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kontrolné otázky a bonusové úlohy =&lt;br /&gt;
&lt;br /&gt;
# Prečo používame &#039;&#039;stredný uhol&#039;&#039; &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta_{mid}&amp;lt;/math&amp;gt; a nie &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\theta(k{-}1)&amp;lt;/math&amp;gt;? Aká chyba by vznikla pri čistej Eulerovej metóde?&lt;br /&gt;
# Čo sa stane, ak vynecháte korekciu pretečenia enkodérov? Vyskúšajte a porovnajte výsledky.&lt;br /&gt;
# Pomocou mapy z lidaru odmerajte rozmery bludiska. Porovnajte so skutočnosťou.&lt;br /&gt;
# Dokážete z lidarových dát &#039;&#039;overiť&#039;&#039; prepočtovú konštantu &#039;&#039;c_f&#039;&#039;? &#039;&#039;Pomôcka:&#039;&#039; lidar meria vzdialenosti v milimetroch absolútne — nezávisí od &#039;&#039;c_f&#039;&#039;. Nájdite vzdialenú stenu viditeľnú zo začiatku aj z konca trasy a porovnajte posun nameraný lidarom s počtom tickov enkodéra.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Implementujte jednoduchú mriežkovú mapu (occupancy grid) a porovnajte s mračnom bodov.&lt;br /&gt;
# &#039;&#039;&#039;(Bonus)&#039;&#039;&#039; Čo sa stane s mapou pri dlhšej jazde (desiatky metrov)? Prečo sa steny “rozmazávajú”? Aké riešenie ponúka SLAM?&lt;br /&gt;
&lt;br /&gt;
= Príloha: Užitočné konštanty a vzorce =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|| Rozchod kolies&lt;br /&gt;
|| &#039;&#039;L&#039;&#039; = 0,230 m&lt;br /&gt;
|-&lt;br /&gt;
|| Prepočtový faktor&lt;br /&gt;
|| &#039;&#039;c&amp;lt;sub&amp;gt;f&amp;lt;/sub&amp;gt;&#039;&#039; = 0,000085292 m tick&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie enkodérov&lt;br /&gt;
|| 16-bit: rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;0&amp;lt;/math&amp;gt; – &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;65 535&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±32 768&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Pretečenie gyroskopu&lt;br /&gt;
|| rozsah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;, prah &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;±180^{\circ}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia stupne → radiány&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;\alpha_{rad} = \alpha_{\deg} · \pi / 180&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Konverzia mm → m&lt;br /&gt;
|| &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;d_{\text{m}} = d_{mm} / 1000&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Cvičenia]]&lt;br /&gt;
[[Kategória:Mobilná robotika]]&lt;br /&gt;
[[Kategória:Kobuki]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18629</id>
		<title>Kobuki</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Kobuki&amp;diff=18629"/>
		<updated>2026-05-06T15:07:23Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „= Návod na cvičenie: Rekonštrukcia trajektórie a mapovanie bludiska =  == Cieľ cvičenia == Cieľom tohto cvičenia je prakticky si vyskúšať zber a spracovanie surových dát z mobilného robota. Úlohou je manuálne prejsť s robotom neznáme bludisko a následne zo zaznamenaných dát (odometria, gyroskop a lidar) zrekonštruovať mapu prostredia a presnú trajektóriu pohybu robota.  == Technický opis zariadení ==  === Mobilná platforma Kobuki === Kob…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Návod na cvičenie: Rekonštrukcia trajektórie a mapovanie bludiska =&lt;br /&gt;
&lt;br /&gt;
== Cieľ cvičenia ==&lt;br /&gt;
Cieľom tohto cvičenia je prakticky si vyskúšať zber a spracovanie surových dát z mobilného robota. Úlohou je manuálne prejsť s robotom neznáme bludisko a následne zo zaznamenaných dát (odometria, gyroskop a lidar) zrekonštruovať mapu prostredia a presnú trajektóriu pohybu robota.&lt;br /&gt;
&lt;br /&gt;
== Technický opis zariadení ==&lt;br /&gt;
&lt;br /&gt;
=== Mobilná platforma Kobuki ===&lt;br /&gt;
Kobuki je nízkonákladová mobilná platforma s diferenciálnym podvozkom, určená na výskum a vzdelávanie. Robot je vybavený dvoma pohonnými kolesami a pomocnými pasívnymi kolieskami pre stabilitu. Obsahuje inkrementálne enkodéry na motoroch a interný jednoosový gyroskop na meranie uhlovej rýchlosti a natočenia.&lt;br /&gt;
&lt;br /&gt;
=== Laserový skener RPLidar A1 ===&lt;br /&gt;
RPLidar A1 je 2D laserový skener (LIDAR) pracujúci na princípe triangulácie. Senzor rotuje v rozsahu 360 stupňov a meria vzdialenosti k prekážkam. Je umiestnený v geometrickom strede robota Kobuki, čo zjednodušuje transformáciu súradníc.&lt;br /&gt;
&lt;br /&gt;
=== Technické parametre ===&lt;br /&gt;
Z nasledujúcich tabuliek vyberte parametre relevantné pre vaše výpočty.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parametre robota Kobuki&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| Maximálna translačná rýchlosť || 70 cm/s&lt;br /&gt;
|-&lt;br /&gt;
| Maximálna rotačná rýchlosť || 180 deg/s&lt;br /&gt;
|-&lt;br /&gt;
| Rázvor kolies (L) || 230 mm&lt;br /&gt;
|-&lt;br /&gt;
| Rozlíšenie enkodéra || 2578.33 ticks/wheel rev&lt;br /&gt;
|-&lt;br /&gt;
| Hustota impulzov || 11.7 ticks/mm&lt;br /&gt;
|-&lt;br /&gt;
| Frekvencia senzorových dát || 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
| Napätie batérie || 14.8 V&lt;br /&gt;
|-&lt;br /&gt;
| Hmotnosť || 2.35 kg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parametre RPLidar A1&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| Rozsah merania || 0.15 – 12 m&lt;br /&gt;
|-&lt;br /&gt;
| Uhlový rozsah || 0 – 360°&lt;br /&gt;
|-&lt;br /&gt;
| Uhlové rozlíšenie || ≤ 1°&lt;br /&gt;
|-&lt;br /&gt;
| Frekvencia skenovania || 5.5 Hz (typická)&lt;br /&gt;
|-&lt;br /&gt;
| Smer rotácie || V smere hod. ručičiek (CW)&lt;br /&gt;
|-&lt;br /&gt;
| Napájanie || 5 V / 500 mA&lt;br /&gt;
|-&lt;br /&gt;
| Presnosť vzdialenosti || &amp;lt; 1% (pri 12 m)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Metodika merania ==&lt;br /&gt;
# Pomocou joysticku alebo klávesnice ovládajte robota v prostredí bludiska.&lt;br /&gt;
# Prejdite všetky hlavné chodby aj slepé uličky. Pomalší a plynulý pohyb zaručuje kvalitnejšie dáta.&lt;br /&gt;
# Počas pohybu systém automaticky ukladá dáta do súborov &#039;&#039;&#039;robot.log&#039;&#039;&#039; a &#039;&#039;&#039;laser.log&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Formát nameraných dát ==&lt;br /&gt;
&lt;br /&gt;
=== Súbor robot.log ===&lt;br /&gt;
Každý riadok obsahuje jeden časový záznam:&lt;br /&gt;
# &#039;&#039;&#039;Timestamp [us]&#039;&#039;&#039; – Čas merania v mikrosekundách.&lt;br /&gt;
# &#039;&#039;&#039;Left Encoder&#039;&#039;&#039; – Kumulatívny počet impulzov ľavého kolesa.&lt;br /&gt;
# &#039;&#039;&#039;Right Encoder&#039;&#039;&#039; – Kumulatívny počet impulzov pravého kolesa.&lt;br /&gt;
# &#039;&#039;&#039;Gyro Angle [deg]&#039;&#039;&#039; – Aktuálny uhol natočenia robota v stupňoch.&lt;br /&gt;
&lt;br /&gt;
=== Súbor laser.log ===&lt;br /&gt;
Obsahuje surové merania z lidaru:&lt;br /&gt;
# &#039;&#039;&#039;Timestamp [us]&#039;&#039;&#039; – Synchronizačný čas.&lt;br /&gt;
# &#039;&#039;&#039;Distance [mm]&#039;&#039;&#039; – Vzdialenosť k prekážke.&lt;br /&gt;
# &#039;&#039;&#039;Angle [deg]&#039;&#039;&#039; – Uhol lúča voči osi robota (0° = vpred).&lt;br /&gt;
# &#039;&#039;&#039;Quality&#039;&#039;&#039; – Kvalita odrazu (celé číslo).&lt;br /&gt;
&lt;br /&gt;
== Teória výpočtu ==&lt;br /&gt;
&lt;br /&gt;
=== Ideálny model pohybu ===&lt;br /&gt;
V ideálnom prípade predpokladáme nekonečné rozlíšenie a nulovú chybu. Pre diferenciálny podvozok platí výpočet elementárneho posunu &amp;lt;math&amp;gt; \Delta s &amp;lt;/math&amp;gt;:&lt;br /&gt;
:&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot; display=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
  \Delta s = \frac{\Delta s_R + \Delta s_L}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natočenie robota &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; berieme priamo z gyroskopu. Nová poloha v rovine sa vypočíta integráciou:&lt;br /&gt;
:&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot; display=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
  x_i = x_{i-1} + \Delta s \cdot \cos(\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot; display=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
  y_i = y_{i-1} + \Delta s \cdot \sin(\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ideálne mapovanie ===&lt;br /&gt;
Bod nameraný lidarom (vzdialenosť &amp;lt;math&amp;gt; r &amp;lt;/math&amp;gt;, uhol &amp;lt;math&amp;gt; \alpha &amp;lt;/math&amp;gt;) prenesieme do globálnej mapy pomocou natočenia robota &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;:&lt;br /&gt;
:&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot; display=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
  X_{wall} = x_R + r \cdot \cos(\theta + \alpha)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot; display=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
  Y_{wall} = y_R + r \cdot \sin(\theta + \alpha)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Praktické problémy a implementácia ==&lt;br /&gt;
&lt;br /&gt;
=== Pretečenie enkodérov ===&lt;br /&gt;
Enkodéry robota sú 16-bitové nesignované integery (0 – 65535). Pri výpočte rozdielu &amp;lt;math&amp;gt; \Delta ticks &amp;lt;/math&amp;gt; musíte ošetriť skokovú zmenu hodnoty pri pretečení (overflow).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ukážka v Matlabe:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff = current - previous;&lt;br /&gt;
if diff &amp;gt; 32767, diff = diff - 65536; end&lt;br /&gt;
if diff &amp;lt; -32768, diff = diff + 65536; end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ukážka v Pythone:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff = current - previous&lt;br /&gt;
if diff &amp;gt; 32767: diff -= 65536&lt;br /&gt;
elif diff &amp;lt; -32768: diff += 65536&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Uhol a smerovanie ===&lt;br /&gt;
Gyroskop vracia uhol v rozsahu ±180°. Pred interpoláciou sa odporúča použiť funkciu &#039;&#039;&#039;unwrap&#039;&#039;&#039;, ktorá odstráni skoky pri prechode cez hranicu.&lt;br /&gt;
* &#039;&#039;&#039;Pozor:&#039;&#039;&#039; Lidar meria uhol &amp;lt;math&amp;gt; \alpha &amp;lt;/math&amp;gt; v smere CW (hodinové ručičky), zatiaľ čo goniometria v kódovacích jazykoch je CCW. Preto pri výpočte používajte záporný uhol lidaru (&amp;lt;math&amp;gt; -\alpha &amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Synchronizácia časových značiek ===&lt;br /&gt;
Dáta z lidaru a odometrie nie sú zaznamenané v rovnakom čase. Pre každý záznam z laser.log musíte nájsť polohu robota v danom čase pomocou lineárnej interpolácie.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Matlab:&#039;&#039;&#039; &amp;lt;code&amp;gt;interp1(robot_time, robot_x, laser_time)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Python (numpy):&#039;&#039;&#039; &amp;lt;code&amp;gt;np.interp(laser_time, robot_time, robot_x)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Úlohy ==&lt;br /&gt;
# Načítajte logy a vykonajte konverziu jednotiek (impulzy -&amp;gt; metre, mm -&amp;gt; metre).&lt;br /&gt;
# Vypočítajte trajektóriu [x, y] a vykreslite ju.&lt;br /&gt;
# Transformujte body z lidaru do globálnych súradníc (filtrujte body s kvalitou 0 a vzdialenosťou mimo 0.15 - 6 m).&lt;br /&gt;
# Vykreslite mapu bludiska (čierne body) a do nej vložte trajektóriu robota (farebná čiara).&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18532</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18532"/>
		<updated>2026-04-28T22:12:54Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bezpečnosť pri práci s lasermi&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Zdroj: http://sk.lumispot-tech.com/news/understanding-laser-safety-essential-knowledge-for-laser-protection/&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;1. Teoretický úvod a technické parametre&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:photoneoPhoXi3D.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Slovenské skenery Photoneo PhoXi (Zebra Technologies Slovakia) využívajú projekciu kódovaných svetelných vzorov. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;2. Referenčný objekt: Lego Duplo 2x4&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;3. Postup merania&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_CloudCompare.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Meranie rozmerov v programe CloudCompare.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak program nie je nainštalovaný, stiahnete si ho odtiaľto: https://www.cloudcompare.org/release/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:MISA_CloudCompare.png&amp;diff=18531</id>
		<title>Súbor:MISA CloudCompare.png</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:MISA_CloudCompare.png&amp;diff=18531"/>
		<updated>2026-04-28T22:11:48Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18530</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18530"/>
		<updated>2026-04-28T22:11:34Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Bezpečnosť pri práci s lasermi&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Zdroj: http://sk.lumispot-tech.com/news/understanding-laser-safety-essential-knowledge-for-laser-protection/&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;1. Teoretický úvod a technické parametre&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:photoneoPhoXi3D.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Slovenské skenery Photoneo PhoXi (Zebra Technologies Slovakia) využívajú projekciu kódovaných svetelných vzorov. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;2. Referenčný objekt: Lego Duplo 2x4&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;3. Postup merania&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_CloudCompare.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Meranie rozmerov v programe CloudCompare.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak program nie je nainštalovaný, stiahnete si ho odtiaľto: https://www.cloudcompare.org/release/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18528</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18528"/>
		<updated>2026-04-28T22:09:02Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Bezpečnosť pri práci s lasermi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Zdroj: http://sk.lumispot-tech.com/news/understanding-laser-safety-essential-knowledge-for-laser-protection/&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:photoneoPhoXi3D.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Slovenské skenery Photoneo PhoXi (Zebra Technologies Slovakia) využívajú projekciu kódovaných svetelných vzorov. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18527</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18527"/>
		<updated>2026-04-28T22:06:25Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:photoneoPhoXi3D.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Slovenské skenery Photoneo PhoXi (Zebra Technologies Slovakia) využívajú projekciu kódovaných svetelných vzorov. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:PhotoneoPhoXi3D.jpg&amp;diff=18526</id>
		<title>Súbor:PhotoneoPhoXi3D.jpg</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:PhotoneoPhoXi3D.jpg&amp;diff=18526"/>
		<updated>2026-04-28T22:05:16Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18525</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18525"/>
		<updated>2026-04-28T22:05:06Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1. Teoretický úvod a technické parametre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:photoneoPhoXi3D.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Slovenské skenery Photoneo využívajú projekciu kódovaných svetelných vzorov. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18524</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18524"/>
		<updated>2026-04-28T22:01:46Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 70 - 120 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 42 - 58 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1280 bodov / profil&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18522</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18522"/>
		<updated>2026-04-28T21:57:16Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:ScanControl29xx.jpg&amp;diff=18521</id>
		<title>Súbor:ScanControl29xx.jpg</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:ScanControl29xx.jpg&amp;diff=18521"/>
		<updated>2026-04-28T21:56:46Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18520</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18520"/>
		<updated>2026-04-28T21:56:37Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1. Teoretický úvod a technické parametre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:scanControl29xx.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor scanCONTROL 29xx pracuje na princípe optickej triangulácie (metóda svetelného rezu):  Laserová čiara je premietaná na povrch cieľa prostredníctvom lineárneho optického systému.  Difúzne odrazené svetlo z laserovej čiary je zobrazené na maticu (pole) senzora pomocou vysokokvalitného optického systému a vyhodnocované v dvoch rozmeroch.  Triangulácia laserovej čiary v princípe zodpovedá triangulácii laserového bodu. Avšak počas merania je laserovou čiarou súčasne osvetlený celý rad bodov. Okrem informácie o vzdialenosti (os Z) systém deteguje a odosiela aj presnú polohu každého bodu na laserovej čiare (os X). Výsledkom je 2D profil objektu (rez) v reálnom čase.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18519</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18519"/>
		<updated>2026-04-28T21:50:14Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 4. Spracovanie výsledkov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní. Vyhodnoťte vplyv farby materiálu na meranie.&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18518</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18518"/>
		<updated>2026-04-28T21:49:32Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 3. Postup merania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
Každé meranie zopakujte aspoň pre dve rozličné farby a porovnajte výsledky.&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
&lt;br /&gt;
# Zapojte senzor (napájanie 12 V).&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky.&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť.&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt. Odmerajte všetky tri základné rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
&lt;br /&gt;
# Spustite nas počítači softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;.&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov.&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu.&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge).&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L a R vpravo hore) odmerajte výšku kocky a výšku výstupkov.&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;).&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.PLY&#039;&#039;&#039;.&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor.&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;.&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery.&lt;br /&gt;
# Zhodnoťte vplyv farby kocky na meranie.&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18517</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18517"/>
		<updated>2026-04-28T21:46:04Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1.1 Sick DS50: Princíp Time-of-Flight (ToF) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 4 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || 2x Digitálny &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:SickDS50.jpg&amp;diff=18516</id>
		<title>Súbor:SickDS50.jpg</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:SickDS50.jpg&amp;diff=18516"/>
		<updated>2026-04-28T21:37:18Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18515</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18515"/>
		<updated>2026-04-28T21:37:07Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 1. Teoretický úvod a technické parametre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
&lt;br /&gt;
[[Súbor:SickDS50.jpg|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18511</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18511"/>
		<updated>2026-04-28T21:27:29Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 2. Referenčný objekt: Lego Duplo 2x4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|700px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:MISA_LegoDuplo4x2.png&amp;diff=18510</id>
		<title>Súbor:MISA LegoDuplo4x2.png</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:MISA_LegoDuplo4x2.png&amp;diff=18510"/>
		<updated>2026-04-28T21:27:09Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18509</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18509"/>
		<updated>2026-04-28T21:26:57Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* 2. Referenčný objekt: Lego Duplo 2x4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&#039;text-align: center;&#039;&amp;gt;&lt;br /&gt;
[[Súbor:MISA_LegoDuplo4x2.png|500px]]&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Kocka Lego Duplo 4x2 - rozmery.&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18507</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18507"/>
		<updated>2026-04-28T21:21:04Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Bezpečnosť pri práci s lasermi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene - môžu byť nebezpečné.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení. Riziko expozície  môže zvýšiť, ak zariadenie nesprávne používajú nevyškolené osoby.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja. Pozeranie do rozptýleného odrazeného svetla je zvyčajne bezpečné, ak sa oko nachádza vo vzdialenosti väčšej ako 13 cm od rozptylovej plochy a čas trvania expozície je menší ako 10 sekúnd.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18506</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18506"/>
		<updated>2026-04-28T21:16:45Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Bezpečnosť pri práci s lasermi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:LaserWarning.png&amp;diff=18505</id>
		<title>Súbor:LaserWarning.png</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=S%C3%BAbor:LaserWarning.png&amp;diff=18505"/>
		<updated>2026-04-28T21:16:21Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18504</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18504"/>
		<updated>2026-04-28T21:16:03Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
&lt;br /&gt;
[[File:LaserWarning.png|200px|left]] &lt;br /&gt;
&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s). Do lúča sa však nikdy nepozerajte cielene.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení.&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja.&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18497</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18497"/>
		<updated>2026-04-28T13:40:00Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie[cite: 215]:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW[cite: 218]. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s)[cite: 219, 220]. Do lúča sa však nikdy nepozerajte cielene[cite: 216].&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW[cite: 227]. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení[cite: 221, 222].&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW[cite: 226]. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku[cite: 10, 231]. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja[cite: 10, 231].&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18496</id>
		<title>Laserové senzory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Laserov%C3%A9_senzory&amp;diff=18496"/>
		<updated>2026-04-28T13:39:37Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „= Laboratórny návod: Inteligentné senzorové systémy =  &amp;#039;&amp;#039;&amp;#039;Téma:&amp;#039;&amp;#039;&amp;#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov &amp;#039;&amp;#039;&amp;#039;Cieľ:&amp;#039;&amp;#039;&amp;#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.  == Bezpečnosť pri práci s lasermi == Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie[cite: 215]: * &amp;#039;&amp;#039;&amp;#039;Laserová trieda 2 (Sick DS50):&amp;#039;&amp;#039;&amp;#039; Viditeľné žiar…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Laboratórny návod: Inteligentné senzorové systémy =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Téma:&#039;&#039;&#039; Optické meranie vzdialenosti, profilu a 3D skenovanie objektov&lt;br /&gt;
&#039;&#039;&#039;Cieľ:&#039;&#039;&#039; Meranie geometrických parametrov telesa (Lego Duplo 2x4) pomocou troch rôznych technológií.&lt;br /&gt;
&lt;br /&gt;
== Bezpečnosť pri práci s lasermi ==&lt;br /&gt;
Pri práci je nevyhnutné dodržiavať bezpečnostné predpisy pre laserové zariadenia podľa ich klasifikácie[cite: 215]:&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 2 (Sick DS50):&#039;&#039;&#039; Viditeľné žiarenie s výkonom do 1 mW[cite: 218]. Ochrana oka je zabezpečená prirodzeným žmurkacím reflexom (reakcia do 0,25 s)[cite: 219, 220]. Do lúča sa však nikdy nepozerajte cielene[cite: 216].&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3R (PhoXi M):&#039;&#039;&#039; Žiarenie s výkonom do 5 mW[cite: 227]. Priamy pohľad do lúča môže byť nebezpečný pre sietnicu oka, najmä pri dlhodobom vystavení[cite: 221, 222].&lt;br /&gt;
* &#039;&#039;&#039;Laserová trieda 3B (ScanControl):&#039;&#039;&#039; &#039;&#039;&#039;Vysoké nebezpečenstvo.&#039;&#039;&#039; Výkon do 500 mW[cite: 226]. Priamy lúč aj zrkadlové odrazy môžu spôsobiť trvalé poškodenie zraku[cite: 10, 231]. Je &#039;&#039;&#039;prísne zakázané&#039;&#039;&#039; vkladať do cesty lúča vysoko reflexné predmety a pozerať sa priamo do zdroja[cite: 10, 231].&lt;br /&gt;
&lt;br /&gt;
== 1. Teoretický úvod a technické parametre ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Sick DS50: Princíp Time-of-Flight (ToF) ===&lt;br /&gt;
Senzor meria čas, za ktorý laserový impulz prejde dráhu k objektu a späť[cite: 2, 4]. Vzdialenosť sa určuje na základe konštantnej rýchlosti svetla[cite: 4].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre SICK DS50&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania&#039;&#039;&#039; || 200 mm – 10 000 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie&#039;&#039;&#039; || 1 mm [cite: 4]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť merania&#039;&#039;&#039; || ± 10 mm (typická)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Napájacie napätie&#039;&#039;&#039; || 10 V – 30 V DC [cite: 3]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Výstup&#039;&#039;&#039; || Analógový (4–20 mA / 0–10 V)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Micro-epsilon ScanControl 2950-50: Laserová triangulácia ===&lt;br /&gt;
Senzor premieta laserovú čiaru, ktorej deformáciu na objekte sníma vnútorná kamera pod presne definovaným uhlom[cite: 8, 9]. Výsledkom je 2D profil objektu (rez) v reálnom čase[cite: 18, 35].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre ScanControl 2950-50/3B-SI&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Počet bodov na profil&#039;&#039;&#039; || 1280 bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozsah merania (Z)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Šírka čiary (X)&#039;&#039;&#039; || 50 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia profilov&#039;&#039;&#039; || až 2000 Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozhranie&#039;&#039;&#039; || Gigabit Ethernet [cite: 11]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Photoneo PhoXi 3D Scanner Model M: Štruktúrované svetlo ===&lt;br /&gt;
Skenery Photoneo využívajú projekciu kódovaných svetelných vzorov[cite: 36]. Kamera sníma deformáciu týchto vzorov a algoritmy transformujú dáta na mračno 3D bodov (point cloud)[cite: 41, 47].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Technické parametre PhoXi Model M&lt;br /&gt;
! Parameter !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Snímací rozsah&#039;&#039;&#039; || 458 mm – 1118 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Optimálna vzdialenosť&#039;&#039;&#039; || 650 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Presnosť (Z-noise)&#039;&#039;&#039; || &amp;lt; 0,1 mm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rozlíšenie senzora&#039;&#039;&#039; || 3,2 milióna 3D bodov&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pripojenie&#039;&#039;&#039; || Gigabit Ethernet [cite: 37]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Referenčný objekt: Lego Duplo 2x4 ==&lt;br /&gt;
Namerané hodnoty porovnajte s týmito teoretickými rozmermi:&lt;br /&gt;
* &#039;&#039;&#039;Dĺžka:&#039;&#039;&#039; 63,8 mm (nominálne 64 mm vrátane vôle).&lt;br /&gt;
* &#039;&#039;&#039;Šírka:&#039;&#039;&#039; 31,8 mm (nominálne 32 mm).&lt;br /&gt;
* &#039;&#039;&#039;Výška (bez výstupkov):&#039;&#039;&#039; 19,2 mm.&lt;br /&gt;
* &#039;&#039;&#039;Priemer výstupku (stud):&#039;&#039;&#039; 9,4 mm.&lt;br /&gt;
* &#039;&#039;&#039;Výška výstupku:&#039;&#039;&#039; cca 4,5 mm.&lt;br /&gt;
&lt;br /&gt;
== 3. Postup merania ==&lt;br /&gt;
&lt;br /&gt;
=== Úloha 1: Bodové meranie (SICK) ===&lt;br /&gt;
# Zapojte senzor (napájanie 12 V - 24 V)[cite: 3].&lt;br /&gt;
# Odmerajte základnú vzdialenosť k podložke bez kocky[cite: 5].&lt;br /&gt;
# Vložte kocku pod lúč a odmerajte novú vzdialenosť[cite: 5].&lt;br /&gt;
# Výšku kocky získate odčítaním týchto dvoch hodnôt[cite: 5]. Odmerajte všetky tri základné rozmery[cite: 6].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 2: Profilové meranie (Micro-Epsilon) ===&lt;br /&gt;
# Spustite softvér &#039;&#039;&#039;scanCONTROL Configuration Tools&#039;&#039;&#039;[cite: 11].&lt;br /&gt;
# V menu &#039;&#039;&#039;Display Image Data&#039;&#039;&#039; nastavte polohu kocky tak, aby bola čiara jasne viditeľná vrátane výstupkov[cite: 15, 21, 22].&lt;br /&gt;
# Prejdite do &#039;&#039;&#039;Display Profiles&#039;&#039;&#039; pre zobrazenie zdigitalizovaného profilu[cite: 18, 24].&lt;br /&gt;
# V &#039;&#039;&#039;Program Selector&#039;&#039;&#039; nastavte meranie výšky (Step) alebo hrany (Edge)[cite: 19, 26].&lt;br /&gt;
# Pomocou grafických kót (nastavenie cez tlačidlo L vpravo hore) odmerajte výšku kocky a výšku výstupkov[cite: 27, 28, 29, 30].&lt;br /&gt;
# Vyskúšajte identifikovať chybnú zelenú kocku so zalepeným výstupkom[cite: 33, 34].&lt;br /&gt;
&lt;br /&gt;
=== Úloha 3: 3D skenovanie (Photoneo) ===&lt;br /&gt;
# V programe &#039;&#039;&#039;PhoXi Control&#039;&#039;&#039; vykonajte jeden sken (tlačidlo &#039;&#039;&#039;Trigger&#039;&#039;&#039;)[cite: 37, 43].&lt;br /&gt;
# Skontrolujte vizuálnu kvalitu skenu a uložte dáta vo formáte &#039;&#039;&#039;.ply&#039;&#039;&#039;[cite: 44, 45].&lt;br /&gt;
# Otvorte softvér &#039;&#039;&#039;CloudCompare&#039;&#039;&#039; a načítajte uložený súbor[cite: 46, 48, 49].&lt;br /&gt;
# Použite nástroj &#039;&#039;&#039;Tools -&amp;gt; Point Picking&#039;&#039;&#039;[cite: 50].&lt;br /&gt;
# Zvoľte druhú možnosť (&#039;&#039;&#039;Select two points&#039;&#039;&#039;) a kliknutím na rohy kocky odmerajte jej reálne rozmery[cite: 51, 52, 53].&lt;br /&gt;
&lt;br /&gt;
== 4. Spracovanie výsledkov ==&lt;br /&gt;
V protokole vytvorte tabuľku s porovnaním nameraných hodnôt zo všetkých troch senzorov voči teoretickým rozmerom kocky Lego Duplo[cite: 55]. Vyhodnoťte presnosť jednotlivých technológií a priložte screenshoty z meraní[cite: 54, 55, 56].&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=MEMS_inteligentn%C3%A9_senzory_a_aktu%C3%A1tory&amp;diff=18495</id>
		<title>MEMS inteligentné senzory a aktuátory</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=MEMS_inteligentn%C3%A9_senzory_a_aktu%C3%A1tory&amp;diff=18495"/>
		<updated>2026-04-28T13:34:12Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Cvičenia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Novinky&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 16. 2. 2026 Aktualizácia na nový semester. Novinky sledujte v Google Classroom.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
* 4.4.2022 Už absolvované prezentácie&lt;br /&gt;
&lt;br /&gt;
** &amp;lt;S&amp;gt;4.4. - 8. tyzden Andrej Jackulík: Senzory sily (Fraden: Handbook of..., kapitola 9.2.1. a 9.2.2.)&amp;lt;/S&amp;gt;&lt;br /&gt;
** &amp;lt;S&amp;gt;4.4. - 8. tyzden Ivan Hristov: Senzory sily (Fraden: Handbook of..., kapitola 9.2.3. a 9.2.4.)&amp;lt;/S&amp;gt;&lt;br /&gt;
** &amp;lt;S&amp;gt;4.4. - 8. tyzden Martin Žofčík: Senzory sily (Fraden: Handbook of..., kapitola 9.2.5. a 9.2.6.)&amp;lt;/S&amp;gt;&lt;br /&gt;
** 4.4. - 8. tyzden Daniel Marinič: Senzory sily (Fraden: Handbook of..., kapitola 9.2.7. a 9.3.)&lt;br /&gt;
** 4.4. - 8. tyzden Lukas Baca: Airbagy - senzory, odpalovanie a signály&lt;br /&gt;
** &amp;lt;S&amp;gt;5.T (14.3.) Geometrická optika I (vysvetliť šošovky, spojka a rozptylka)&amp;lt;/S&amp;gt;&lt;br /&gt;
** &amp;lt;S&amp;gt;5.T (14.3.) Geometrická optika II (vysvetliť zrkadlá, rovinné, vypuklé aj duté)&amp;lt;/S&amp;gt;&lt;br /&gt;
** 21.3. - 6. tyzden Jan Dolinay: Akustické senzory (typy mikrofónov - odporový, kondenzátorový)&lt;br /&gt;
** 21.3. - 6. tyzden Myroslav Khoma: Akustické senzory - elektretový mikrofón&lt;br /&gt;
** 21.3. - 6. tyzden Gabriel Stoklas: Akustika - defektoskopia pomocou ultrazvuku&lt;br /&gt;
** 21.3. - 6. tyzden Andrej Kosik: Delfíny&lt;br /&gt;
** 21.3. - 6. tyzden Lukrecia Szilvasiova: Netopiere&lt;br /&gt;
&lt;br /&gt;
* 22. 3. 2022 &#039;&#039;&#039;Rektorské voľno&#039;&#039;&#039; - cvičenia sa môžete dobrovoľne zúčastniť, ale ak nie, tak v Classroome budete mať k dispozícii záznam. Cvičenie nechcem celkom zrušiť, lebo by sa nám potom rozhádzal celý semester... &lt;br /&gt;
* 21.2.2022 &#039;&#039;&#039;Rektorské voľno&#039;&#039;&#039; - prednáška nebude, v Classroome máte k dispozícii záznam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 5&#039;&#039;&#039; Meranie v ME Inspection&amp;lt;BR&amp;gt;Na exkurzii sme zmerali 5ks kociek Lego DUPLO. Stiahnite si [https://senzor.robotika.sk/mems/MEIdata2019.zip namerané data] a zistite, ktorá z kociek nevyhovuje rozmermi. Data boli získané z dvojice laserových snímačov vzdialenosti MicroEpsilon umiestnených voči sebe. Štruktúra dát je nasledovná: prvý stĺpec - horný senzor, druhý stĺpec - spodný senzor, tretí stĺpec - hodnota z IRC snímača, poloha. Data sú oddelené bodkočiarkou. Dáta sú v surovej podobe, nekalibrované. Ako pomôcka môže poslúžiť [http://www.bartneck.de/wp-content/uploads/2019/03/LEGO-Brick-Dimensions-Measurements.pdf rozmerový nákres] bežnej Lego kocky spolu s informáciou, že Lego DUPLO má rozmery dvojnásobné. Kocky sme merali naprieč, teda data obsahujú dva &amp;quot;štuplíky&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:DuploLaserScan.jpg|400px|center]][[Súbor:ModraKockaScan.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Skúška ===&lt;br /&gt;
&lt;br /&gt;
Informácia pre študentov riadneho i dištančného štúdia:&lt;br /&gt;
&lt;br /&gt;
Riadny termín 25. 5. 2017 o 8:00 v CD-35&lt;br /&gt;
Opravný termín 5. 6. 2017 o 9:00 v D-212&lt;br /&gt;
&lt;br /&gt;
Na skúške smiete používať akékoľvek svoje písomné materiály (prednášky,&lt;br /&gt;
cvičenia, knihy,...). Zakázané je pripojenie na internet a komunikácia s inými osobami.&lt;br /&gt;
Skúška slúži na overenie vašich znalostí. Pokus o podvod bude potrestaný&lt;br /&gt;
okamžitým vylúčením zo skúšky a prepadnutím termínu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Obsahom skúšky bude:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
* princípy senzorov jednotlivých veličin (obrázok, stručné vysvetlenie) - aj z čítania na doma.&lt;br /&gt;
* niekoľko otázok s výberom správnej možnosti (a,b,c,d)&lt;br /&gt;
&lt;br /&gt;
Skúšku budete písať 60 minút. &lt;br /&gt;
&lt;br /&gt;
Opravovať sa bude bezprostredne po písomke, môžete počkať na výsledok a prípadne&lt;br /&gt;
ho na mieste konzultovať.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DOTAZNÍK SPOKOJNOSTI:&#039;&#039;&#039; https://goo.gl/forms/FMAEVKu1dM7xgX6w2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Prednášky&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Odkaz na AIS:&lt;br /&gt;
* 38173_3B - [http://is.stuba.sk/katalog/syllabus.pl?predmet=282169; MEMSISA: MEMS - inteligentné senzory a aktuátory]&lt;br /&gt;
&lt;br /&gt;
Prednášky budú vždy v utorok od 8:00 do 9:40 v miestnosti CD-150. Účasť na prednáškach je povinná.&lt;br /&gt;
&lt;br /&gt;
Prednášajúci: doc. Ing. Richard Balogh, PhD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prednášky LS 2026 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1:&#039;&#039;&#039; 17. 2. 2026 &#039;&#039;&#039;Úvod. Vlastnosti senzorov&#039;&#039;&#039; (charakteristiky).  &amp;lt;BR&amp;gt; Spracovanie výsledkov merania podľa &#039;&#039;&#039;STN EN 60 770&#039;&#039;&#039;&lt;br /&gt;
** Spracovanie výsledkov [https://senzor.robotika.sk/mems/data/Cvicenie01.pdf podľa STN EN 60 770]&lt;br /&gt;
** [[Ako správne kresliť grafy]].&lt;br /&gt;
** [https://www.projectorjunkies.com/%CF%87%CE%B9%CE%BB%CE%B9%CE%AC%CE%B4%CE%B5%CF%82-%CE%BC%CE%B9%CE%BA%CF%81%CE%AC-%CE%BE%CF%89%CF%84%CE%B9%CE%BA%CE%AC-%CF%83%CF%84%CE%BF-dmd-chip-dlp-2/ Ako funguje DLP čip]&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;FONT Color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;2:&#039;&#039;&#039; 25. 2. 2025 &#039;&#039;&#039;Vlastnosti senzorov II.&#039;&#039;&#039; (charakteristiky) a princípy digitálnych prevodníkov.  ([https://senzor.robotika.sk/mems/prednasky/2025prednaskaMISA-02.pdf slajdy z prednášky])&lt;br /&gt;
** [https://youtu.be/plq_Nmud5CM Kvantizácia A/D prevodníka]&lt;br /&gt;
* &#039;&#039;&#039;3:&#039;&#039;&#039; 4. 3. 2025 &#039;&#039;&#039;Základy merania a interpolácia inverznej charakteristiky senzorov.&#039;&#039;&#039;  ([https://senzor.robotika.sk/mems/prednasky/2025prednaskaMISA-02.pdf slajdy z prednášky])&lt;br /&gt;
** Jacob Fraden: Handbook of Modern Sensors. 4th ed. Springer, New York, 2010. Dostupné on-line: &amp;lt;[https://link.springer.com/book/10.1007/978-3-319-19303-8 springer.com]&amp;gt;&lt;br /&gt;
** [https://senzor.robotika.sk/go/sam/ Animácia pre Nyquistov vzorkovací teorém]&lt;br /&gt;
** [https://senzor.robotika.sk/mmp/anim/ Animácie D/A a A/D prevodu]&lt;br /&gt;
* &#039;&#039;&#039;4:&#039;&#039;&#039; 11. 3. 2025 &#039;&#039;&#039;Ľudské zmysly&#039;&#039;&#039; - (vrátane vašich prezentácií) a &#039;&#039;&#039;Odporové snímače&#039;&#039;&#039; + Analýza tenzometrického mostíka ([https://senzor.robotika.sk/mems/prednasky/2025prednaskaMISA-04.pdf slajdy])&lt;br /&gt;
** Program BBC [http://www.bbc.co.uk/science/humanbody/tv/humansenses/ Human Senses] &lt;br /&gt;
** Jessica Morrison: [http://www.scientificamerican.com/article/human-nose-can-detect-1-trillion-odors/ Human Nose Can Detect 1 Trillion Odors]&lt;br /&gt;
** [http://www.ted.com/topics/senses Séria prednášok TEDx o zmysloch]&lt;br /&gt;
** Beau Lotto: &#039;&#039;[http://www.ted.com/talks/lang/sk/beau_lotto_optical_illusions_show_how_we_see.html Optical illusions show how we see]&#039;&#039;.  Video on &#039;&#039;&#039;[http://ted.com TED]&#039;&#039;&#039;.com&lt;br /&gt;
** Edward H. Adelson: &#039;&#039;[http://persci.mit.edu/pub_pdfs/gazzan.pdf Lightness Perception and Lightness Illusions]&#039;&#039; &#039;&#039;&#039;[http://web.mit.edu/persci/gaz/# + demonstrations]&#039;&#039;&#039; (mit.edu)&lt;br /&gt;
* &#039;&#039;&#039;5:&#039;&#039;&#039; 18. 3. 2025 &#039;&#039;&#039;Akustické princípy&#039;&#039;&#039; - [https://senzor.robotika.sk/mems/prednasky/2025prednaskaMISA-05.pdf slajdy]&lt;br /&gt;
** Alain Van Ryckegham: &#039;&#039;[https://www.scientificamerican.com/article/how-do-bats-echolocate-an/ How do bats echolocate and how are they adapted to this activity?]&#039;&#039;. Scientific American &lt;br /&gt;
** Denise Herzing: &#039;&#039;[https://blog.ted.com/the-language-of-dolphins-denise-herzing-at-ted2013/ The language of dolphins]&#039;&#039; TED2013&lt;br /&gt;
* &#039;&#039;&#039;6:&#039;&#039;&#039; 25. 3. 2025 &#039;&#039;&#039;Optické princípy I.&#039;&#039;&#039;  Optická cesta  - [http://senzor.robotika.sk/mems/prednasky/2022prednaskaMEMS-04.pdf slajdy]&lt;br /&gt;
** Optoelektronika -- [http://techpedia.fel.cvut.cz/single/?objectId=84 študijný materiál] (techpedia.cz)&lt;br /&gt;
** [[SS CIM - Obrazová príloha#Optické princípy|Obrázky]]&lt;br /&gt;
** [https://ophysics.com/l8.html Rozklad svetla hranolom]&lt;br /&gt;
** [https://ophysics.com/l12.html Simulátor na zobrazovanie šošovkami]&lt;br /&gt;
** [http://webphysics.davidson.edu/Applets/optics4/default.html Applet zobrazovanie šošovkou a zrkadlom]&lt;br /&gt;
** [http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=37.0 Applet na lom svetla hranolom]&lt;br /&gt;
* &#039;&#039;&#039;7:&#039;&#039;&#039; 1. 4. 2025 &#039;&#039;&#039;Optické princípy II.&#039;&#039;&#039; + &#039;&#039;&#039;CCD a CMOS snímače.&#039;&#039;&#039;   - [http://senzor.robotika.sk/mems/prednasky/2022prednaskaMEMS-04.pdf slajdy]&lt;br /&gt;
** Courtney Peterson: [http://www.if.ufrgs.br/~marcia/ccd.pdf How It Works: The Charged-Coupled Device, or CCD].&lt;br /&gt;
** https://de.wikipedia.org/wiki/CCD-Sensor&lt;br /&gt;
** Raymond Sirí: &#039;&#039;[https://vimeo.com/103279733 CCD Animation Sequence]&#039;&#039; ([http://vimeo.com vimeo.com])&lt;br /&gt;
** http://www.specinst.com/What_Is_A_CCD.html&lt;br /&gt;
** Raymond Sirí: &#039;&#039;[https://vimeo.com/103279734 CMOS Animation Sequence]&#039;&#039; ([http://vimeo.com vimeo.com])&lt;br /&gt;
** Alain Van Ryckegham: &#039;&#039;[https://www.scientificamerican.com/article/how-do-bats-echolocate-an/ How do bats echolocate and how are they adapted to this activity?]]&#039;&#039;. Scientific American &lt;br /&gt;
** Denise Herzing: &#039;&#039;[https://blog.ted.com/the-language-of-dolphins-denise-herzing-at-ted2013/ The language of dolphins]]&#039;&#039; TED2013&lt;br /&gt;
* &#039;&#039;&#039;8:&#039;&#039;&#039; 15. 4. 2025 &#039;&#039;&#039;Farba&#039;&#039;&#039; a &#039;&#039;&#039;Proximitné snímače.&#039;&#039;&#039;&lt;br /&gt;
** Randall P. Munroe: &#039;&#039;[http://blog.xkcd.com/2010/05/03/color-survey-results/ Color Survey.]&#039;&#039; ([http://xkcd.com xkcd.com]) &lt;br /&gt;
** Teoretický úvod - [https://www.micro-epsilon.com/download/products/dat--Basics-of-colorimetry--en.pdf Basicsof colorimetry. Guide for industrial color measurement.]&lt;br /&gt;
** Príklad priemyselných snímačov farby - [https://www.micro-epsilon.com/download/products/cat--Micro-Epsilon--products--en.pdf uE Product broschure] (str. 26-27)&lt;br /&gt;
* &#039;&#039;&#039;9:&#039;&#039;&#039;  22. 4. 2022 Gabriel Vanko (EÚ SAV): &#039;&#039;&#039;MEMS technológie&#039;&#039;&#039; + &#039;&#039;&#039;IoT, MQTT a Node-Red&#039;&#039;&#039; (prednáška odpadla, náhrada on-line)&lt;br /&gt;
** Vanko, Gabriel, et al.: &#039;&#039;[https://www.researchgate.net/profile/Gabriel_Vanko/publication/258551587_Bulk_micromachining_of_SiC_substrate_for_MEMS_sensor_applications/links/00b7d528a1c02e7f32000000.pdf Bulk micromachining of SiC substrate for MEMS sensor applications]&#039;&#039;.&lt;br /&gt;
** Vanko, Gabriel, et al.:  &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2013/spie MEMS pressure sensor fabricated by advanced bulk micromachining techniques]&#039;&#039;.&lt;br /&gt;
** J. Zehetner, G. Vanko, P. Choleva,  J. Dzuba, I. Ryger, T. Lalinsky: &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2014/asdam2014jz Using of laser ablation technique in the processing technology of GaN/SiC based MEMS for extreme conditions]&#039;&#039;.&lt;br /&gt;
** Video: [https://youtu.be/bor0qLifjz4 Chip Manufacturing - How are Microchips made?] (Infineon)&lt;br /&gt;
* &#039;&#039;&#039;10:&#039;&#039;&#039;  29. 4. 2025 Kishor Das (Mahle s.r.o.): &#039;&#039;&#039;Automotive clima unit sensors&#039;&#039;&#039; (pozvaná prednáška)&lt;br /&gt;
** [https://youtu.be/woLy2kKk24M?si=XCCwjvctfQTLlRxL The MAHLE Air Conditioning Compressor Explained] (youtube video)&lt;br /&gt;
** [https://workshop-heroes.mahle.com/en/article/air-conditioning-compressor-the-key-driver Air conditioning compressor: the key driver] (white paper)&lt;br /&gt;
* &#039;&#039;&#039;11:&#039;&#039;&#039; 6. 5. 2025 &#039;&#039;&#039;Snímače polohy I + II.&#039;&#039;&#039; a &#039;&#039;&#039;Odporové snímače.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;12:&#039;&#039;&#039; 13. 5. 2025  &#039;&#039;&#039;Snímače mechanických veličín.&#039;&#039;&#039; MEMS inerciálne snímače / MEMS snímače tlaku. &lt;br /&gt;
&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Archív ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;mw-customtoggle-2016&amp;quot; style=&amp;quot;background:#e0e8ff&amp;quot;&amp;gt;Archív prednášok 2017-21: (kliknutím rozbaliť / zbaliť)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  id=&amp;quot;mw-customcollapsible-2016&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://senzor.robotika.sk/mems/prednasky Slajdy z prednášok]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1:&#039;&#039;&#039; 13. 2. 2017 &#039;&#039;&#039;Úvod. Vlastnosti senzorov&#039;&#039;&#039; (charakteristiky).&lt;br /&gt;
* &#039;&#039;&#039;2:&#039;&#039;&#039; 20. 2. 2017 &#039;&#039;&#039;Senzorický aparát človeka.&#039;&#039;&#039;&lt;br /&gt;
** Referát 1: Jozef Bernát: ľudské oko versus kamery&lt;br /&gt;
** Referát 2: David Abrhan: ľudské ucho versus mikrofóny&lt;br /&gt;
** Program BBC [http://www.bbc.co.uk/science/humanbody/tv/humansenses/ Human Senses] &lt;br /&gt;
** Jessica Morrison: [http://www.scientificamerican.com/article/human-nose-can-detect-1-trillion-odors/ Human Nose Can Detect 1 Trillion Odors]&lt;br /&gt;
** [http://www.ted.com/topics/senses Séria prednášok TEDx o zmysloch]&lt;br /&gt;
* &#039;&#039;&#039;3:&#039;&#039;&#039;  27. 2. 2017 Gabriel Vanko (EÚ SAV): &#039;&#039;&#039;MEMS technológie&#039;&#039;&#039;&lt;br /&gt;
** Vanko, Gabriel, et al.: &#039;&#039;[https://www.researchgate.net/profile/Gabriel_Vanko/publication/258551587_Bulk_micromachining_of_SiC_substrate_for_MEMS_sensor_applications/links/00b7d528a1c02e7f32000000.pdf Bulk micromachining of SiC substrate for MEMS sensor applications]&#039;&#039;.&lt;br /&gt;
** Vanko, Gabriel, et al.:  &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2013/spie MEMS pressure sensor fabricated by advanced bulk micromachining techniques]&#039;&#039;.&lt;br /&gt;
** J. Zehetner, G. Vanko, P. Choleva,  J. Dzuba, I. Ryger, T. Lalinsky: &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2014/asdam2014jz Using of laser ablation technique in the processing technology of GaN/SiC based MEMS for extreme conditions]&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;4:&#039;&#039;&#039; 6. 3. 2017  8:30 &#039;&#039;&#039;Exkurzia&#039;&#039;&#039; na EU SAV &amp;lt;BR&amp;gt; Uvidíte technologický postup pri výrobe MEMS senzorov. &amp;lt;BR&amp;gt; Stretneme sa o 8:30 pred vchodom do SAV na Dúbravskej ceste ([https://mapy.cz/s/1qXLg mapa]). Exkurzia potrvá cca do 11:00 a je povinná.&lt;br /&gt;
* &#039;&#039;&#039;5:&#039;&#039;&#039; &amp;amp;nbsp;13. 3. 2017  &#039;&#039;&#039;Optické princípy.&#039;&#039;&#039;  Optická cesta. &lt;br /&gt;
** Optoelektronika -- [http://www.kme.elf.stuba.sk/kme/buxus/docs/predmety/OEaLT/ prednášky a cvičenia z predmetu OEaLT] (stuba.sk)&lt;br /&gt;
** [[SS CIM - Obrazová príloha#Optické princípy|Obrázky]]&lt;br /&gt;
** [http://webphysics.davidson.edu/Applets/optics4/default.html Applet zobrazovanie šošovkou a zrkadlom]&lt;br /&gt;
** [http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=37.0 Applet na lom svetla hranolom]&lt;br /&gt;
* &#039;&#039;&#039;6:&#039;&#039;&#039; 20. 3. 2017  &#039;&#039;&#039;Proximitné optické snímače.&#039;&#039;&#039;  &#039;&#039;&#039;CCD snímače.&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;7:&#039;&#039;&#039; 27. 3. 2017 &#039;&#039;&#039;CMOS snímače.&#039;&#039;&#039; / &#039;&#039;&#039;Čiarové a QR kódy&#039;&#039;&#039; / &#039;&#039;&#039;Senzory farieb&#039;&#039;&#039;&lt;br /&gt;
** http://legacy.jyi.org/volumes/volume3/issue1/features/peterson.html&lt;br /&gt;
** https://de.wikipedia.org/wiki/CCD-Sensor&lt;br /&gt;
** Raymond Sirí: &#039;&#039;[https://vimeo.com/103279733 CCD Animation Sequence]&#039;&#039; ([http://vimeo.com vimeo.com])&lt;br /&gt;
** http://www.specinst.com/What_Is_A_CCD.html&lt;br /&gt;
** Raymond Sirí: &#039;&#039;[https://vimeo.com/103279734 CMOS Animation Sequence]&#039;&#039; ([http://vimeo.com vimeo.com])&lt;br /&gt;
**&lt;br /&gt;
** Beau Lotto: &#039;&#039;[http://www.ted.com/talks/lang/sk/beau_lotto_optical_illusions_show_how_we_see.html Optical illusions show how we see]&#039;&#039;.  Video on &#039;&#039;&#039;[http://ted.com TED]&#039;&#039;&#039;.com&lt;br /&gt;
** Edward H. Adelson: &#039;&#039;[http://persci.mit.edu/pub_pdfs/gazzan.pdf Lightness Perception and Lightness Illusions]&#039;&#039; &#039;&#039;&#039;[http://web.mit.edu/persci/gaz/# + demonstrations]&#039;&#039;&#039; (mit.edu)&lt;br /&gt;
** Randall P. Munroe: &#039;&#039;[http://blog.xkcd.com/2010/05/03/color-survey-results/ Color Survey.]&#039;&#039; ([http://xkcd.com xkcd.com])&lt;br /&gt;
* &#039;&#039;&#039;8:&#039;&#039;&#039; 3. 4. 2017 &#039;&#039;&#039;Akustické&#039;&#039;&#039; princípy snímačov&lt;br /&gt;
* &#039;&#039;&#039;9:&#039;&#039;&#039; 10. 4. 2017 Snímače polohy &lt;br /&gt;
** http://www.hamamatsu.com/jp/en/community/optical_sensors/articles/measuring_distance_with_light/index.html&lt;br /&gt;
* &#039;&#039;&#039;--&#039;&#039;&#039; 28. 3. 2016  &#039;&#039;Veľkonočný pondelok&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;7:&#039;&#039;&#039;  4. 4. 2016  9:00 Gabriel Vanko (EÚ SAV): &#039;&#039;&#039;MEMS technológie&#039;&#039;&#039;&lt;br /&gt;
** Vanko, Gabriel, et al.: &#039;&#039;[https://www.researchgate.net/profile/Gabriel_Vanko/publication/258551587_Bulk_micromachining_of_SiC_substrate_for_MEMS_sensor_applications/links/00b7d528a1c02e7f32000000.pdf Bulk micromachining of SiC substrate for MEMS sensor applications]&#039;&#039;.&lt;br /&gt;
** Vanko, Gabriel, et al.:  &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2013/spie MEMS pressure sensor fabricated by advanced bulk micromachining techniques]&#039;&#039;.&lt;br /&gt;
** J. Zehetner, G. Vanko, P. Choleva,  J. Dzuba, I. Ryger, T. Lalinsky: &#039;&#039;[http://www.fhv.at/media/pdf/forschung/mikrotechnik/publikationen/2014/asdam2014jz Using of laser ablation technique in the processing technology of GaN/SiC based MEMS for extreme conditions]&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;8:&#039;&#039;&#039; 11. 4. 2016  7:15 Exkurzia v &#039;&#039;&#039;[http://me-inspection.sk/ ME-Inspection]&#039;&#039;&#039; &amp;lt;BR&amp;gt; Uvidíte [http://me-inspection.sk/?q=node/152  priemyselné meracie systémy] z portfólia firmy. &amp;lt;BR&amp;gt; Stretneme sa o 7:00 na električkovej zastávke Botanická záhrada alebo o 7:15 pred sídlom firmy na Drobného 25 A (Dúbravka). Exkurzia potrvá do 9:00 a je povinná.  &amp;lt;BR&amp;gt; Môžete si vziať vlastný predmet hr. max. 50 mm na zmeranie v profilometri. So sebou pero, zošit a USB kľúč na namerané data. &amp;lt;BR&amp;gt;&lt;br /&gt;
** &amp;lt;span style=&amp;quot;background:Cornsilk&amp;quot;&amp;gt; [http://senzor.robotika.sk/mems/MEIdata.zip Namerané data] - tieto dáta treba spracovať a nakresliť nameraný profil. Obrázok odovzdáte na najbližšom cvičení. &lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;8+:&#039;&#039;&#039;12. 4. 2016 o 11:00 Prednáška [http://www.iqrf.org/ IQRF o bezdrôtových moduloch] &lt;br /&gt;
* &#039;&#039;&#039;9:&#039;&#039;&#039; 18. 4. 2016 &#039;&#039;&#039;Snímače polohy&#039;&#039;&#039;  &lt;br /&gt;
* &#039;&#039;&#039;10:&#039;&#039;&#039; 25. 4. 2016 &#039;&#039;&#039;Snímače polohy II.&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;11:&#039;&#039;&#039; 2. 5. 2016  &#039;&#039;&#039;Odporové snímače.&#039;&#039;&#039; Analýza tenzometrického mostíka / MEMS snímače tlaku&lt;br /&gt;
* &#039;&#039;&#039;12:&#039;&#039;&#039; 9. 5. 2016  &#039;&#039;&#039;Snímače mechanických veličín.&#039;&#039;&#039; MEMS inerciálne snímače&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prednášky LS 2015&#039;&#039;&#039; - archív: [http://ap.urpi.fei.stuba.sk/sscim/prednasky Slajdy z prednášok]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt; &amp;lt;!-- rozbalovacia / zbalovacia cast --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Cvičenia&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Cvičenia sú vo štvrtok  od 17:00 v miestnosti D-208 a sú povinné. Dištanční študenti majú cvičenie každý nepárny týždeň od 14:00 v D-208.&lt;br /&gt;
&lt;br /&gt;
Cvičiaci: Ing. Martin SUPEK&lt;br /&gt;
&lt;br /&gt;
* Cvičenie 1: [[MEMS Odporové snímače‎‎|Odporové snímače a vyhodnotenie merania podľa normy]].&lt;br /&gt;
* Cvičenie 2: [[MEMS meranie s A/D prevodníkom]].&lt;br /&gt;
* Cvičenie 3: [[MEMS Linearizácia prevodovej charakteristiky|Linearizácia odporového snímača polohy ]].&lt;br /&gt;
* Cvičenie 4: [[Odporové snímače sily FSR]].&lt;br /&gt;
* Cvičenie 5: [[MEMS Cvičenie 8|Ultrazvukové senzory]]. &lt;br /&gt;
* Cvičenie 6: [[Akcelerometre]]&lt;br /&gt;
* Cvičenie 7: [[MEMS cvičenie 6|Zbernica i2c]] -- [[Zbernica i2c: nástroje II.|Riešenie]] a [[Protokol MQTT]] &lt;br /&gt;
* Cvičenie 8: [[Detekcia farieb]] - rozpoznávanie farieb kamerou.&lt;br /&gt;
* Cvičenie 9: [[Rozpoznávanie čiarových kódov]] - pokročilejšie spracovanie obrazu.&lt;br /&gt;
* Cvičenie 10: [[Laserové senzory]]&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt; 	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;FONT Color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
* Cvičenie 11: [[Senzory mechanických veličín]] -- senzory v mobile II.&lt;br /&gt;
* Cvičenie 12: [[Meranie s GPS]]&lt;br /&gt;
* Cvičenie 13: [[Thingsboard.io]] a [[Node-Red]] + Semestrálny projekt&lt;br /&gt;
* Cvičenie 14: [[Senzory v mobile]] časť I.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt; 	&lt;br /&gt;
&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT Color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;mw-customtoggle-C2016&amp;quot; style=&amp;quot;background:#e0e8ff&amp;quot;&amp;gt;Archív cvičení: (kliknutím rozbaliť / zbaliť)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  id=&amp;quot;mw-customcollapsible-C2016&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2017, 2018&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 13. 2. Cvičenie 1: [[MEMS cvičenie 1|Úvod (BOZP) a vyhodnotenie merania podľa normy]].&lt;br /&gt;
* 20. 2. Cvičenie 2: [[MEMS cvičenie 2|Linearizácia odporového snímača polohy]].&lt;br /&gt;
* 27. 2. Cvičenie 3: [[MEMS cvičenie 3|Lokálne zobrazenie meranej veličiny (LED a LCD)]].&lt;br /&gt;
* &amp;amp;nbsp;&amp;amp;nbsp;6. 3. Cvičenie 4: &#039;&#039;&#039;Exkurzia&#039;&#039;&#039; na EU SAV&lt;br /&gt;
&amp;lt;!-- &amp;lt;BR&amp;gt; Uvidíte technologický postup pri výrobe MEMS senzorov. &amp;lt;BR&amp;gt; Stretneme sa o 8:30 pred vchodom do SAV na Dúbravskej ceste ([https://mapy.cz/s/1qXLg mapa]). Exkurzia potrvá cca do 11:00 a je povinná.--&amp;gt;&lt;br /&gt;
* 13. 3. Cvičenie 5: Riadkový CCS snímač [[TSL1401 Line Sensor]].&lt;br /&gt;
* 20. 3. Cvičenie 6: Riadkový CCS snímač [[TSL1401 Line Sensor]] - dokončenie&lt;br /&gt;
* 27. 3. Cvičenie 7: [[MEMS cvičenie 4|Senzory farby]]: TCS230 a ColorPAL + rozpoznávanie farieb.&lt;br /&gt;
* &amp;amp;nbsp;3. 4. Cvičenie 8: [[MEMS Cvičenie 8|Ultrazvukové senzory]].&lt;br /&gt;
* 10. 4. Cvičenie 9: [[MEMS Cvičenie 9|Triangulačný profilometer MicroEpsilon]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
* 14. 4. Cvičenie 4: &#039;&#039;&#039;Exkurzia&#039;&#039;&#039; na EU SAV&lt;br /&gt;
&amp;lt;BR&amp;gt; Uvidíte technologický postup pri výrobe MEMS senzorov. &amp;lt;BR&amp;gt; Stretneme sa o 8:30 pred vchodom do SAV na Dúbravskej ceste ([https://mapy.cz/s/1qXLg mapa]). Exkurzia potrvá cca do 11:00 a je povinná.&lt;br /&gt;
* 21. 4. Cvičenie 9: [[MEMS Cvičenie 9|Triangulačný profilometer MicroEpsilon]].&lt;br /&gt;
* 28. 4. Cvičenie 10: [[MEMS cvičenie 6|Zbernica i2c]] -- [[Zbernica i2c: nástroje II.|Riešenie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2016&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 18. 2. &#039;&#039;cvičenie odpadlo&#039;&#039; - štrajk.&lt;br /&gt;
* 25. 2. Cvičenie 1: [[MEMS cvičenie 1|Úvod (BOZP) a odporový snímač polohy]].&lt;br /&gt;
* 29. 2. Cvičenie 2: [[MEMS cvičenie 2|Linearizácia odporového snímača polohy]].&lt;br /&gt;
* &amp;amp;nbsp;7. 3. Cvičenie 3: [[MEMS cvičenie 3|Lokálne zobrazenie meranej veličiny (LED a LCD)]].&lt;br /&gt;
* 14. 3. Cvičenie 4: [[MEMS cvičenie 4|Senzory farby]]: TCS230 a ColorPAL + rozpoznávanie farieb.&lt;br /&gt;
* 21. 3. Cvičenie 5: Riadkový CCS snímač [[TSL1401 Line Sensor]].&lt;br /&gt;
* &amp;amp;nbsp;4. 4. Cvičenie 6: [[MEMS cvičenie 6|Zbernica i2c]].&lt;br /&gt;
* 11. 4. Cvičenie 7: Rozdelenie snímačov na [[MEMS projekty|semestrálny projekt]]. &lt;br /&gt;
* 18. 4. Cvičenie 8: Samostatná práca na projekte&lt;br /&gt;
* 25. 4. Cvičenie 9: samostatná práca na projekte&lt;br /&gt;
* &amp;amp;nbsp;2. 5. Cvičenie 10: exkurzia SAV&lt;br /&gt;
* &amp;amp;nbsp;9. 5. Cvičenie 11: samostatná práca na projekte&lt;br /&gt;
* 16. 5. Cvičenie 12: prezentácia výsledkov a obhajoba [[MEMS projekty|projektu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ToDo:&#039;&#039;&#039; Ardugraph alebo IoT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Archív návodov na cvičenia&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Media:0BOZP.pdf|Bezpečnosť práce]]&lt;br /&gt;
* [[Médiá:magnvyp.pdf|Výpočty magn. obvodov]]                               &lt;br /&gt;
* [[Médiá:Fotovyp.pdf|Výpočty fotoelektrických obvodov]]&lt;br /&gt;
* [[Médiá:Kapacit rez.pdf|Výpočet kapacit snímača rez]]  &lt;br /&gt;
* [[Médiá:Rez.pdf|Snímanie otáčok]] - LAB                         &lt;br /&gt;
* [[Médiá:Optické.pdf|Optické snímače]] - LAB                        &lt;br /&gt;
* [[Médiá:Piezo.pdf|Ultrazvuk, piezokeramika]] - LAB            &lt;br /&gt;
* [[Médiá:Iskra.pdf|Ultrazvuk, elektr. iskra]]  - LAB&lt;br /&gt;
* [[Médiá:LVDT.pdf|Transf. snímač polohy]]  - LAB&lt;br /&gt;
* [[Médiá:Kapacitný.pdf|Kapacitný snímač polohy]]  - LAB&lt;br /&gt;
* [[Médiá:Proxim.pdf|Proximitné snímače]]  - LAB&lt;br /&gt;
* Operačné zosilňovače - LAB&lt;br /&gt;
** [[Médiá:OZ.pdf|LM324]]&lt;br /&gt;
** [[Médiá:OZ1.pdf|MAA741]]&lt;br /&gt;
** [[Médiá:OZ2.pdf|MAA748]]&lt;br /&gt;
** [[Médiá:OZ3.pdf|MAA748 nový]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:TEMY1.doc|Témy semestr. zadaní]]&lt;br /&gt;
* [[Media:TEMY2.doc|Úprava referátov]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt; &amp;lt;!-- rozbalovacia / zbalovacia cast --&amp;gt;&lt;br /&gt;
&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Semestrálne zadania&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Praktický projekt ===&lt;br /&gt;
&lt;br /&gt;
V rámci cvičení budete pracovať individuálne s vybranými senzormi, ktoré pripojíte k mikropočítaču, &lt;br /&gt;
navrhnete ukážkový program a všetko zdokumentujete. Podrobnejšie viď &#039;&#039;&#039;[[MEMS projekty]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Domáce úlohy&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Programovacie domáce úlohy riešte priamo v prostredí [https://onlinegdb.com/classroom/invite/uJ64eMgmL On-line GDB] &amp;lt;!-- [https://app.codingrooms.com Coding Rooms]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 1&#039;&#039;&#039; Lineárna aproximácia&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 2&#039;&#039;&#039; Práca s reťazcami&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 3&#039;&#039;&#039; Trim whitespaces&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 4&#039;&#039;&#039; Farebná vzdialenosť&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 5&#039;&#039;&#039; Line distance&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 6&#039;&#039;&#039; Linear array&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 5&#039;&#039;&#039; Meranie v ME Inspection&amp;lt;BR&amp;gt;Na exkurzii sme zmerali 5ks kociek Lego DUPLO. Stiahnite si [https://senzor.robotika.sk/misa/MEIdata2019.zip namerané data] a zistite, ktorá z kociek nevyhovuje rozmermi. Data boli získané z dvojice laserových snímačov vzdialenosti MicroEpsilon umiestnených voči sebe. Štruktúra dát je nasledovná: prvý stĺpec - horný senzor, druhý stĺpec - spodný senzor, tretí stĺpec - hodnota z IRC snímača, poloha. Data sú oddelené bodkočiarkou. Dáta sú v surovej podobe, nekalibrované. Ako pomôcka môže poslúžiť [http://www.bartneck.de/wp-content/uploads/2019/03/LEGO-Brick-Dimensions-Measurements.pdf rozmerový nákres] bežnej Lego kocky spolu s informáciou, že Lego DUPLO má rozmery dvojnásobné.&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 4&#039;&#039;&#039; https://repl.it/teacher/assignments/2991856&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 3&#039;&#039;&#039; https://repl.it/teacher/assignments/2880924&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 2&#039;&#039;&#039; https://repl.it/teacher/assignments/4751118&lt;br /&gt;
* &#039;&#039;&#039;Domáca úloha č. 3&#039;&#039;&#039; [https://replit.com/team/MISA2020/03-Line-Distance Vzdialenosť čiarok]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Podmienky absolvovania predmetu&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bodovanie v LS 2025&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* práca na cvičeniach 25%&lt;br /&gt;
* domáce úlohy 5%&lt;br /&gt;
* individuálny projekt 20%&lt;br /&gt;
* záverečná písomná skúška 50%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*  5 b. Prezentácie na prednáške (nutná podmienka k zápočtu)&lt;br /&gt;
* 20 b. Za prácu na cvičeniach (aktivita, referáty) &lt;br /&gt;
*  5 b. Programovacie domáce úlohy&lt;br /&gt;
* 15 b. Individuálny semestrálny projekt &lt;br /&gt;
* 40 b. Skúška (písomná)&lt;br /&gt;
&lt;br /&gt;
* 24 b. Merania a správy z merania (nutné všetky)&lt;br /&gt;
* 15 b. Individuálny semestrálny projekt &lt;br /&gt;
*  6 b. Programovacie domáce úlohy&lt;br /&gt;
*  5 b. Prezentácie na prednáške (nutná podmienka k zápočtu)&lt;br /&gt;
* 50 b. Skúška (písomná)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podmienky absolvovania predmetu:   &lt;br /&gt;
&lt;br /&gt;
* z každej časti nutné získať min 50% bodov,&lt;br /&gt;
* vypracovanie individuálneho projektu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &#039;&#039;&#039;[https://docs.google.com/spreadsheets/d/1yQtk1kp0b7bGu1Mk62TOcS6K863hVb6vp5PTdW5S2xM/edit?usp=sharing Aktuálny stav bodov]&#039;&#039;&#039;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Literatúra&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
* Jacob Fraden: &#039;&#039;[https://link.springer.com/book/10.1007/978-1-4419-6466-3 Handbook of Modern Sensors.]&#039;&#039; 4th ed. Springer, New York, 2010. Dostupné on-line: &amp;lt;[https://link.springer.com/book/10.1007/978-1-4419-6466-3 Springer (pre študentov STU)]&amp;gt; - knizka sa da stiahnut zo STUBA adries bezplatne, pouzite VPN STU alebo &lt;br /&gt;
prípadne &amp;lt;[http://elektron.pol.lublin.pl/users/elekp/MNEQ_english/Fraden_Handbook_of_modern_sensors_4ed.pdf elektron.pol.lublin.pl]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Sabrie Soloman: &#039;&#039;[http://www.amazon.com/Sensors-Control-Systems-Manufacturing-ebook/dp/B002XKYATW Sensors and Control Systems in Manufacturing.]&#039;&#039; 2nd ed. McGraw Hill, New York, 2010.&lt;br /&gt;
* H. R. Everett: &#039;&#039;[http://www.amazon.com/Sensors-Mobile-Robots-H-R-Everett/dp/1568810482 Sensors for Mobile Robots. Theory and Application.]&#039;&#039; A K Peters, Natick, 1995.&lt;br /&gt;
* Ján Šturcel: &#039;&#039;Prvky riadiacich systémov&#039;&#039;, časť Meranie neelektrických veličín. STU Bratislava 2004, ISBN 80-227-2120-4&lt;br /&gt;
* Ján Šturcel: &#039;&#039;Snímače a prevodníky&#039;&#039;. STU Bratislava, 2002, ISBN 80-227-1712-6&lt;br /&gt;
* Miroslav Toman: &#039;&#039;Senzory v automatizácii.&#039;&#039; STU Bratislava 1999. 127s&lt;br /&gt;
* František Duchoň: &#039;&#039;Snímače v mobilnej robotike.&#039;&#039; STU Bratislava, 2012. 97s.&lt;br /&gt;
&lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sscim/prednasky Slajdy z prednášok]&lt;br /&gt;
* Rozpracované skriptá [http://ap.urpi.fei.stuba.sk/sscim/prednasky/skripta Toman: Senzory v CIM]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;== Prezentácie ==&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V roku 2019 študenti mali za úlohu spraviť aj jednu prezentáciu.&lt;br /&gt;
&lt;br /&gt;
Archív zadaní z predošlých rokov: &amp;lt;span class=&amp;quot;mw-customtoggle-P2016&amp;quot; style=&amp;quot;background:#e0e8ff&amp;quot;&amp;gt;(kliknutím rozbaliť / zbaliť)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  id=&amp;quot;mw-customcollapsible-P2016&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vybranú tému spracovať písomne v rozsahu min. 3 strán a odprezentovať v rámci prednášok &lt;br /&gt;
cca 10 minút. Ak je pod témou uvedená literatúra, znamená&lt;br /&gt;
to, že ju &#039;&#039;musíte&#039;&#039; použiť. Okrem toho &#039;&#039;môžete&#039;&#039; použiť aj ďalšiu, doplňujúcu. Niektoré články&lt;br /&gt;
sú prístupné len v rámci fakultných počítačov, stiahnite si ich v škole. &lt;br /&gt;
&lt;br /&gt;
Témy si vyberajte priebežne, aby sme si stihli vypočuť každého a aby témy nadväzovali&lt;br /&gt;
na prednášanú látku. Témy budú postupne pribúdať. Ak si vyberiete, oznámte to prednášajúcemu, &lt;br /&gt;
aby nevznikli kolízie. &lt;br /&gt;
&lt;br /&gt;
Vítané sú aj &#039;&#039;vlastné námety&#039;&#039; súvisiace s témou.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Poznámky k prezentácii:&#039;&#039;&#039; Prezentácia nemá obsahovať veci z prednášky, má ju doplniť o nové informácie. Dodržte prosím časový limit 5-7 minút, nečítajte ale vysvetľujte. Slajd typu celá strana plná textu je zle. Nepoužívajte cudzie slová a pojmy, ktorým nerozumiete len aby to lepšie vyzeralo. Dodržte a sledujte časovanie. Máte v prezentácii obrázky? Ak nie, je vôbec potrebná? Musíte byť schopní vysvetliť o čom máte referát aj bez slajdov.&lt;br /&gt;
&lt;br /&gt;
Hodnotí sa zvlášť prezentácia (vystupovanie, koncepcia, slajdy, ukážky - 5 b) a zvlášť písomné spracovanie (úplnosť informácie, použité zdroje a ich citovanie, úprava -- 5 b).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zadania pre LS 2019&#039;&#039;&#039; -- &#039;&#039;&#039;Voľné témy:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Lubomir Halac: Biometrické snímače - snímač &#039;&#039;&#039;tepovej frekvencie&#039;&#039;&#039;&lt;br /&gt;
** Toshiyo Tamura, Yuka Maeda, Masaki Sekine  and Masaki Yoshida: &#039;&#039;[http://www.mdpi.com/2079-9292/3/2/282/htmWearable Photoplethysmographic Sensors—Past and Present]&#039;&#039;. Electronics 2014, 3(2), 282-302;&lt;br /&gt;
* Furmánek: &#039;&#039;&#039;Umelá koža&#039;&#039;&#039; - artificial skin&lt;br /&gt;
** Ravinder S. Dahiya, Giorgio Metta, Maurizio Valle and Giulio Sandini: &#039;&#039;[http://www.robotcub.org/misc/papers/10_Dahiya_etal.pdf Tactile Sensing—From Humans to Humanoids].&#039;&#039; IEEE Transactions on Robotics, vol. 26, no. 1, 2010.&lt;br /&gt;
** Maiolino, P.; Maggiali, M.; Cannata, G.; Metta, G. &amp;amp; Natale, L. (2013): &#039;&#039;[https://pdfs.semanticscholar.org/48a4/ca88bca5a83af20c0c36e14d6ab9112d40b0.pdf A flexible and robust large scale capacitive tactile system for robots]&#039;&#039;, Sensors Journal, IEEE 13(10), 3910--3917.&lt;br /&gt;
** Matěj Hoffmann: &#039;&#039;[http://www.robotika.sk/seminar/2016/robotikask1.pdf Jak si humanoidní robot iCub s umělou kůží osahává svět: od inspirace v biologii k adaptivním a bezpečným strojům]. ([https://youtu.be/zmUIQes50fA video z prednášky])&lt;br /&gt;
* Dobrovič: &#039;&#039;&#039;Magneticko-induktívne&#039;&#039;&#039; senzory&lt;br /&gt;
** Steve Taranovich: &#039;&#039;[http://www.edn.com/electronics-products/electronic-product-reviews/other/4443330/2/What-are-magneto-inductive-MEMS-- What are magneto-inductive MEMS?]&#039;&#039; EDN Magazine, January 29, 2017.&lt;br /&gt;
** Andrew Leuzinger and Andrew Taylor: &#039;&#039;[http://www.precisionnav.com/wp-content/uploads/White-Paper-PNI-Magneto-Inductive-Technology-Overview-r3.pdf Magneto-Inductive Technology Overview]&#039;&#039;, PNI Corp., February 2010.&lt;br /&gt;
**  Slawomir Tumanski: &#039;&#039;[http://www.tumanski.x.pl/coil.pdf Induction coil sensors – a review]&#039;&#039;. Measurement Science and Technology, 18 (2007).&lt;br /&gt;
* Z.Pucovski: Snímače &#039;&#039;&#039;tlaku&#039;&#039;&#039; v pneumatikách&lt;br /&gt;
**  J. Siddons, A. Derbyshire, (1997) &#039;&#039;[http://www.emeraldinsight.com/doi/full/10.1108/02602289710170294 Tyre pressure measurement using smart low power microsystems]&#039;&#039;, Sensor Review, Vol. 17 Issue: 2, pp.126-130, doi: 10.1108/02602289710170294 &lt;br /&gt;
** Tian, B.; Zhao, Y.; Jiang, Z.; Zhang, L.; Liao, N.; Liu, Y.; Meng, C. &#039;&#039;[http://www.mdpi.com/1424-8220/9/3/1382 Fabrication and Structural Design of Micro Pressure Sensors for Tire Pressure Measurement Systems (TPMS)]&#039;&#039;. Sensors 2009, 9, 1382-1393. &lt;br /&gt;
** M. Narducci, L. Yu-Chia, W. Fang and J. Tsai: &#039;&#039;[http://iopscience.iop.org/article/10.1088/0960-1317/23/5/055007/meta CMOS MEMS capacitive absolute pressure sensor]&#039;&#039;. Journal of Micromechanics and Microengineering, Volume 23, Number 5 &lt;br /&gt;
* 9. 4. Matej Kubala: Time of Flight kamery (&#039;&#039;&#039;Kinect&#039;&#039;&#039;)&lt;br /&gt;
** Miles Hansard, Seungkyu Lee, Ouk Choi, Radu Horaud: &#039;&#039;[https://hal.inria.fr/hal-00725654/PDF/TOF.pdf Time of Flight Cameras: Principles, Methods, and Applications]]&#039;&#039;. Springer, pp.95, 2012, SpringerBriefs in Computer Science, ISBN 978-1-4471-4658-2.&lt;br /&gt;
** Prezentacia: http://perception.inrialpes.fr/~Horaud/Courses/pdf/Horaud_3DS_3.pdf&lt;br /&gt;
** Damien Lefloch, Rahul Nair, Frank Lenzen, Henrik Schafer, Lee Streeter, Michael J. Cree, Reinhard Koch and Andreas Kolb: &#039;&#039;[http://www.franklenzen.de/pdf/lefloch2013tof_foundations.pdf Technical Foundation and Calibration Methods for Time-of-Flight Cameras]&#039;&#039;. &lt;br /&gt;
** Larry Li: &#039;&#039;[http://www-cs.ccny.cuny.edu/~wolberg/capstone/kinect/ToFBasicsTI14.pdf Time-of-Flight Camera –  An Introduction]&#039;&#039;. Texas Instruments.&lt;br /&gt;
** Prezentacia: https://pdfs.semanticscholar.org/c733/b6989e7670fd84ca903eb5239aac0351bfc3.pdf&lt;br /&gt;
* Moravčík: Magnetické snímače GMR&lt;br /&gt;
** Mitra Djamal,  Ramli: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S1877705812012684 Development of Sensors Based on Giant Magnetoresistance Material]&#039;&#039;, Procedia Engineering, Volume 32, 2012.&lt;br /&gt;
** C. Giebeler, D.J. Adelerhof, A.E.T. Kuiper, J.B.A. van Zon, D. Oelgeschläger, G. Schulz: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S0924424701005106 Robust GMR sensors for angle detection and rotation speed sensing]&#039;&#039;, Sensors and Actuators A: Physical, Volume 91, Issues 1–2, 2001.&lt;br /&gt;
* 2. 4. - 8. tyzden - Martin KUDRI: &#039;&#039;&#039;Magnetické snímače&#039;&#039;&#039; polohy&lt;br /&gt;
** HILIGSMANN, Vincent; RIENDEAU, Peter. &#039;&#039;[https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1426377 Monolithic 360 degrees rotary position sensor IC]&#039;&#039;. In: SENSORS, 2004 IEEE. IEEE, 2004.&lt;br /&gt;
** C.P.O Treutler: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S0924424701006215 Magnetic sensors for automotive applications]&#039;&#039;, Sensors and Actuators A: Physical, Volume 91, Issues 1–2, 2001.&lt;br /&gt;
** Ausserlechner Udo, Motz Mario, Holliber Michael:  &#039;&#039;[https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1426198 Drift of magnetic sensitivity of smart Hall sensorsdue to moisture absorbed by the IC-package]&#039;&#039;. In: SENSORS, 2004 IEEE. IEEE, 2004.&lt;br /&gt;
* Hutár: Snímače &#039;&#039;&#039;momentu&#039;&#039;&#039; (torque)&lt;br /&gt;
** FLEMING, William J.: &#039;&#039;[https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1623003 Automotive torque measurement: A summary of seven different methods]&#039;&#039;. In: 32nd IEEE Vehicular Technology Conference. IEEE, 1982. p. 71-78.&lt;br /&gt;
** David R. Myers, Matthew W. Chan, Gabriele Vigevani, Brian D. Sosnowchik, Robert G. Azevedo, Anand V. Jog, Liwei Lin, Albert P. Pisano: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S0924424713004731  Torque measurements of an automotive halfshaft using micro double-ended tuning fork strain gauges]&#039;&#039;, Sensors and Actuators A: Physical, Volume 204, 2013.&lt;br /&gt;
** ANGLEVIEL, Didier; FRACHON, Didier; MASSON, Gérald. &#039;&#039;[http://www.movingmagnet.com/medias/download/2006-01-0939.pdf Development of a contactless hall effect torque sensor for electric power steering]&#039;&#039;. SAE Technical Paper, 2006. &lt;br /&gt;
** Yongjun Sun, Yiwei Liu, Tian Zou, Minghe Jin, Hong Liu: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S0263224115000238 Design and optimization of a novel six-axis force/torque sensor for space robot]&#039;&#039;, Measurement, Volume 65, 2015. &lt;br /&gt;
* Jančík: Mikrovlnný radar ([https://www.elecrow.com/crowtail-microwave-sensor-p-1636.html product page])&lt;br /&gt;
** L. Roselli et al., &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=1610375&amp;amp;isnumber=33800 A cost driven 24GHz Doppler radar sensor development for automotive applications]&#039;&#039;, 2005 European Microwave Conference, Paris, 2005, pp. 4 pp.-2062.&lt;br /&gt;
** H. Ruser, V. Mágori: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S0924424797017767 Highly sensitive motion detection with a combined microwave-ultrasonic sensor]&#039;&#039;, Sensors and Actuators A: Physical, Volume 67, Issues 1–3, 1998.&lt;br /&gt;
** H. Ruser and V. Magori, &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=762195&amp;amp;isnumber=16493 Fire detection with a combined ultrasonic-microwave Doppler sensor]&#039;&#039;, 1998 IEEE Ultrasonics Symposium. Proceedings (Cat. No. 98CH36102), Sendai, Japan, 1998, pp. 489-492 vol.1.&lt;br /&gt;
** J. Lin and C. Li, &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=4554533&amp;amp;isnumber=4554523 Wireless Non-Contact Detection of Heartbeat and Respiration Using Low-Power Microwave Radar Sensor]&#039;&#039;, 2007 Asia-Pacific Microwave Conference, Bangkok, 2007, pp. 1-4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT Color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Prezentácie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LS 2018&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Peter Melek: &#039;&#039;&#039;Biometrické snímače&#039;&#039;&#039; - prehľad&lt;br /&gt;
** Jain, Anil K., Arun Ross, and Salil Prabhakar. &#039;&#039;[http://www.cse.msu.edu/~rossarun/BiometricsTextBook/Papers/Introduction/JainRossPrabhakar_BiometricIntro_CSVT04.pdf An introduction to biometric recognition.]&#039;&#039; IEEE Transactions on circuits and systems for video technology 14.1 (2004): 4-20.&lt;br /&gt;
** Uludag, Umut, et al. &#039;&#039;[https://www.researchgate.net/profile/Umut_Uludag/publication/2986306_Biometric_cryptosystems_Issues_and_challenges/links/0deec529821d7612fd000000.pdf Biometric cryptosystems: issues and challenges.]&#039;&#039; Proceedings of the IEEE 92.6 (2004): 948-960.&lt;br /&gt;
* Balász Szebo: Biometrické snímače - &#039;&#039;&#039;odtlačky prstov&#039;&#039;&#039;&lt;br /&gt;
** Van der Putte, Ton, and Jeroen Keuning: &#039;&#039;[http://link.springer.com/chapter/10.1007/978-0-387-35528-3_17 Biometrical fingerprint recognition: don’t get your fingers burned.]&#039;&#039; Smart Card Research and Advanced Applications. Springer US, 2000. 289-303.&lt;br /&gt;
** Uludag, Umut, and Anil K. Jain. &#039;&#039;[http://ai2-s2-pdfs.s3.amazonaws.com/8fb8/4fca5b5537442bd369b0fc3369ceb5c5049a.pdf  Attacks on biometric systems: a case study in fingerprints.]&#039;&#039; Proceedings of SPIE. Vol. 5306. 2004.&lt;br /&gt;
* Ján Šedivý: &#039;&#039;&#039;Piezoelektrické&#039;&#039; MEMS snímače&lt;br /&gt;
** Tadigadapa, S., and K. Mateti. &#039;&#039;[http://iopscience.iop.org/article/10.1088/0957-0233/20/9/092001/pdf Piezoelectric MEMS sensors: state-of-the-art and perspectives].&#039;&#039; Measurement Science and technology 20.9 (2009): 092001.&lt;br /&gt;
* Martin Herceg: &#039;&#039;&#039;RFID&#039;&#039;&#039; technológia označovania výrobkov&lt;br /&gt;
** C.M. Roberts: &#039;&#039;[http://www.sciencedirect.com/science/article/pii/S016740480500204X/pdfft?md5=fad6aa365ab3ca0cf8c0c9c1a6596290&amp;amp;pid=1-s2.0-S016740480500204X-main.pdf Radio frequency identification]&#039;&#039;. (RFID)Computers &amp;amp; Security, Volume 25, Issue 1, February 2006, Pages 18–264&lt;br /&gt;
** N.C. Wu, M.A. Nystrom, T.R. Lin, H.C. Yu: &#039;&#039;[http://ac.els-cdn.com/S016649720500146X/1-s2.0-S016649720500146X-main.pdf?_tid=e7a29aea-12db-11e7-9849-00000aab0f26&amp;amp;acdnat=1490612315_3983c88c329a9fe76aed9cad0ad11797 Challenges to global RFID adoption]&#039;&#039;. Technovation Volume 26, Issue 12, December 2006, Pages 1317–1323&lt;br /&gt;
** K.V.S. Rao &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=833700 An overview of backscattered radio frequency identification system (RFID)].&#039;&#039;&lt;br /&gt;
* Užík: Time of Flight kamery (&#039;&#039;&#039;Kinect&#039;&#039;&#039;)&lt;br /&gt;
** Miles Hansard, Seungkyu Lee, Ouk Choi, Radu Horaud: &#039;&#039;[https://hal.inria.fr/hal-00725654/PDF/TOF.pdf Time of Flight Cameras: Principles, Methods, and Applications]]&#039;&#039;. Springer, pp.95, 2012, SpringerBriefs in Computer Science, ISBN 978-1-4471-4658-2.&lt;br /&gt;
** Prezentacia: http://perception.inrialpes.fr/~Horaud/Courses/pdf/Horaud_3DS_3.pdf&lt;br /&gt;
** Damien Lefloch, Rahul Nair, Frank Lenzen, Henrik Schafer, Lee Streeter, Michael J. Cree, Reinhard Koch and Andreas Kolb: &#039;&#039;[http://www.franklenzen.de/pdf/lefloch2013tof_foundations.pdf Technical Foundation and Calibration Methods for Time-of-Flight Cameras]&#039;&#039;. &lt;br /&gt;
** Larry Li: &#039;&#039;[http://www-cs.ccny.cuny.edu/~wolberg/capstone/kinect/ToFBasicsTI14.pdf Time-of-Flight Camera –  An Introduction]&#039;&#039;. Texas Instruments.&lt;br /&gt;
** Prezentacia: https://pdfs.semanticscholar.org/c733/b6989e7670fd84ca903eb5239aac0351bfc3.pdf&lt;br /&gt;
* Kamila Vavríková: &#039;&#039;&#039;Senzor dažďa&#039;&#039;&#039; - rain sensor&lt;br /&gt;
** Rain sensor. (2017, March 7). In Wikipedia, The Free Encyclopedia. Retrieved 13:55, March 23, 2017, from https://en.wikipedia.org/w/index.php?title=Rain_sensor&amp;amp;oldid=769080485 &lt;br /&gt;
** H. Kurihata et al., &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=1692045&amp;amp;isnumber=35657 Raindrop Detection from In-Vehicle Video Camera Images for Rainfall Judgment]&#039;&#039;, First International Conference on Innovative Computing, Information and Control - Volume I (ICICIC&#039;06), Beijing, 2006, pp. 544-547.&lt;br /&gt;
** K. N. Choi, &#039;&#039;[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=6126954&amp;amp;isnumber=6126898 Omni-directional rain sensor utilizing scattered light reflection by water particle on automotive windshield glass]&#039;&#039;, 2011 IEEE SENSORS Proceedings, Limerick, 2011, pp. 1728-1731.&lt;br /&gt;
** Kajioka, Hideki, Keiji Fujimura, and Yasuhiro Fujita. &#039;&#039;[http://www.fujitsu-ten.com/business/technicaljournal/pdf/2-7E.pdf Automatic Wiper Controller Using Optical Rain Sensor]&#039;&#039;. Fujitsu Ten Tech. Journal 2 (1989).&lt;br /&gt;
** Kato, Shinichi, and Toshinori Yagi. &#039;&#039;[http://www.mmc-autoelectric.org.ua/downloads/manual/Rain-Light%20Sensor.pdf Development of a Rain-Light Sensor]&#039;&#039;. Technical Review 20 (2008).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LS 2016&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 18. 4. 2016 [Romana Čápková] &amp;lt;br&amp;gt; Rags Gardner: &#039;&#039;[http://www.rags-int-inc.com/PhotoTechStuff/CameraEye/  Eye to Eye: Cameras and Vision]&#039;&#039;&lt;br /&gt;
* 18. 4. 2016 [Eva Bartalová] &amp;lt;br&amp;gt; K. Hema: &#039;&#039;[http://www.ijsr.net/archive/v2i5/IJSRON2013901.pdf Mems Pressure Sensor in Automotive Industry]&#039;&#039;&lt;br /&gt;
* 25. 4. 2016 [Michal Stromko] &amp;lt;BR&amp;gt; Jun Ohta, Takashi Tokuda, Kiyotaka Sasagawa and Toshihiko Noda: &#039;&#039;[http://www.mdpi.com/1424-8220/9/11/9073/pdf Implantable CMOS Biomedical Devices]&#039;&#039;. Sensors 2009, 9, 9073-9093; doi:10.3390/s91109073.&lt;br /&gt;
* 25. 4. 2016 [Marek Petráš] &amp;lt;BR&amp;gt; http://www.sciencealert.com/new-material-with-electrons-that-move-at-300-km-s-displays-huge-magnetoresistance - dohladajte čo je to magnetorezistancia, na čo je dobrá v senzorovej technike a čo nového prináša tento objav&lt;br /&gt;
* [Tomáš Kováč] &amp;lt;br&amp;gt; Steigerwald, Daniel A., et al. &#039;&#039;[https://www.researchgate.net/profile/Serge_Rudaz2/publication/3409388_Illumination_with_solid_state_lighting_technology/links/5503489c0cf231de076fead2.pdf Illumination With Solid State Lighting Technology]&#039;&#039; (Biele LED)&lt;br /&gt;
* 2. 5. [Vladimír Šimčák]&amp;lt;br&amp;gt;  CCD versus CMOS - ktorý je lepší?&lt;br /&gt;
** Bradley S. Carlson: &#039;&#039;[http://senzor.robotika.sk/mems/carlson2002.pdf Comparison of modern CCD and CMOS image sensor technologies and systems for low resolution imaging]&#039;&#039;. Sensors, 2002. Proceedings of IEEE. Vol. 1. IEEE, 2002.&lt;br /&gt;
* 2. 5. [Tomáš Timoranský]&amp;lt;BR&amp;gt; Nava Whiteford: &#039;&#039;[http://hackaday.com/2015/12/10/esoteric-actuators/ Esoteric Actuators]&#039;&#039;&lt;br /&gt;
* 2. 5. Valášek: Termokamery&lt;br /&gt;
* [Ivan Beliansky] &amp;lt;BR&amp;gt;MEMS aktuátory: Switchable windows with MEMS shutters&lt;br /&gt;
## http://www.google.com/patents/US8724202 &lt;br /&gt;
## https://www.youtube.com/watch?v=RqwL2egaqYY&lt;br /&gt;
* [Matúš Rus] &amp;lt;BR&amp;gt;Image stabilization: &lt;br /&gt;
** Innovations Embedded: &#039;&#039;[http://www.rohm.com/documents/11303/41217/OIS-white-paper.pdf Optical Image Stabilization (OIS)]&#039;&#039; White paper, ROHM Semiconductor.&lt;br /&gt;
** Fabrizio La Rosa, Maria Celvisia Virzì, Filippo Bonaccorso, Marco Branciforte: &#039;&#039;[http://www.st.com/web/en/resource/technical/document/white_paper/ois_white_paper.pdf Optical Image Stabilization (OIS)]&#039;&#039;. STMicroelectronics.&lt;br /&gt;
* [Matej Cehula] Gyroskopy:&lt;br /&gt;
** Saukoski, Mikko:  &#039;&#039;[https://aaltodoc.aalto.fi/handle/123456789/4413 System and circuit design for a capacitive MEMS gyroscope.]&#039;&#039; PhD Thesis, 2008, p. 9-48&lt;br /&gt;
** Oliver J. Woodman: &#039;&#039;[https://acristoffers.me/public/CEFET/2%C2%BA%20Periodo/Introducao%20a%20Pratica%20Experimental/Referencias/10.1.1.63.7402.pdf An introduction to inertial navigation.]&#039;&#039; Technical Report Number 696, University of Cambridge, UK, 2007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Zmyslové orgány: hmat&lt;br /&gt;
# Zmyslové orgány: čuch a chuť&lt;br /&gt;
# Supravodivosť a magnetizmus, vysokoteplotná sv.&lt;br /&gt;
# Biele LED - technológie, parametre, princípy&lt;br /&gt;
# Povrchová akustická vlna -- princíp, využitie, komerčné aplikácie. Vybrať nejaký senzor.&lt;br /&gt;
# Snímanie priestoru IR žiarením. Zdroje, snímače, typy zariadení. Aktívne a pasívne systémy. Registrujúce (poplašné) zariadenia. Snímanie objektov, pohybu objektov.&lt;br /&gt;
# Snímanie priestoru IR žiarením 2. Infračervené kamery. Konštrukcie, typy citlivých elementov, pracovné vlnové dĺžky, optika. Teplotný profil, termovízia. Priradenie pseudofarieb.&lt;br /&gt;
# Analýza prostredia, zisťovanie zloženia plynov. Možnosti zisťovania známych zložiek plynov v zmesi. Možnosti zistenia celkového zloženia plynnej vzorky. Prehľad metód, ich vhodnosť, výhody, nevýhody, obmedzenia, poruchové vplyvy, presnosť, spoľahlivosť, odôvodnenosť a ekonomika nasadenia.&lt;br /&gt;
# Snímače farby. Princíp činnosti, poruchové veličiny, využitie.&lt;br /&gt;
# CCD senzory. Najnovšie technológie -- parametre, dosiahnuté výsledky (počet pixlov, citlivosť,...)&lt;br /&gt;
# CMOS senzory. Najnovšie technológie -- parametre, dosiahnuté výsledky (počet pixlov, citlivosť,...)&lt;br /&gt;
# Infrasenzory. Princíp, využitie - termokamery. Najnovšie technológie -- parametre, dosiahnuté výsledky (počet pixlov, citlivosť,...)&lt;br /&gt;
# Stabilizácia obrazu.&lt;br /&gt;
# Technológia sheet-of-light&lt;br /&gt;
# PIR senzory&lt;br /&gt;
# Gyroskopické senzory&lt;br /&gt;
# MEMS Senzory iné ako akcelerometre&lt;br /&gt;
# Lambda sonda &lt;br /&gt;
# Elektronická ochrana tovarov&lt;br /&gt;
# Kinect&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Čítanie na doma&lt;br /&gt;
&lt;br /&gt;
* Jacob Fraden: Handbook of Modern Sensors. 4th ed., Springer, 2010:&lt;br /&gt;
** Hallov jav (d.ú. str. 103)&lt;br /&gt;
** Siebeckov jav (d.ú. str. 106)&lt;br /&gt;
** Peltierov jav (d.ú. str. 111)&lt;br /&gt;
&lt;br /&gt;
Opakovanie:&lt;br /&gt;
* Jacob Fraden: Handbook of Modern Sensors. 4th ed., Springer, 2010:&lt;br /&gt;
** Snímače tlaku (d.ú. str. 375 - 397)&lt;br /&gt;
*** Piezorezistívny jav (d.ú. str. 381)&lt;br /&gt;
** Snímače prietoku (d.ú. str. 399 - 429)&lt;br /&gt;
** Snímače teploty (d.ú. str. 519 - 567)&lt;br /&gt;
&lt;br /&gt;
Z čítania na doma bude otázka na skúške! (platilo naposledy r. 2019)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt; &amp;lt;!-- rozbalovacia / zbalovacia cast --&amp;gt;&lt;br /&gt;
&amp;lt;/FONT&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ToDo List &lt;br /&gt;
&lt;br /&gt;
* NETLabTK: Tools for Tangible Design http://www.netlabtoolkit.org/category/news/&lt;br /&gt;
* ArduGraph is open-source easy to use serial graph monitor for Arduino. http://www.open-electronics.org/guest_projects/ardugraph/?utm_content=buffer51656&amp;amp;utm_medium=social&amp;amp;utm_source=facebook.com&amp;amp;utm_campaign=buffer&lt;br /&gt;
&lt;br /&gt;
* https://arduino.stackexchange.com/questions/1180/serial-data-plotting-programs&lt;br /&gt;
* http://www.edn.com/design/sensors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Výučbové materiály vytvárané z prostriedkov projektu &#039;&#039;&#039;KEGA 011STU-4/2015&#039;&#039;&#039; s názvom&lt;br /&gt;
&#039;&#039;Elektronické pedagogicko-experimentálne laboratóriá mechatroniky&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[MEMS inteligentné senzory a aktuátory#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MEMS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18485</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18485"/>
		<updated>2026-04-21T18:47:25Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Ukážková aplikácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/330px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/1PYjJWf6MYAUTJ6_DwY9yoaqayuLXvIo4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia a Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek. Rozpoznávanie (klasifikáciu) bude realizovať program, ktorý vám vušiel na konci notebooku. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerovaný súbor &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie, môžete si napr. vymeniť so susedom) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nearest Centroid Classifier (bonusová úloha za +3 b.) ==&lt;br /&gt;
&lt;br /&gt;
=== Ako to funguje ===&lt;br /&gt;
&lt;br /&gt;
Pri meraní lentiliek sme pre každú farbu nazbierali viacero vzoriek — každá&lt;br /&gt;
vzorka je bod v 3D priestore definovaný hodnotami (R, G, B). Keby sme chceli&lt;br /&gt;
klasifikovať novú, neznámu lentilku, mohli by sme ju porovnať so všetkými&lt;br /&gt;
nameranými vzorkami a pozrieť sa, ktorá farba prevažuje medzi jej najbližšími&lt;br /&gt;
susedmi. Tento algoritmus sa označuje ako &#039;&#039;KNN (K-Nearest Neighbors)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nearest Centroid&#039;&#039; je jednoduchší príbuzný KNN. Namiesto porovnávania s každou&lt;br /&gt;
jednou vzorkou si pre každú farbu vypočítame jeden reprezentatívny bod —&lt;br /&gt;
tzv. &#039;&#039;centroid&#039;&#039; (ťažisko). Centroid je jednoducho priemer všetkých nameraných&lt;br /&gt;
hodnôt R, G, B pre danú farbu:&lt;br /&gt;
&lt;br /&gt;
  centroid_blue = ( mean(R_blue), mean(G_blue), mean(B_blue) )&lt;br /&gt;
&lt;br /&gt;
Klasifikácia novej vzorky potom spočíva v tom, že nájdeme centroid, ktorý je&lt;br /&gt;
k nej &#039;&#039;najbližší v RGB priestore&#039;&#039;. Vzdialenosť počítame ako euklidovskú&lt;br /&gt;
vzdialenosť — poznáte ju z domácej úlohy:&lt;br /&gt;
&lt;br /&gt;
 dist = sqrt( (r - cr)² + (g - cg)² + (b - cb)² )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nearest Centroid ako špeciálny prípad KNN ===&lt;br /&gt;
&lt;br /&gt;
Nearest Centroid je vlastne KNN s &#039;&#039;k=1&#039;&#039;, kde trénovacie body nie sú&lt;br /&gt;
jednotlivé merania, ale centroidy farieb. Výhodou oproti KNN je, že&lt;br /&gt;
do pam]te nemusíme ukladať celý dataset (desiatky bodov), ale len&lt;br /&gt;
toľko bodov, koľko máme farieb — zvyčajne 4–6.&lt;br /&gt;
&lt;br /&gt;
=== Postup implementácie ===&lt;br /&gt;
&lt;br /&gt;
* Krok 1: Spustite bunku s výpočtom centroidov a pozrite si výsledné hodnoty.&lt;br /&gt;
Skontrolujte, či centroidy v 3D grafe naozaj ležia v strede každej skupiny bodov.&lt;br /&gt;
&lt;br /&gt;
* Krok 2: Doplňte do šablóny `Classifier.h` nižšie:&lt;br /&gt;
** hodnoty centroidov pre všetky vaše farby (skopírujte z výpisu)&lt;br /&gt;
** názvy farieb v rovnakom poradí&lt;br /&gt;
** výpočet euklidovskej vzdialenosti (`dist = ???`)&lt;br /&gt;
** podmienku aktualizácie najbližšieho centroidu (`if (???)`)&lt;br /&gt;
&lt;br /&gt;
=== Otázky na zamyslenie: ===&lt;br /&gt;
&lt;br /&gt;
- Je naozaj potrebná odmocnina pri výpočte vzdialenosti?&lt;br /&gt;
- V akom prípade by Nearest Centroid zlyhal, kde by KNN ešte fungoval?&lt;br /&gt;
- Koľko čísel musíte uložiť do flash pamäte Arduina pri Nearest Centroid&lt;br /&gt;
  v porovnaní s KNN? Aký to má praktický význam?&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18484</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18484"/>
		<updated>2026-04-21T17:45:43Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Implementácia a Vyhodnotenie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/330px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/1PYjJWf6MYAUTJ6_DwY9yoaqayuLXvIo4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia a Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek. Rozpoznávanie (klasifikáciu) bude realizovať program, ktorý vám vušiel na konci notebooku. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerovaný súbor &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie, môžete si napr. vymeniť so susedom) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nearest Centroid Classifier (bonusová úloha za +3 b.) ==&lt;br /&gt;
&lt;br /&gt;
=== Ako to funguje ===&lt;br /&gt;
&lt;br /&gt;
Pri meraní lentiliek sme pre každú farbu nazbierali viacero vzoriek — každá&lt;br /&gt;
vzorka je bod v 3D priestore definovaný hodnotami (R, G, B). Keby sme chceli&lt;br /&gt;
klasifikovať novú, neznámu lentilku, mohli by sme ju porovnať so všetkými&lt;br /&gt;
nameranými vzorkami a pozrieť sa, ktorá farba prevažuje medzi jej najbližšími&lt;br /&gt;
susedmi. Tento algoritmus sa označuje ako &#039;&#039;KNN (K-Nearest Neighbors)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nearest Centroid&#039;&#039; je jednoduchší príbuzný KNN. Namiesto porovnávania s každou&lt;br /&gt;
jednou vzorkou si pre každú farbu vypočítame jeden reprezentatívny bod —&lt;br /&gt;
tzv. &#039;&#039;centroid&#039;&#039; (ťažisko). Centroid je jednoducho priemer všetkých nameraných&lt;br /&gt;
hodnôt R, G, B pre danú farbu:&lt;br /&gt;
&lt;br /&gt;
  centroid_blue = ( mean(R_blue), mean(G_blue), mean(B_blue) )&lt;br /&gt;
&lt;br /&gt;
Klasifikácia novej vzorky potom spočíva v tom, že nájdeme centroid, ktorý je&lt;br /&gt;
k nej &#039;&#039;najbližší v RGB priestore&#039;&#039;. Vzdialenosť počítame ako euklidovskú&lt;br /&gt;
vzdialenosť — poznáte ju z domácej úlohy:&lt;br /&gt;
&lt;br /&gt;
 dist = sqrt( (r - cr)² + (g - cg)² + (b - cb)² )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nearest Centroid ako špeciálny prípad KNN ===&lt;br /&gt;
&lt;br /&gt;
Nearest Centroid je vlastne KNN s &#039;&#039;k=1&#039;&#039;, kde trénovacie body nie sú&lt;br /&gt;
jednotlivé merania, ale centroidy farieb. Výhodou oproti KNN je, že&lt;br /&gt;
do pam]te nemusíme ukladať celý dataset (desiatky bodov), ale len&lt;br /&gt;
toľko bodov, koľko máme farieb — zvyčajne 4–6.&lt;br /&gt;
&lt;br /&gt;
=== Postup implementácie ===&lt;br /&gt;
&lt;br /&gt;
* Krok 1: Spustite bunku s výpočtom centroidov a pozrite si výsledné hodnoty.&lt;br /&gt;
Skontrolujte, či centroidy v 3D grafe naozaj ležia v strede každej skupiny bodov.&lt;br /&gt;
&lt;br /&gt;
* Krok 2: Doplňte do šablóny `Classifier.h` nižšie:&lt;br /&gt;
** hodnoty centroidov pre všetky vaše farby (skopírujte z výpisu)&lt;br /&gt;
** názvy farieb v rovnakom poradí&lt;br /&gt;
** výpočet euklidovskej vzdialenosti (`dist = ???`)&lt;br /&gt;
** podmienku aktualizácie najbližšieho centroidu (`if (???)`)&lt;br /&gt;
&lt;br /&gt;
=== Otázky na zamyslenie: ===&lt;br /&gt;
&lt;br /&gt;
- Je naozaj potrebná odmocnina pri výpočte vzdialenosti?&lt;br /&gt;
- V akom prípade by Nearest Centroid zlyhal, kde by KNN ešte fungoval?&lt;br /&gt;
- Koľko čísel musíte uložiť do flash pamäte Arduina pri Nearest Centroid&lt;br /&gt;
  v porovnaní s KNN? Aký to má praktický význam?&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18483</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18483"/>
		<updated>2026-04-21T17:36:50Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/330px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/1PYjJWf6MYAUTJ6_DwY9yoaqayuLXvIo4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia a Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek. Rozpoznávanie (klasifikáciu) bude realizovať program, ktorý vám vušiel na konci notebooku. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerovaný súbor &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie, môžete si napr. vymeniť so susedom) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18482</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18482"/>
		<updated>2026-04-21T17:35:47Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Implementácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/330px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/1PYjJWf6MYAUTJ6_DwY9yoaqayuLXvIo4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek (môžete si napr. vymeniť so susedom). Rozpoznávanie (klasifikáciu) bude realizovať program, ktorý vám vušiel na konci notebooku. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerovaný súbor &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18481</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18481"/>
		<updated>2026-04-21T17:27:13Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Strojové učenie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/330px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/1PYjJWf6MYAUTJ6_DwY9yoaqayuLXvIo4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek (môžete si napr. vymeniť so susedom). Rozpoznávanie (klasifikáciu) bude realizovať nižšie uvedený program. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerované súbory &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom */&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Pipeline.h&amp;quot;    /* Vygenerovane z Google Colab */&lt;br /&gt;
#include &amp;quot;Classifier.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10 */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky    */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // get RGB values&lt;br /&gt;
 &lt;br /&gt;
  int r = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  int g = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  int b = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  // print values to Serial&lt;br /&gt;
  Serial.print(&amp;quot;RGB: &amp;quot;);&lt;br /&gt;
  Serial.print(r,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(g,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(b,3);&lt;br /&gt;
    &lt;br /&gt;
  // perform feature extraction&lt;br /&gt;
  float features[] = {r, g, b};&lt;br /&gt;
    &lt;br /&gt;
  if (!pipeline.transform(features))&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
  // perform classification on pipeline result&lt;br /&gt;
  Serial.print(&amp;quot; |  Predicted color: &amp;quot;);&lt;br /&gt;
  Serial.println(tree.predictLabel(pipeline.X));&lt;br /&gt;
&lt;br /&gt;
  delay(300);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18480</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18480"/>
		<updated>2026-04-21T17:24:46Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Meranie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target_name&lt;br /&gt;
 25,57,181,blue&lt;br /&gt;
 25,63,191,blue&lt;br /&gt;
 189,38,31,orange&lt;br /&gt;
 188,45,41,orange&lt;br /&gt;
 49,109,93,green&lt;br /&gt;
 49,111,94,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby v anglickom jazyku. Povolené hodnoty: red, orange, yellow, green, blue, purple, pink, brown, cyan, lime, magenta, white, black&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/160px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/10V87_bsniOzooZXJJax5IvIUFiMXY-v4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek (môžete si napr. vymeniť so susedom). Rozpoznávanie (klasifikáciu) bude realizovať nižšie uvedený program. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerované súbory &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom */&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Pipeline.h&amp;quot;    /* Vygenerovane z Google Colab */&lt;br /&gt;
#include &amp;quot;Classifier.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10 */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky    */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // get RGB values&lt;br /&gt;
 &lt;br /&gt;
  int r = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  int g = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  int b = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  // print values to Serial&lt;br /&gt;
  Serial.print(&amp;quot;RGB: &amp;quot;);&lt;br /&gt;
  Serial.print(r,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(g,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(b,3);&lt;br /&gt;
    &lt;br /&gt;
  // perform feature extraction&lt;br /&gt;
  float features[] = {r, g, b};&lt;br /&gt;
    &lt;br /&gt;
  if (!pipeline.transform(features))&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
  // perform classification on pipeline result&lt;br /&gt;
  Serial.print(&amp;quot; |  Predicted color: &amp;quot;);&lt;br /&gt;
  Serial.println(tree.predictLabel(pipeline.X));&lt;br /&gt;
&lt;br /&gt;
  delay(300);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18479</id>
		<title>Triedenie lentiliek</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Triedenie_lentiliek&amp;diff=18479"/>
		<updated>2026-04-21T15:46:43Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Lentilky.jpg|thumb|left|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lentilky&#039;&#039;&#039; sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (&#039;&#039;franc.&#039;&#039; lentille, &#039;&#039;angl.&#039;&#039; lentil) s rôznofarebnoou cukrovou krustou na povrchu. &lt;br /&gt;
V Česku ich vyrábala  firma Sfinx Holešov už od roku 1907 (konkurenčné M&amp;amp;M&#039;s sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako &lt;br /&gt;
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo&lt;br /&gt;
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“ &lt;br /&gt;
(= zjednotenie receptúry) so značkou Smarties.&lt;br /&gt;
&lt;br /&gt;
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:&lt;br /&gt;
* [https://cs.wikipedia.org/wiki/Lentilky Lentilky] ([https://lentilky.cz web])&lt;br /&gt;
* [https://en.wikipedia.org/wiki/M%26M%27s M&amp;amp;M&#039;s]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Skittles_(confectionery) Skittles]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snímač farby ColorPAL ==&lt;br /&gt;
&lt;br /&gt;
Senzorov na snímanie farieb je [[Senzory na rozpoznávanie farieb|viacero rozličných druhov]], my sa budeme zaoberať snímačom ColorPAL firmy Parallax. &lt;br /&gt;
Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:SnimacFarbyColorPal.jpg|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
&lt;br /&gt;
* Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.&lt;br /&gt;
* Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.&lt;br /&gt;
* Generuje 24 bitové farby pomocou vstavaného RGB LED.&lt;br /&gt;
* Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.&lt;br /&gt;
* Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.&lt;br /&gt;
* Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.&lt;br /&gt;
* Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.&lt;br /&gt;
* Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr8.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Princíp činnosti ===&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu. &lt;br /&gt;
&lt;br /&gt;
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:Obr1.png]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Súbor:TSL12_Schematic.png|center]]&lt;br /&gt;
::&#039;&#039;&#039;Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.&lt;br /&gt;
&lt;br /&gt;
=== Použitie ===&lt;br /&gt;
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.&lt;br /&gt;
&lt;br /&gt;
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:Parallax_ColorPAL_Schematic3.png]]&lt;br /&gt;
&lt;br /&gt;
== Software na meranie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu &amp;lt;code&amp;gt;ColorPal.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Knižnica ColorPAL ===&lt;br /&gt;
&lt;br /&gt;
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):&lt;br /&gt;
&lt;br /&gt;
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...&lt;br /&gt;
  https://github.com/westpoint-robotics/ColorPAL&lt;br /&gt;
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony  &#039;-master&#039;). Presu+nte ho do adresára&lt;br /&gt;
 C:\Users\USername\Documents\Arduino\libraries&lt;br /&gt;
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demonštračný program ===&lt;br /&gt;
&lt;br /&gt;
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Arduino Demo&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom      */&lt;br /&gt;
&lt;br /&gt;
#define SW1 6            /* Ak chceme meranie ovladat tlacitkom */&lt;br /&gt;
#define LED1 13          /* LEDka na doske                      */&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;         /* Vytvori instanciu senzora           */&lt;br /&gt;
&lt;br /&gt;
int red;                 /* Premenne na jednotlive farby        */&lt;br /&gt;
int grn;&lt;br /&gt;
int blu;&lt;br /&gt;
&lt;br /&gt;
char buffer[20];         /* Docasny buffer na textovy retazec   */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   pinMode(SW1,INPUT_PULLUP);&lt;br /&gt;
   pinMode(LED1,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10       */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky 9600Bd   */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  red = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  grn = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  blu = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  buffer[19] = &#039;\0&#039;;&lt;br /&gt;
  buffer[18] = &#039;\0&#039;;&lt;br /&gt;
  &lt;br /&gt;
                            // Tu si pripravime retazec na odvysielanie &lt;br /&gt;
                            // v tvare R0000 G0000 B0000 &amp;lt;CR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  sprintf(buffer, &amp;quot;R%4.4d G%4.4d B%4.4d\015&amp;quot;, red, grn, blu);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(buffer);   // A tu ho odvysielame &lt;br /&gt;
 &lt;br /&gt;
  delay(100);               // 10 merani za sekundu nam staci&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:&lt;br /&gt;
&lt;br /&gt;
 R0027 G0106 B0040&lt;br /&gt;
 R0037 G0134 B0050&lt;br /&gt;
 R0034 G0126 B0046&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ukážková aplikácia ===&lt;br /&gt;
&lt;br /&gt;
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)&lt;br /&gt;
na rozpoznávanie farieb &amp;lt;code&amp;gt;TCS3200_ColorPAL_match.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&amp;amp;refresh=641fd7e2308fd1679808482&amp;amp;ind=1600309026340&amp;amp;filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip&lt;br /&gt;
* Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ColorPAL_demo.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meranie ==&lt;br /&gt;
&lt;br /&gt;
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:&lt;br /&gt;
&lt;br /&gt;
 r,g,b,target,target_name&lt;br /&gt;
 25,57,181,0,blue&lt;br /&gt;
 25,63,191,0,blue&lt;br /&gt;
 189,38,31,1,orange&lt;br /&gt;
 188,45,41,1,orange&lt;br /&gt;
 49,109,93,2,green&lt;br /&gt;
 49,111,94,2,green&lt;br /&gt;
&lt;br /&gt;
Význam stĺpcov &#039;&#039;&#039;r&#039;&#039;&#039;, &#039;&#039;&#039;g&#039;&#039;&#039; a &#039;&#039;&#039;b&#039;&#039;&#039; je zrejmý, &#039;&#039;&#039;target_name&#039;&#039;&#039; je názov farby a &#039;&#039;&#039;target&#039;&#039;&#039; je unikátne číslo pre každú farbu.&lt;br /&gt;
&lt;br /&gt;
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje. &lt;br /&gt;
&lt;br /&gt;
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Testovanie tlačítka&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 while (digitalRead(SW1) == HIGH)     // tlačítko je aktívne do nuly&lt;br /&gt;
  {&lt;br /&gt;
    /* len tu cakaj a nic nerob */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   /* hotovo, tlacitko je stlacene */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou&lt;br /&gt;
funkcie [https://www.arduino.cc/reference/en/language/functions/communication/serial/readstringuntil/ readStringUntil()], takto nejako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // check if data is available&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming string:&lt;br /&gt;
    String incomingString = Serial.readStringUntil(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
    // prints the received data&lt;br /&gt;
    Serial.print(&amp;quot;I received: &amp;quot;);&lt;br /&gt;
    Serial.println(incomingString);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Strojové učenie ==&lt;br /&gt;
&lt;br /&gt;
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky. &lt;br /&gt;
&lt;br /&gt;
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda&lt;br /&gt;
rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev. &lt;br /&gt;
&lt;br /&gt;
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Google_Colaboratory_SVG_Logo.svg/160px-Google_Colaboratory_SVG_Logo.svg.png&amp;quot; /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;FONT Size=&amp;quot;+2&amp;quot;&amp;gt;  🡆 [https://colab.research.google.com/drive/10V87_bsniOzooZXJJax5IvIUFiMXY-v4?usp=sharing Google Colab Notebook]&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť  [https://senzor.robotika.sk/mems/files/RGBvalues.csv tento vzorový .csv súbor] na odladenie vášho postupu.&lt;br /&gt;
&lt;br /&gt;
== Implementácia ==&lt;br /&gt;
&lt;br /&gt;
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek (môžete si napr. vymeniť so susedom). Rozpoznávanie (klasifikáciu) bude realizovať nižšie uvedený program. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerované súbory &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;Classifier.h&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab  name=&amp;quot;Čítanie informácie zo sériového portu&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;ColorPAL.h&amp;gt;    /* Kniznica pre pracu so senzorom */&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Pipeline.h&amp;quot;    /* Vygenerovane z Google Colab */&lt;br /&gt;
#include &amp;quot;Classifier.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ColorPAL sensor;&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
   sensor.attachPAL(10);    /* Senzor je pripojeny na D10 */&lt;br /&gt;
   Serial.begin(9600);      /* Rychlost seriovej linky    */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{&lt;br /&gt;
  // get RGB values&lt;br /&gt;
 &lt;br /&gt;
  int r = sensor.redPAL();    // Reads sensors and returns red value&lt;br /&gt;
  int g = sensor.greenPAL();  // Reads sensors and returns green value&lt;br /&gt;
  int b = sensor.bluePAL();   // Reads sensors and returns blue value&lt;br /&gt;
  &lt;br /&gt;
  // print values to Serial&lt;br /&gt;
  Serial.print(&amp;quot;RGB: &amp;quot;);&lt;br /&gt;
  Serial.print(r,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(g,3);&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
  Serial.print(b,3);&lt;br /&gt;
    &lt;br /&gt;
  // perform feature extraction&lt;br /&gt;
  float features[] = {r, g, b};&lt;br /&gt;
    &lt;br /&gt;
  if (!pipeline.transform(features))&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
  // perform classification on pipeline result&lt;br /&gt;
  Serial.print(&amp;quot; |  Predicted color: &amp;quot;);&lt;br /&gt;
  Serial.println(tree.predictLabel(pipeline.X));&lt;br /&gt;
&lt;br /&gt;
  delay(300);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhodnotenie ==&lt;br /&gt;
&lt;br /&gt;
Na záver otestujte druhú skupinu lentiliek (nie tú ktorú ste použili na meranie) a  použite nasledovný vzťah pre vyhodnotenie presnosti: &lt;br /&gt;
&lt;br /&gt;
 Precision = TP / (TP+FP), &lt;br /&gt;
&lt;br /&gt;
kde TP je počet správne určených lentiliek (True Positives) a FP je počet nesprávne priradených k danej farbe (False Positives).&lt;br /&gt;
Druhým parametrom je citlivosť &lt;br /&gt;
&lt;br /&gt;
 Recall =  TP / (TP +FN),&lt;br /&gt;
&lt;br /&gt;
kde opäť TP je počet správne určených a FN je počet nepriradených k danej farbe (False Negative).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb: &lt;br /&gt;
&lt;br /&gt;
* [https://learn.parallax.com/tutorials/language/blocklyprop/candy-sorter-blocklyprop-project Triedič z kartónu]&lt;br /&gt;
* [https://interestingengineering.com/video/make-your-very-own-arduino-based-color-candy-sorting-machine Kvalitnejší triedič]&lt;br /&gt;
* [https://www.thingiverse.com/thing:2762922 3D printed Color Sorter]&lt;br /&gt;
* [https://www.instructables.com/Arduino-MM-Color-Sorter/ Iný 3D Color Sorter s návodom]&lt;br /&gt;
* [https://hackaday.io/project/7579-3d-printed-skittles-sorting-machine Ďalší 3D triedič s návodom]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Ku9PKRoH1CE Veľmi dôvtipný mechanizmus s jediným motorčekom]&lt;br /&gt;
* ... [https://www.google.com/search?client=firefox-b-d&amp;amp;q=arduino+color+sorter a celá kopa ďalších]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to len hračka? Nie, pozrite sa napríklad na tento [https://www.colorsorter-realtech.com/Productd/43.html priemyselný triedič kávových zŕn]:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:ColorSorterCoffeeBeans.jpg|center|500px|thumb|Triedič kávových zŕn ]]&lt;br /&gt;
&lt;br /&gt;
== Literatúra: ==&lt;br /&gt;
&lt;br /&gt;
* Product Page: [https://www.parallax.com/product/colorpal-color-sensor/  #28380 ColorPAL] (parallax.com)&lt;br /&gt;
* [https://www.parallax.com/package/colorpal-color-sensor-downloads/ Downloads] (parallax.com)&lt;br /&gt;
* Product manual [https://senzor.robotika.sk/mems/files/28380-ColorPAL.pdf ver.A] a [https://senzor.robotika.sk/mems/files/28380-ColorPAL_RevB.pdf ver.B]   (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/28380-SensorDatasheet.pdf Sensor datasheet] (local)&lt;br /&gt;
* [https://senzor.robotika.sk/mems/files/ColorPalDemo.zip Demo software] (local)&lt;br /&gt;
* Vzorový [https://senzor.robotika.sk/mems/files/RGBvalues.csv .csv súbor]&lt;br /&gt;
* Ak chceme aj zobrazenie na displeji, pozri [[LCD displej]]&lt;br /&gt;
* Pozri aj ďalšie [[Senzory na rozpoznávanie farieb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MMfigures.jpg|thumb|500px|The seven cartoon &amp;quot;spokescandies&amp;quot; for M&amp;amp;M&#039;s since 2022|center]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Rozpozn%C3%A1vanie_%C4%8Diarov%C3%BDch_k%C3%B3dov&amp;diff=18416</id>
		<title>Rozpoznávanie čiarových kódov</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Rozpozn%C3%A1vanie_%C4%8Diarov%C3%BDch_k%C3%B3dov&amp;diff=18416"/>
		<updated>2026-04-10T09:35:02Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Úloha č. 1:&#039;&#039;&#039; ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Nájdite doma ľubovoľnú šošovku a odmerajte jej ohniskovú vzdialenosť. Metódu merania si vymyslite, meranie a jeho výsledky&lt;br /&gt;
zdokumentujte a nahrajte do classroomu. &lt;br /&gt;
&lt;br /&gt;
Inšpirovať sa môžete napríklad týmto LEGO strojom na meranie ohniskovej vzdialenosti šošoviek:  https://www.youtube.com/watch?v=0kHhbRbAFlc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;0kHhbRbAFlc&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Úloha č. 2:&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pomocou kamery vo svojom notebooku alebo mobile rozpoznajte čo najviac z týchto čiarových kódov. Za každý rozpoznaný kód je jeden bod. Pri demonštrácii správnej funkcie musíte ukázať viac ako jeden úspešný pokus a musíte tiež predviesť, že vám program nerozpoznáva kódy nesprávne (napríklad, ak niekto dokáže detekovať len A, &lt;br /&gt;
nesmie jeho program ako A označiť aj B alebo C, ale práve len A). &lt;br /&gt;
&lt;br /&gt;
Do classroomu nahrajte zdrojový kód a screenshoty alebo video dokumentujúce funkciu programu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorSample.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Návod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Prepojenie kamery a spracovanie obrázku v Processingu už viete z minulého cvičenia. Nižšie máte ukážkový program, ktorý zobrazí v okne&lt;br /&gt;
okrem obrazu z kamery aj úroveň jasu jedného (prostredného) riadku. Úroveň jasu (brightness) sa pohybuje od 0 (čierna) po 255 (biela). &lt;br /&gt;
Obraz z kamery viete v okne zapnúť/vypnúť klávesou &#039;c&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorExample1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Čo ďalej?&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Stanovte si nejakú rozhodovaciu úroveň (threshold), od ktorej vyššie budete považovať farbu za bielu, a od ktorej nižšie za čiernu. &lt;br /&gt;
Tým dostanete riadok hodnôt len s dvoma hodnotami - čiernou a bielou, napr. 0 a 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorExample2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Nás teraz zaujíma počet pásikov v obraze. Jedna možnosť ako to spočítať, je zistiť, koľko zmien 0-&amp;gt;1 sa v poli nachádza. &lt;br /&gt;
Mimochodom - zmena je vlastne derivácia, ktorá sa v diskrétnom priestore spočíta ako rozdiel dvoch po sebe idúcich hodnôt. &lt;br /&gt;
Môžete teda pole &amp;quot;zderivovať&amp;quot; a potom už len spočítať, koľko je tam kladných zmien (a prípadne pre istotu porovnať, či&lt;br /&gt;
je tam aj rovnaký počet záporných zmien). Týmto postupom viete zistiť, koľko čiernych prúžkov v obrázku máte a nebude to&lt;br /&gt;
ani závislé od ich šírky. &lt;br /&gt;
&lt;br /&gt;
Ak chcete naviac porovnať aj šírku pásikov, pomôže vám domáca úloha z programovania. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pozn. 1: možno bude rozpoznávanie spoľahlivejšie, ak zahodíte zopár pixelov na oboch okrajoch obrazu.&lt;br /&gt;
&lt;br /&gt;
Pozn. 2: úlohy nie je nevyhnutné riešiť v Processingu, môžete použiť ľubovoľný programovací jazyk a prostredie, v ktorom viete pracovať. &lt;br /&gt;
&lt;br /&gt;
Pozn. 3: Predloha vzorov http://senzor.robotika.sk/sensorwiki/images/d/d6/CameraLineSensorSample.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vzorový program&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
&lt;br /&gt;
Capture cam;&lt;br /&gt;
&lt;br /&gt;
int yOld,yNew;&lt;br /&gt;
int[] camLine = new int[160]; // v tomto poli bude vas riadok &lt;br /&gt;
&lt;br /&gt;
boolean videoOnScreen=true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  size(160, 120);  // velkost okna prisposobime videu&lt;br /&gt;
  &lt;br /&gt;
  // tato cast tu nemusi byt, je tu len na zobrazenie vsetkych dostupnych videosluzieb&lt;br /&gt;
  String[] cameras = Capture.list();&lt;br /&gt;
  if (cameras.length == 0) &lt;br /&gt;
  {&lt;br /&gt;
    println(&amp;quot;There are no cameras available for capture.&amp;quot;);&lt;br /&gt;
    exit();&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    println(&amp;quot;Available cameras:&amp;quot;);&lt;br /&gt;
    for (int i = 0; i &amp;lt; cameras.length; i++) &lt;br /&gt;
      println(&amp;quot;[&amp;quot; + i + &amp;quot;] &amp;quot; +cameras[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // potom si vyberiem bud zo zoznamu, napr. takto&lt;br /&gt;
  // cam = new Capture(this, cameras[0]);  &lt;br /&gt;
  // alebo priamo urcim rozlisenie takto:  &lt;br /&gt;
  cam = new Capture(this, 160, 120, cameras[0]);  &lt;br /&gt;
&lt;br /&gt;
  // Start capturing the images from the camera&lt;br /&gt;
  cam.start();  &lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void draw() &lt;br /&gt;
{&lt;br /&gt;
  if (cam.available()) &lt;br /&gt;
  {&lt;br /&gt;
    cam.read();&lt;br /&gt;
    cam.loadPixels();&lt;br /&gt;
    &lt;br /&gt;
   // pixels je jednorozmerne dlhe pole po riadkoch ulozene&lt;br /&gt;
   // stredny pixel je tento:&lt;br /&gt;
    int j = cam.height / 2;&lt;br /&gt;
    int i = cam.width / 2;&lt;br /&gt;
    int pixelColor = cam.pixels[j*cam.width + i];&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
    background(0);  // cierne pozadie (a zaroven vymaze predosly?)&lt;br /&gt;
    noStroke();   &lt;br /&gt;
    &lt;br /&gt;
    if (videoOnScreen) &lt;br /&gt;
    {&lt;br /&gt;
      set(0, 0, cam); // toto je v lavom hornom rohu&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    noFill();&lt;br /&gt;
    stroke(255, 0, 0);  // cervena farba ciary&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    for (i=0; i&amp;lt;cam.width; i++)&lt;br /&gt;
    {&lt;br /&gt;
       pixelColor = cam.pixels[j*cam.width + i];&lt;br /&gt;
       camLine[i] = (int)brightness(pixelColor);  // 0 je black, 255 white&lt;br /&gt;
                                                  // naplnime riadok &lt;br /&gt;
&lt;br /&gt;
       // toto uz je len kreslenie do obrazu:&lt;br /&gt;
       yNew = camLine[i]; &lt;br /&gt;
       yNew = (int)map(yNew,0,255,120,0);    // preskalovanie 0-255 do 120-0 (lebo y suradnica zacina hore)&lt;br /&gt;
       line(i-1,yOld,i,yNew);&lt;br /&gt;
       yOld=yNew;&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    /*  &lt;br /&gt;
   V poli int camLine[160] mate ulozeny cely stredny riadok. &lt;br /&gt;
   hodnoty su od 0 (cierna) po 255 (biela). Vasa uloha je najst&lt;br /&gt;
   nejaku prahovu hodnotu (treshold), rozlisit biele a cierne&lt;br /&gt;
   policka a rozlisit co najviac z predlozenych ciarovych kodov.&lt;br /&gt;
   Ak vas program rozpozna 1 kod, mate 1 bod, za vsetkych 7 kodov&lt;br /&gt;
   je 7 bodov. Zaroven ale nesmie program rozlisit tie nespravne.&lt;br /&gt;
    */&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
   &lt;br /&gt;
 }   /* end of if */&lt;br /&gt;
}     /* end of draw() */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void keyPressed() &lt;br /&gt;
{&lt;br /&gt;
  if  (key == &#039;c&#039;) &lt;br /&gt;
    videoOnScreen = !videoOnScreen;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[MEMS inteligentné senzory a aktuátory#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MEMS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Rozpozn%C3%A1vanie_%C4%8Diarov%C3%BDch_k%C3%B3dov&amp;diff=18415</id>
		<title>Rozpoznávanie čiarových kódov</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Rozpozn%C3%A1vanie_%C4%8Diarov%C3%BDch_k%C3%B3dov&amp;diff=18415"/>
		<updated>2026-04-10T09:34:32Z</updated>

		<summary type="html">&lt;p&gt;Balogh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Úloha č. 1:&#039;&#039;&#039; ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Nájdite doma ľubovoľnú šošovku a odmerajte jej ohniskovú vzdialenosť. Metódu merania si vymyslite, meranie a jeho výsledky&lt;br /&gt;
zdokumentujte a nahrajte do classroomu. &lt;br /&gt;
&lt;br /&gt;
Inšpirovať sa môžete napríklad týmto LEGO strojom na meranie ohniskovej vzdialenosti šošoviek:  https://www.youtube.com/watch?v=0kHhbRbAFlc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;0kHhbRbAFlc&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Úloha č. 2:&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pomocou kamery vo svojom notebooku alebo mobile rozpoznajte čo najviac z týchto čiarových kódov. Za každý rozpoznaný kód je jeden bod. Pri demonštrácii správnej funkcie musíte ukázať viac ako jeden úspešný pokus a musíte tiež predviesť, že vám program nerozpoznáva kódy nesprávne (napríklad, ak niekto dokáže detekovať len A, &lt;br /&gt;
nesmie jeho program ako A označiť aj B alebo C, ale práve len A). &lt;br /&gt;
&lt;br /&gt;
Do classroomu nahrajte zdrojový kód a screenshoty alebo video dokumentujúce funkciu programu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorSample.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Návod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Prepojenie kamery a spracovanie obrázku v Processingu už viete z minulého cvičenia. Nižšie máte ukážkový program, ktorý zobrazí v okne&lt;br /&gt;
okrem obrazu z kamery aj úroveň jasu jedného (prostredného) riadku. Úroveň jasu (brightness) sa pohybuje od 0 (čierna) po 255 (biela). &lt;br /&gt;
Obraz z kamery viete v okne zapnúť/vypnúť klávesou &#039;c&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorExample1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Čo ďalej?&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Stanovte si nejakú rozhodovaciu úroveň (threshold), od ktorej vyššie budete považovať farbu za bielu, a od ktorej nižšie za čiernu. &lt;br /&gt;
Tým dostanete riadok hodnôt len s dvoma hodnotami - čiernou a bielou, napr. 0 a 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:CameraLineSensorExample2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Nás teraz zaujíma počet pásikov v obraze. Jedna možnosť ako to spočítať, je zistiť, koľko zmien 0-&amp;gt;1 sa v poli nachádza. &lt;br /&gt;
Mimochodom - zmena je vlastne derivácia, ktorá sa v diskrétnom priestore spočíta ako rozdiel dvoch po sebe idúcich hodnôt. &lt;br /&gt;
Môžete teda pole &amp;quot;zderivovať&amp;quot; a potom už len spočítať, koľko je tam kladných zmien (a prípadne pre istotu porovnať, či&lt;br /&gt;
je tam aj rovnaký počet záporných zmien). Týmto postupom viete zistiť, koľko čiernych prúžkov v obrázku máte a nebude to&lt;br /&gt;
ani závislé od ich šírky. &lt;br /&gt;
&lt;br /&gt;
Ak chcete naviac porovnať aj šírku pásikov, pomôže vám domáca úloha z Repl.it. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pozn. 1: možno bude rozpoznávanie spoľahlivejšie, ak zahodíte zopár pixelov na oboch okrajoch obrazu.&lt;br /&gt;
&lt;br /&gt;
Pozn. 2: úlohy nie je nevyhnutné riešiť v Processingu, môžete použiť ľubovoľný programovací jazyk a prostredie, v ktorom viete pracovať. &lt;br /&gt;
&lt;br /&gt;
Pozn. 3: Predloha vzorov http://senzor.robotika.sk/sensorwiki/images/d/d6/CameraLineSensorSample.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vzorový program&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
&lt;br /&gt;
Capture cam;&lt;br /&gt;
&lt;br /&gt;
int yOld,yNew;&lt;br /&gt;
int[] camLine = new int[160]; // v tomto poli bude vas riadok &lt;br /&gt;
&lt;br /&gt;
boolean videoOnScreen=true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  size(160, 120);  // velkost okna prisposobime videu&lt;br /&gt;
  &lt;br /&gt;
  // tato cast tu nemusi byt, je tu len na zobrazenie vsetkych dostupnych videosluzieb&lt;br /&gt;
  String[] cameras = Capture.list();&lt;br /&gt;
  if (cameras.length == 0) &lt;br /&gt;
  {&lt;br /&gt;
    println(&amp;quot;There are no cameras available for capture.&amp;quot;);&lt;br /&gt;
    exit();&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    println(&amp;quot;Available cameras:&amp;quot;);&lt;br /&gt;
    for (int i = 0; i &amp;lt; cameras.length; i++) &lt;br /&gt;
      println(&amp;quot;[&amp;quot; + i + &amp;quot;] &amp;quot; +cameras[i]);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // potom si vyberiem bud zo zoznamu, napr. takto&lt;br /&gt;
  // cam = new Capture(this, cameras[0]);  &lt;br /&gt;
  // alebo priamo urcim rozlisenie takto:  &lt;br /&gt;
  cam = new Capture(this, 160, 120, cameras[0]);  &lt;br /&gt;
&lt;br /&gt;
  // Start capturing the images from the camera&lt;br /&gt;
  cam.start();  &lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void draw() &lt;br /&gt;
{&lt;br /&gt;
  if (cam.available()) &lt;br /&gt;
  {&lt;br /&gt;
    cam.read();&lt;br /&gt;
    cam.loadPixels();&lt;br /&gt;
    &lt;br /&gt;
   // pixels je jednorozmerne dlhe pole po riadkoch ulozene&lt;br /&gt;
   // stredny pixel je tento:&lt;br /&gt;
    int j = cam.height / 2;&lt;br /&gt;
    int i = cam.width / 2;&lt;br /&gt;
    int pixelColor = cam.pixels[j*cam.width + i];&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
    background(0);  // cierne pozadie (a zaroven vymaze predosly?)&lt;br /&gt;
    noStroke();   &lt;br /&gt;
    &lt;br /&gt;
    if (videoOnScreen) &lt;br /&gt;
    {&lt;br /&gt;
      set(0, 0, cam); // toto je v lavom hornom rohu&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    noFill();&lt;br /&gt;
    stroke(255, 0, 0);  // cervena farba ciary&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    for (i=0; i&amp;lt;cam.width; i++)&lt;br /&gt;
    {&lt;br /&gt;
       pixelColor = cam.pixels[j*cam.width + i];&lt;br /&gt;
       camLine[i] = (int)brightness(pixelColor);  // 0 je black, 255 white&lt;br /&gt;
                                                  // naplnime riadok &lt;br /&gt;
&lt;br /&gt;
       // toto uz je len kreslenie do obrazu:&lt;br /&gt;
       yNew = camLine[i]; &lt;br /&gt;
       yNew = (int)map(yNew,0,255,120,0);    // preskalovanie 0-255 do 120-0 (lebo y suradnica zacina hore)&lt;br /&gt;
       line(i-1,yOld,i,yNew);&lt;br /&gt;
       yOld=yNew;&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    /*  &lt;br /&gt;
   V poli int camLine[160] mate ulozeny cely stredny riadok. &lt;br /&gt;
   hodnoty su od 0 (cierna) po 255 (biela). Vasa uloha je najst&lt;br /&gt;
   nejaku prahovu hodnotu (treshold), rozlisit biele a cierne&lt;br /&gt;
   policka a rozlisit co najviac z predlozenych ciarovych kodov.&lt;br /&gt;
   Ak vas program rozpozna 1 kod, mate 1 bod, za vsetkych 7 kodov&lt;br /&gt;
   je 7 bodov. Zaroven ale nesmie program rozlisit tie nespravne.&lt;br /&gt;
    */&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
   &lt;br /&gt;
 }   /* end of if */&lt;br /&gt;
}     /* end of draw() */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void keyPressed() &lt;br /&gt;
{&lt;br /&gt;
  if  (key == &#039;c&#039;) &lt;br /&gt;
    videoOnScreen = !videoOnScreen;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[MEMS inteligentné senzory a aktuátory#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MEMS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Ovl%C3%A1danie_servomotor%C4%8Dekov_na_manipul%C3%A1tore_joystickmi&amp;diff=18414</id>
		<title>Ovládanie servomotorčekov na manipulátore joystickmi</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Ovl%C3%A1danie_servomotor%C4%8Dekov_na_manipul%C3%A1tore_joystickmi&amp;diff=18414"/>
		<updated>2026-04-10T08:45:10Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Gener%C3%A1tor_harmonick%C3%A9ho_sign%C3%A1lu&amp;diff=18413</id>
		<title>Generátor harmonického signálu</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Gener%C3%A1tor_harmonick%C3%A9ho_sign%C3%A1lu&amp;diff=18413"/>
		<updated>2026-04-10T08:45:01Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=%C3%9Asporn%C3%A9_re%C5%BEimy_procesora&amp;diff=18412</id>
		<title>Úsporné režimy procesora</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=%C3%9Asporn%C3%A9_re%C5%BEimy_procesora&amp;diff=18412"/>
		<updated>2026-04-10T08:44:53Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=MIPS_Projekt&amp;diff=18411</id>
		<title>MIPS Projekt</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=MIPS_Projekt&amp;diff=18411"/>
		<updated>2026-04-10T08:44:34Z</updated>

		<summary type="html">&lt;p&gt;Balogh: /* Voľné projekty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cieľom semestrálneho projektu je ukázať, že ste sa na našom predmete skutočne niečo naučili a že ste schopní samostatne vyriešiť a naprogramovať jednoduchšiu úlohu s mikropočítačom. &lt;br /&gt;
&lt;br /&gt;
Do termínu skúšky treba riešenie predviesť a potom odovzať dokumentáciu sem do wiki:&lt;br /&gt;
* Stručný opis riešenia, akýsi návod na použitie, čo ste vlastne spravili a ako to funguje.&lt;br /&gt;
* Zdrojový kód (prípadne aj použité knižnice ak sú iné ako štandartne použité lcd.h, uart.h a i2c.h) aj s bohatými vlastnými komentármi&lt;br /&gt;
* Video, malo by obsahovať aj nejaký komentár, kde bude opisovať čo vidíme, čo sa deje a prečo sa to tam deje. Malo by zdokumentovať všetky funkcie, ktoré ste naprogramovali.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cbox|text=&#039;&#039;&#039;Upozornenie:&#039;&#039;&#039; programy vypracujete v avr-gcc, &#039;&#039;&#039;nie&#039;&#039;&#039; v Arduino IDE prostredí.&amp;lt;BR&amp;gt; Nie je dovolené používať žiadne cudzie knižnice s výnimkou štandartných a tých, ktoré sme používali na cvičeniach.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FONT Color=&amp;quot;red&amp;quot; Size=&amp;quot;+1&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vlastné:&#039;&#039;&#039;&lt;br /&gt;
* Ak máte vlastný nápad, napríklad si chcete k svojej Arduino doske niečo pripojiť, naprogramovať, ozvite sa, dohoda je možná.&lt;br /&gt;
&amp;lt;/FONT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mnoho inšpirácie na vlastné projekty nájdete napr. tu https://www.engineersgarage.com/?s=arduino&amp;amp;page=1 alebo tu https://circuitdigest.com/microcontroller-projects/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voľné projekty ==&lt;br /&gt;
&lt;br /&gt;
Poznámka: zadania označené (*) sú jednoduchšie a nie sú vhodné pre študentov, ktorí chcú mať známku A alebo B. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;8&amp;quot;&amp;gt;   Zbernica i2c: PCF8582E - 256x8-bit EEPROM i2c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;10&amp;quot;&amp;gt;  Zbernica SPI: MCP41050 E/P  číslicový potenciometer 50k, 8-bit, SPI&lt;br /&gt;
 &amp;lt;li value=&amp;quot;11&amp;quot;&amp;gt;  Zbernica SPI: MCP4811 -E/P  číslicový D/A prevodník 10 bit SPI&lt;br /&gt;
 &amp;lt;li value=&amp;quot;12&amp;quot;&amp;gt;  Zbernica SPI: 25LC010A - EEPROM pamäť 128x8 bit SPI&lt;br /&gt;
 &amp;lt;li value=&amp;quot;26&amp;quot;&amp;gt;  Jednoduchý multitasking s FreeRTOS https://github.com/johncobb/avr_328p_freertos&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;32&amp;quot;&amp;gt; Vytvorte program pracujúci v reálnom čase simulujúci systém Y(s)/U(s)=K/(s*T+1), K=1 [-] a T = 0,5 [sek].  Na vykreslenie priebehu použite SerialPlot. Rozsahy u(t) a y(t)  sú 0 až 5V. Rozlíšenie 0.01V. Vykreslite prechodovú charakteristiku odpovedajúcu vstupnej hodnote 2.00V.  Použite celočíselnú aritmetiku.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;34&amp;quot;&amp;gt; Ak použijeme funkciu printf(...) čas potrebný na k vykonaniu tejto operácie je úmerný prenosovej rýchlosti a počtu prenášaných B-tov. Jeden zo spôsobov skrátenia času potrebného na vykonanie tejto funkcie je použiť prerušovací podsystém. Na meranie času použite buď niektorý T/C, alebo osciloskop. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;36&amp;quot;&amp;gt; Študent musí vypočítať z T systému T oscilátora. Dokážete namerať toľko bodov,  ALF a FLF charakteristiky, aby ste vedeli dokresliť asymptoty?&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;li value=&amp;quot;38&amp;quot;&amp;gt; Niečo z predošlých zadaní v kombinácii Matlab/Simulink a generovaným kódom.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;39&amp;quot;&amp;gt; [[Zbernica i2c: hodiny reálneho času s PCF8583P]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Projekty MIPS 2026 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;1&amp;quot;&amp;gt; (*) Filip Hreha: [[Alarm s PIR detektorom pohybu]] https://www.parallax.com/product/pir-mini-sensor/&lt;br /&gt;
 &amp;lt;li value=&amp;quot;2&amp;quot;&amp;gt; (*) Sofia Nevzorova: [[Vstupná jednotka s palcovým prepínačom TS211]] - https://www.bucek.name/pdf/ts21xxxxx.pdf&lt;br /&gt;
 &amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; (*) Dávid Vríčan: [[Automatické zavlažovanie]] so snímačom vlhkosti pôdy a pumpičkou&lt;br /&gt;
 &amp;lt;li value=&amp;quot;4&amp;quot;&amp;gt; (*) Áron Szabó Bartko: [[Binárne hodiny]]: Zobrazenie plynutia sekúnd (0-63) v binárnej sústave na 6 LED diódach.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;5&amp;quot;&amp;gt; (*) Rostyslav Fursov: [[SOS maják]]: Cyklické vyblikávanie signálu SOS v morzeovke na jednej LED.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;6&amp;quot;&amp;gt; (*) Oliver Szabo: [[Generátor tónov]]: Potenciometrom riadený zvuk: ADC hodnota z potenciometra mení frekvenciu tónu na bzučiaku v reálnom čase.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;7&amp;quot;&amp;gt; (*) Samuel Igaz: [[Monitor kapacity batérie]]: Meranie napätia (simulované potenciometrom) a zobrazenie stavu (Full/Mid/Low) na 3 LED.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;9&amp;quot;&amp;gt; Broňa Dzivjaková: [[UART Kalkulačka]]: Študent pošle cez terminál príklad (napr. 5+3) a mikropočítač vráti výsledok. Operácie aspoň +,-,*,/.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;13a&amp;quot;&amp;gt; Adam Čulák: [[Zámok na kód I.]]: Zámok na kód: Študent musí v správnom poradí stlačiť na matici správne poradie tlačidiel aby „odomkol“ (rozsvietil zelenú LED). Ak je kombinácia nesprávna, rozsvieti sa červená dióda.&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;li value=&amp;quot;13b&amp;quot;&amp;gt; Lukáš Hegedúš: [[Zámok na kód II.]]: Študent musí v správnom poradí stlačiť 4 tlačidlá, aby „odomkol“ (rozsvietil zelenú LED).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;14&amp;quot;&amp;gt; Karol Kilian: [[UART Metronóm]]: Používateľ cez UART zadá BPM (údery za minútu) a bzučiak začne rytmicky pípať.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;15&amp;quot;&amp;gt; Miroslav Klein: [[Prehrávač melódie s ovládaním]]: Prehráva melódiu z poľa, tlačidlá slúžia ako Play/Stop/Next.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;16&amp;quot;&amp;gt;  Egor Bukhtiiarov: [[Zbernica i2c: EEPROM Terminál]]: Zápis a čítanie textových reťazcov do externej pamäte cez UART príkazy .&lt;br /&gt;
 &amp;lt;li value=&amp;quot;17&amp;quot;&amp;gt;  Anton Zadorozhnii [[Generátor signálov s mikroprocesorom]]: obdlžnik, trojuholník, sinus. Parametre amplituda, frekvencia, posunutie, .. a vykresliť na plotter. Ak je to zložite, možno rozdeliť na časti. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;19a&amp;quot;&amp;gt;  Werner Federmayer: [[Ultrazvukový radar s HC-SR04]]: Meranie vzdialenosti (HC-SR04) a zobrazenie na LCD alebo sériovú linku v centimetroch.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;19b&amp;quot;&amp;gt; Mihály Bertalan Vasas: [[Ultrazvukový radar so senzorom Ping)))]]: Meranie vzdialenosti a zobrazenie na LCD alebo sériovú linku v centimetroch.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;20&amp;quot;&amp;gt;  Dmytro Domchuk: [[Integrátor s mikroprocesorom]]. Potenciometer zadá veľkosť vstupu integrátora. Vytvorí sa zdroj reálneho času, prírastku času, napr. 5ms. A s nastavenou integračnou časovou konštantou sa bude meniť v reálnom čase, výstup, ktorý sa bude zobrazovať na serial, plot. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;21&amp;quot;&amp;gt; Dariia Dordiai: [[Jednoduchý P regulátor]]. (Nepotrebuje periódu vzorkovania). Bude daná  rýchlosťou merania napätia na potenciometre. Keďže je daný 10b prevodník, je daný aj rozsah w (želaná hodnota), y (meraná hodnota) a e (regulačná odchýlka). E sa prenásobí zosilnením, napr. pevná rádová čiarka a pošle sa von na PWM výstup napr. 8b. Treba len vhodne nastaviť periódu opakovania. Opäť možno zobrazovať na serial plot. meranú hodnotu a tomu odpovedajúce plnenie ako funkcia w., atď. &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;li value=&amp;quot;22&amp;quot;&amp;gt;  Oleh Chuiko: [[Dekodér morzeovky]]: Mikropočítač prijíma „pípanie“ z tlačidla (meranie dĺžky stisku) a vypisuje písmená na UART.&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;li value=&amp;quot;23&amp;quot;&amp;gt;Andrej Koža: [[Zbernica i2c: RTC Hodiny]]: Vyčítanie reálneho času z modulu DS1307 a jeho výpis na UART.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;26&amp;quot;&amp;gt;  Yaroslav Buryk: [[Digitálny potenciometer]]. Navrhnite program na načítavanie počtu impulzov tak, aby ste pri opakovanom pohybe (aj pri zmene smeru) hriadeľa nestratili ani jeden krok. Ide o ošetrenie voči zákmitom.   &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;27&amp;quot;&amp;gt; Gordij Čornyj: [[Úsporné režimy procesora]] - Power down úsporné režimy https://www.engineersgarage.com/reducing-arduino-power-consumption-sleep-modes/&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;31&amp;quot;&amp;gt; Mykyta Oleksandr: [[Generátor harmonického signálu]] Na generovanie harmonického signálu nepoužite funkcie sin(), resp. cos(), ale vytvorte oscilátor (v reálnom čase) ako prenosovú funkciu 1/((s*T)^2 + 1). Úlohou je zmerať  jeden bod frekvenčnej  charakteristiky systému 1/(s*T_osc+1) na frekvencii omega = 1/T. T = 0,5 sek.  Výstupom je signál s parametrami: A_0 + A_1*sin(omega*t + fi), kde A_0 = 128 a A_1 = 100.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;32&amp;quot;&amp;gt;  (*) Kristian Rostupytskyi: [[Pripojenie viacero tlačidiel cez A/D prevodník‎]] - Pripojenie 5 tlačidiel na 1 vstup mikroprocesora s využitím A/D prevodníka.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;33&amp;quot;&amp;gt; Dariia Svystak: [[Implementácia funkcie map()] V prostredí ArduinoIde máme možnosť použiť funkciu map(...). Prepíšte túto funkciu tak, aby sme napätie merané v rozsahu 0 až 5V pomocou 10 b-ého A/D prevodníka vedeli zobraziť s presnosťou na „0,01V“. Použite celočíselnú aritmetiku.  Výstup A/D prevodníkom filtrujte pomocou filtra kĺzavého priemeru – priemer s 8, resp. 16 vzoriek.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li value=&amp;quot;35&amp;quot;&amp;gt;  Matúš Grúň: [[Interaktívna lampička I]]&lt;br /&gt;
 &amp;lt;li value=&amp;quot;36&amp;quot;&amp;gt;  Michal Čavojský: [[Interaktívna lampička II]]&lt;br /&gt;
 &amp;lt;li value=&amp;quot;37&amp;quot;&amp;gt;  Mia Dudášová: [[Zámok na kód s IR ovládaním]] - vlastný projekt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li value=&amp;quot;38&amp;quot;&amp;gt;  Marek Kesckés: [[Ovládanie servomotorčekov na manipulátore joystickmi]] - vlastný projekt&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- nove pridavaj uz sem, lebo cislovanie --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Archív projektov z predošlých rokov == &lt;br /&gt;
&lt;br /&gt;
* Balogh: &#039;&#039;[[MIPS Template|Vzorová šablóna na projekty.]]&#039;&#039; 2023-6.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Projekty MIPS 2025 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Dominik Andraščík: [[Ovládanie elektrického zámku z cloudu]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Andrej Bariš: [[Bežiace svetlo s obvodom 74HC595]]&lt;br /&gt;
 &amp;lt;li&amp;gt;?? Ilona Baihildina: [[Hracia kocka s LED]] (*)&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Oliver Beko: [[Čítačka RFID kariet RC522]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Martin Biacovský: [[Jednoduchá kuchynská váha do 1kg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Filip Boco: [[Zbernica i2c: hodiny reálneho času s DS1388]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Dávid Bungyi: [[Diaľkové ovládanie zosilňovača]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Lukáš Čapla: [[Snímanie polohy optickým enkodérom]] IRC a jeho vyhodnotenie pre snímanie polohy&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Samuel Gálik: [[Ovládanie rýchlosti jednosmerného motora cez bluetooth]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Kamil Hanišák: &#039;&#039;[[Zbernica i2c: PCF8574]] - IO expandér.&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Ľuboš Hreňo: [[Ovládanie  robotického ramienka joystickom II.]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Martin Hubocký: [[Kombinovaný snímač teploty a vlhkosti DHT22]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Dávid Jamarik: [[Hra Máš pevnú ruku?]] (*) &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Miloslav Kráľ:  [[Tester Arduina]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Matúš Kráľ: [[Automatické nastavenie prenosovej rýchlosti]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Juraj Krasnovský: [[Ovládanie  robotického ramienka joystickom]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Martin Lenarth: [[Ovládanie vyklápacích svetiel]]. &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Matúš Németh: [[Ovládanie rýchlosti jednosmerného motora z BT aplikácie]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Tymur Omelianenko: [[Generátor trojuholníkového signálu s R-2R prevodníkom]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Filip Pinďar: [[Ovládanie elektrického zámku z mobilnej aplikácie]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Kamil Raplík: [[Infračervený vypínač s ATtiny45]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ René Roger: [[Metódy zvýšenie presnosti A/D prevodu]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Aleh Sobaleu: [[Kombinovaný snímač teploty a vlhkosti DHT11]] &lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Marek Šoltés: [[Diaľkové ovládanie spotrebiča pomocou infračerveného signálu]]&lt;br /&gt;
 &amp;lt;li&amp;gt;✔️ Matúš Zakuťanský: [[Generovanie kódu z prostredia Matlaba/Simulink]] &lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Projekty MIPS 2024 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Bobocký, Daniel Samuel: &#039;&#039;[[Klávesnica s radičom MH1KK1 -]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Bugár, Martin:         &#039;&#039;[[Reglátor chladenia so snímačom teploty]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Buzko, Kateryna:       &#039;&#039;[[Jednoduchý prijímač diaľkového IR ovládania]]&#039;&#039; &lt;br /&gt;
 &amp;lt;li&amp;gt; Csabi, Jozef:          &#039;&#039;[[Meranie vzdialenosti ultrazvukovým snímačom HC-SR04]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Fedor, Peter:          &#039;&#039;[[Riadenie polohy klapky klimatizácie]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Guľak, Peter:          &#039;&#039;[[Piškvorky (Tic-Tac-Toe)]] na 8x8 maticovom displeji&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Hano, Adam:            &#039;&#039;[[Hodinový modul DS1302]]&#039;&#039; &lt;br /&gt;
 &amp;lt;li&amp;gt; Illés, Dominik:        &#039;&#039;[[Ovládanie RGB LED pásika]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Kramla, Oliver:        &#039;&#039;[[Svetelný efekt s obvodom 74595]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Kudláč, Lukáš:         &#039;&#039;[[Riadenie križovatky]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Kuňáková, Andrea:      &#039;&#039;[[Autíčko na sledovanie čiary]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Ledecký, Matej:        &#039;&#039;[[Ovladanie krokoveho motora joystickom + uvod displej]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Macák, Jakub:          &#039;&#039;[[Tester obvodu 7400]] (4xNAND)&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Majba, David:          &#039;&#039;[[Vysielač morzeovky]]&#039;&#039; &lt;br /&gt;
 &amp;lt;li&amp;gt; Nagy, Ladislav:        &#039;&#039;[[Maticový displej 8x8 s driverom MAX7219]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Nagy, Gabriel:         &#039;&#039;[[Tester obvodu 7493]] (4-bitové počítadlo)&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Ondrejková, Lea Lenka: &#039;&#039;[[14-segmentový LED displej]]&#039;&#039; &lt;br /&gt;
 &amp;lt;li&amp;gt; Pauliny, Kristián:     &#039;&#039;[[Akordy s procesorom AVR]]&#039;&#039; &lt;br /&gt;
 &amp;lt;li&amp;gt; Reismüller, Tomáš:     &#039;&#039;[[Inteligentný šatník]]&#039;&#039; (model)&lt;br /&gt;
 &amp;lt;li&amp;gt; Sušina, Marián:        &#039;&#039;[[Senzor teploty a vlhkosti SHT31]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Szovics, Peter:        &#039;&#039;[[Elektronická škrtiaca klapka]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Tarcal, Ondrej:        &#039;&#039;[[Simon&#039;s Game]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Ulej, Ján:             &#039;&#039;[[Kuchynské minutky]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Viest, Filip:          &#039;&#039;[[Klávesnica 2x3]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Vretenička, Šimon:     &#039;&#039;[[Ovládanie RGB LED cez Processing]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Žula, Daniel:          &#039;&#039;[[7-segmentový displej na futbal]] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;li&amp;gt; Brosz, Peter  a Diossy, Daniel: &#039;&#039;[[Automatické autíčko]]&#039;&#039;&lt;br /&gt;
 &amp;lt;li&amp;gt; Matsibora, Viačeslav a Fietisov, Dmytro: &#039;&#039;[[Dvojosová kolíska na kameru ovládaná joystickom]]&#039;&#039; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;65&amp;quot;&amp;gt;&amp;lt;S&amp;gt; Tomáš Štibrányi: Klávesnica 4x4 s radičom MH1KK1&#039;&#039; &amp;lt;/S&amp;gt;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;61&amp;quot;&amp;gt;&amp;lt;S&amp;gt; Jakub Briežnik: Jednoduché menu s rotačným enkodérom&#039;&#039; a s výberom možností &amp;lt;/S&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekty MIPS 2023 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Tomáš Bečvarov:   &#039;&#039;[[Senzor farieb TCS230]].&#039;&#039;  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Martin Cíbik:     &#039;&#039;[[Riadenie krokového motorčeka I.]]&#039;&#039;  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Viktor Fos*:      &#039;&#039;[[Rotačný enkodér]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Kristián Greif:   &#039;&#039;[[Zbernica i2c: MCP4725]] - DAC prevodník s EEPROM.&#039;&#039; Jednoduchý driver a knižnica pre tento obvod.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Ivan Hílek:       &#039;&#039;[[Postrehová hra]]&#039;&#039;  &lt;br /&gt;
 &amp;lt;li&amp;gt;Ivan Jagoš:       &#039;&#039;[[Dekodér infračerveného ovládača]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Mykyta Sabadash:  &#039;&#039;[[Hlukomer]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;lI&amp;gt;Lukáš Savčak:     &#039;&#039;[[Snímač teploty TMP36]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Juraj Štefánik:   &#039;&#039;[[Segmentový display TM1637]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Samuel Tomáš:     &#039;&#039;[[Miniatúrny analógový joystick]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Hortenzia Wollentová: &#039;&#039;[[Ovládač maticovej klávesnice]]&#039;&#039;.  2023&lt;br /&gt;
 &amp;lt;li&amp;gt;Jozef Záhora:      &#039;&#039;[[Jednoduchá terminálová kalkulačka]]&#039;&#039;. 2023&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekty MIPS 2022 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;1&amp;quot;&amp;gt; Martin Drgala: &amp;lt;!-- Lipták, Kristián: --&amp;gt; Stopky - spustenie, aspoň jeden medzičas, nulovanie. 3x tlačítko + LCD displej&lt;br /&gt;
 &amp;lt;li value=&amp;quot;2&amp;quot;&amp;gt; Veronika Remeňová: &amp;lt;!-- Turčan, Maroš: --&amp;gt;    Kuchynské minútky - nastavenie, spustenie, alarm. Tlačítko, potenciometer (nastavenie času) + LCD displej&lt;br /&gt;
 &amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; František Kapsz:  &amp;lt;!-- Buday, Bálint: --&amp;gt;    Vizualizácia polohy potenciometra na displeji - vyfarbovanie polí na displeji (ako ovládač hlasitosti)&lt;br /&gt;
 &amp;lt;li value=&amp;quot;5&amp;quot;&amp;gt; Roderik Bako: &amp;lt;!-- Belokostolský, Alex Kristóf --&amp;gt; [https://www.mathsisfun.com/games/simon-says.html Simon&#039;s Game] 4x LED, 1x tlačítko, LCD displej na skore&lt;br /&gt;
 &amp;lt;li value=&amp;quot;6&amp;quot;&amp;gt; Mário Babinský:  Hra - vyhýbanie sa prekážkam na LCD displeji, ovládanie jedným tlačidlom, hráč (auto) ide vpred a prepína jazdné pruhy (riadky displeja)&lt;br /&gt;
 &amp;lt;li value=&amp;quot;7&amp;quot;&amp;gt; Maté Tóth: Simulátor hollywood pyrotechnika - displej odrátava čas a študent má na výber dva káble ktoré môže &amp;quot;prestrihnúť&amp;quot; (odpojiť), náhodne sa zvolí jeden ktorý preruší časovať a jeden čo &amp;quot;vybuchne&amp;quot; bombu&lt;br /&gt;
 &amp;lt;li value=&amp;quot;7&amp;quot;&amp;gt; Dávid Červenka: Modifikovaný simulátor hollywood pyrotechnika - displej odrátava čas ako stĺpcový diagram a pípanei sa zrýchluje, pričom študent má na výber dva káble ktoré môže &amp;quot;prestrihnúť&amp;quot; (odpojiť), náhodne sa zvolí jeden ktorý preruší časovať a jeden čo &amp;quot;vybuchne&amp;quot; bombu&lt;br /&gt;
 &amp;lt;li value=&amp;quot;14&amp;quot;&amp;gt; Alexander Lazorík:  &amp;lt;!-- Goljer, Ivan: --&amp;gt; Hudobný nástroj ovládaný cez klávesnicu, sériovou linkou posiela tóny a Arduino ich hrá. Zapamätá si melódiu a vie ju zopakovať&lt;br /&gt;
 &amp;lt;li value=&amp;quot;15&amp;quot;&amp;gt; Pavel Bucha: Ovládanie RGB LED cez Processing pomocou troch posuvníkov ([[Meranie odporov|príklad na posuvník je tu]]).&lt;br /&gt;
 &amp;lt;li value=&amp;quot;17&amp;quot;&amp;gt; Marek Porubský: &amp;lt;!-- Berta, Kristof: --&amp;gt; &#039;&#039;Meranie teploty pomocou interného snímača procesora.&#039;&#039; (podľa [http://ww1.microchip.com/downloads/en/AppNotes/Atmel-8108-Calibration-of-the-AVRs-Internal-Temperature-Reference_ApplicationNote_AVR122.pdf AVR AppNote 122])&lt;br /&gt;
 &amp;lt;li value=&amp;quot;18&amp;quot;&amp;gt; Andrii Sikomas: &amp;lt;!-- Bilčík, Martin: --&amp;gt; &#039;&#039;Ultrazvukový senzor HC-SR04 a meranie vzdialenosti (parkovací senzor).&#039;&#039;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;19&amp;quot;&amp;gt; Adam Sližka: &amp;lt;!-- Oboril, Oliver:--&amp;gt; LED ako senzor intenzity svetla&lt;br /&gt;
 &amp;lt;li value=&amp;quot;20&amp;quot;&amp;gt; Tomáš Truben: Servomotorček ako indikátor nejakej inej veličiny - ručičku a stupnicu vyrobíte sami.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;21&amp;quot;&amp;gt; Jakub Červenka: &amp;lt;!-- Skachová, Zuzana:--&amp;gt; Semafor s akustickou signalizáciou pre nevidiacich a slabozrakých (frekvencie vid: https://sk.wikipedia.org/wiki/Akustick%C3%BD_maj%C3%A1k)&lt;br /&gt;
 &amp;lt;li value=&amp;quot;22&amp;quot;&amp;gt; Sabina Ovčiariková: &amp;lt;!-- Görözdös, Gergely: --&amp;gt; Binárne hodiny/stopky alebo počítadlo, rozsvietená LED-ky by ukazovali počet sekúnd/počet kliknutí tlačidla, mohlo by to byť sprevádzané pípnutím každých 10 stlačení alebo každú minútu.&lt;br /&gt;
 &amp;lt;li value=&amp;quot;23&amp;quot;&amp;gt; Oleksandr Shyp: &amp;lt;!-- Hajda, Jaroslav: --&amp;gt; &#039;&#039;Posúvanie bodky na 8x8 led displayi pomocou joysticku.&#039;&#039;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;29&amp;quot;&amp;gt; Martin Vdovják: &amp;lt;!-- Mosej, Samuel: --&amp;gt;Digitálny alarm - treba zadať správnu sekvenciu tlačidiel, keď sa vloží správna sekvencia rozsvieti sa tlačidlo, nesprávna sekvencia zabzučí alarm (možno aj pridať možnosť vkladať nové kódy)&lt;br /&gt;
 &amp;lt;li value=&amp;quot;36&amp;quot;&amp;gt; Attila Hriňa: &amp;lt;!--  Papcun, Miroslav: --&amp;gt; Hra na trénovanie hudobného sluchu - reproduktor zahrá 2 (náhodné) tóny a hráč musí povedať, či bol vyšší prvá alebo druhý (dve tlačidlá).&lt;br /&gt;
 &amp;lt;li value=&amp;quot;37&amp;quot;&amp;gt; Korytova, Taisiia: Svetelná križovatka s nočným režimom. &amp;lt;!-- Fabian, Maroš --&amp;gt;&lt;br /&gt;
 &amp;lt;li value=&amp;quot;38&amp;quot;&amp;gt; Ákos Keszegh: Reaction Timer&lt;br /&gt;
 &amp;lt;li value=&amp;quot;39&amp;quot;&amp;gt; Marek Trúchly: Atmel2586 s MEMS akcelerometerom&lt;br /&gt;
 &amp;lt;li value=&amp;quot;40&amp;quot;&amp;gt; Oskar Bálint: Automatické otváranie dverí s PIR senzorom&lt;br /&gt;
 &amp;lt;li value=&amp;quot;41&amp;quot;&amp;gt; Adam Kašička:  Model a signalizácia sekvenčnej prevodovky&lt;br /&gt;
 &amp;lt;li value=&amp;quot;42&amp;quot;&amp;gt; Ing. Ján Šefčík: Riadenie modelu Ball&amp;amp;Beam&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadania semestrálnych projektov v minulosti ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Toto bolo v minulosti, ale na dištančnú formu je to nevhodné. V roku 2021 nebudú pracovať vo dvojiciach, ale individuálne. &lt;br /&gt;
&lt;br /&gt;
Zadanie pozostáva z dvoch častí:&lt;br /&gt;
&lt;br /&gt;
1. teoretická časť - v tejto časti máte popísať v rozsahu max. 10 strán čo a ako ste použili. Typicky tu býva uvedený popis periférnych obvodov, ktoré ste pripojili k mikroprocesoru, použité periférie mikropočítača dôležité registre s popisom jednotlivých bitov atď. (max. 20b.)&lt;br /&gt;
Dokumentáciu budete písať do tejto wiki-stránky, prihlasovacie meno a heslo sa dozviete na cvičení. &lt;br /&gt;
Na prvé zoznámenie so systémom môžete použiť [[Testing Page|testovaciu stránku]] a [[Projekt: vzorová šablóna|vzorový projekt - šablónu]].&lt;br /&gt;
&lt;br /&gt;
2. program - okrem predvedenia programu cvičiacemu je poterbné napísať k nemu tiež krátky popis, alebo vývojový diagram. Môže byť súčasťou prvej časti zadania. (max. 20 b.)&lt;br /&gt;
&lt;br /&gt;
Termín na odovzdanie je na dohode s cvičiacim, najneskôr do skúšky. Na zadaní môžete pracovať priebežne, alebo sa dohodnite s cvičiacim na súvislej práci v laboratóriu (napr. jeden celý deň). POZOR: niektoré zadania vyžadujú prípravu aj od cvičiaceho, nečakajte preto, že prídete a budete mať všetko na prácu nachystané -- treba sa vopred dohodnúť.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekty 2014&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Lechvár, Slaminka: &#039;&#039;[[Meranie pulzovej frekvencie.]]&#039;&#039; 2014.&lt;br /&gt;
* Jankovič, Lukáč: &#039;&#039;[[Zbernica i2c: hodiny RTC.]]&#039;&#039; 2014.&lt;br /&gt;
* Bača, Galovič: &#039;&#039;[[Bezdrôtová komunikácia v pásme 433 MHz.]]&#039;&#039; 2014.&lt;br /&gt;
* Katona, Nehánszki: &#039;&#039;[[Hodiny RTC s kalendárom pomocou PCF8583]]&#039;&#039;. 2014.&lt;br /&gt;
* Benedek, Cintula, Gahér: &#039;&#039;[[Trojosí gyroskopický modul L3G4200D]]&#039;&#039;. 2014.&lt;br /&gt;
* Šandal, Vincze: &#039;&#039;[[Trojosí akcelerometer MMA7455]]&#039;&#039;. 2014.&lt;br /&gt;
* Kocian, Švančara: &#039;&#039;[[RFID čítačka]]&#039;&#039;. 2014&lt;br /&gt;
* Martinkovič, Valach: &#039;&#039;[[RFID čítačka II]]&#039;&#039;. 2014&lt;br /&gt;
* Jakubička, Vyletel: &#039;&#039;[[Inkrementálny snímač]]&#039;&#039;. 2014&lt;br /&gt;
* Bohuš, Vargic, Gašparová: &#039;&#039;[[MEMS mikrofón ADMP401]]&#039;&#039;. 2014&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekty 2013&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Godál, R. a Šimončič, M.: &#039;&#039;[[Meranie reakčnej doby]].&#039;&#039; 2013.&lt;br /&gt;
* Leško, D. a Biath, V.: &#039;&#039;[[MiniMEXLE Hodiny na orientačný beh]].&#039;&#039; 2013.&lt;br /&gt;
* Paulen, J. a Vojvoda, R.: &#039;&#039;[[Meranie krátkych intervalov]].&#039;&#039; 2013.&lt;br /&gt;
* Jurák, M. a Vlahi, L.: &#039;&#039;[[Meranie časového intervalu]].&#039;&#039; 2013.&lt;br /&gt;
* Rybárik, M. a Lukáč, M.: &#039;&#039;[[Odpočítavacie hodiny na riadenie diskusie]].&#039;&#039; 2013.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekty 2012&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cebák, Darvaši:  &#039;&#039;[[Zbernica i2c: SAA1064|Zbernica i2c: 7-segmentový displej.]]&#039;&#039; 2012.&lt;br /&gt;
* Pecho, Lacko:    &#039;&#039;[[Projekt: Infračervené ovládanie|Infračervené ovládanie]]&#039;&#039; 2012.&lt;br /&gt;
* Rekšák, Mrva:    &#039;&#039;[[Projekt: Inkrementálny snímač otáčok|Inkrementálny snímač otáčok.]]&#039;&#039; 2012.&lt;br /&gt;
* Boráros, Gál:    &#039;&#039;[[Zbernica i2c: FM rádio]].&#039;&#039; 2012.&lt;br /&gt;
* Berčák, Harmata: &#039;&#039;[[Projekt: Hodiny A|Hodiny na orientačný beh I.]]&#039;&#039; 2012.&lt;br /&gt;
* Géczy, Kamenský: &#039;&#039;[[Projekt: Hodiny B|Hodiny na orientačný beh II.]]&#039;&#039; 2012.&lt;br /&gt;
&lt;br /&gt;
* Szolik, Šnyr:    &#039;&#039;[[Projekt: Snímač teploty SMT160|Snímač teploty SMT160]]&#039;&#039; 2012.&lt;br /&gt;
* Gálik, Gogola:   &#039;&#039;[[Projekt: Dvojosí akcelerometer A|Dvojosí akcelerometer I.]]&#039;&#039; 2012.&lt;br /&gt;
* Virág, Topoli:   &#039;&#039;[[Projekt: Dvojosí akcelerometer B|Dvojosí akcelerometer II.]]&#039;&#039; 2012.&lt;br /&gt;
* Statečný:        &#039;&#039;[[Zbernica i2c: SHT11|Zbernica i2c: snímač teploty a vlhkosti SHT11]]&#039;&#039; 2012.&lt;br /&gt;
* Vincze, Rozsár:  &#039;&#039;[[Projekt: Snímač farby ColorPal|Snímač farby ColorPal]]&#039;&#039; 2012.&lt;br /&gt;
* Baláž, Kupčiha:  &#039;&#039;[[Projekt: Snímač teploty DS18B20|Snímač teploty DS18B20]]&#039;&#039; 2012.&lt;br /&gt;
* Mazúch, Lovaš, Oravec: &#039;&#039;[[1-Riadková kamera TSLR1401|1-Riadková kamera TSLR1401]]&#039;&#039; 2012.&lt;br /&gt;
* Špitálová: [[Parkovací senzor]] 2012.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Zbernica_i2c:_RTC_Hodiny&amp;diff=18410</id>
		<title>Zbernica i2c: RTC Hodiny</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Zbernica_i2c:_RTC_Hodiny&amp;diff=18410"/>
		<updated>2026-04-10T08:39:21Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Dekod%C3%A9r_morzeovky&amp;diff=18409</id>
		<title>Dekodér morzeovky</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Dekod%C3%A9r_morzeovky&amp;diff=18409"/>
		<updated>2026-04-10T08:39:15Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=Jednoduch%C3%BD_P_regul%C3%A1tor&amp;diff=18408</id>
		<title>Jednoduchý P regulátor</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=Jednoduch%C3%BD_P_regul%C3%A1tor&amp;diff=18408"/>
		<updated>2026-04-10T08:39:08Z</updated>

		<summary type="html">&lt;p&gt;Balogh: Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - &amp;#039;&amp;#039;&amp;#039;Meno Priezvisko&amp;#039;&amp;#039;&amp;#039;   == Zadanie ==  Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie  Vývojová doska ACROB.  &amp;#039;&amp;#039;&amp;#039;Literatúra:&amp;#039;&amp;#039;&amp;#039;  * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Záverečný projekt predmetu MIPS / LS2026 - &#039;&#039;&#039;Meno Priezvisko&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zadanie ==&lt;br /&gt;
&lt;br /&gt;
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie&lt;br /&gt;
&lt;br /&gt;
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Literatúra:&#039;&#039;&#039; &lt;br /&gt;
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]&lt;br /&gt;
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Analýza  a opis riešenia ==&lt;br /&gt;
&lt;br /&gt;
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...&lt;br /&gt;
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]&lt;br /&gt;
&lt;br /&gt;
Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Algoritmus a program ===&lt;br /&gt;
&lt;br /&gt;
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... &lt;br /&gt;
Výpis kódu je nižšie...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;AVR C-code&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int measuredValue;&lt;br /&gt;
&lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
    /*  relax  */  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;filename.h&amp;quot;&amp;gt;&amp;lt;syntaxhighlight  lang=&amp;quot;c++&amp;quot; style=&amp;quot;background: LightYellow;&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void adc_init(void);                                   // A/D converter initialization&lt;br /&gt;
&lt;br /&gt;
unsigned int adc_read(char a_pin);&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x &#039;&#039;zdrojaky.zip&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Overenie ===&lt;br /&gt;
&lt;br /&gt;
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. &lt;br /&gt;
Na konci uvádzame fotku hotového zariadenia. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;youtube&amp;gt;D0UnqGm_miA&amp;lt;/youtube&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Čo by som urobil inak ==&lt;br /&gt;
&lt;br /&gt;
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kľúčové slová &#039;Category&#039;, ktoré sú na konci stránky nemeňte. &lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]] [[Category:MIPS]]&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
</feed>