Operácie

Kobuki

Zo stránky SensorWiki

Verzia z 15:07, 6. máj 2026, ktorú vytvoril Balogh (diskusia | príspevky) (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…“)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)

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

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.

Laserový skener RPLidar A1

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.

Technické parametre

Z nasledujúcich tabuliek vyberte parametre relevantné pre vaše výpočty.

Parametre robota Kobuki
Parameter Hodnota
Maximálna translačná rýchlosť 70 cm/s
Maximálna rotačná rýchlosť 180 deg/s
Rázvor kolies (L) 230 mm
Rozlíšenie enkodéra 2578.33 ticks/wheel rev
Hustota impulzov 11.7 ticks/mm
Frekvencia senzorových dát 50 Hz
Napätie batérie 14.8 V
Hmotnosť 2.35 kg
Parametre RPLidar A1
Parameter Hodnota
Rozsah merania 0.15 – 12 m
Uhlový rozsah 0 – 360°
Uhlové rozlíšenie ≤ 1°
Frekvencia skenovania 5.5 Hz (typická)
Smer rotácie V smere hod. ručičiek (CW)
Napájanie 5 V / 500 mA
Presnosť vzdialenosti < 1% (pri 12 m)

Metodika merania

  1. Pomocou joysticku alebo klávesnice ovládajte robota v prostredí bludiska.
  2. Prejdite všetky hlavné chodby aj slepé uličky. Pomalší a plynulý pohyb zaručuje kvalitnejšie dáta.
  3. Počas pohybu systém automaticky ukladá dáta do súborov robot.log a laser.log.

Formát nameraných dát

Súbor robot.log

Každý riadok obsahuje jeden časový záznam:

  1. Timestamp [us] – Čas merania v mikrosekundách.
  2. Left Encoder – Kumulatívny počet impulzov ľavého kolesa.
  3. Right Encoder – Kumulatívny počet impulzov pravého kolesa.
  4. Gyro Angle [deg] – Aktuálny uhol natočenia robota v stupňoch.

Súbor laser.log

Obsahuje surové merania z lidaru:

  1. Timestamp [us] – Synchronizačný čas.
  2. Distance [mm] – Vzdialenosť k prekážke.
  3. Angle [deg] – Uhol lúča voči osi robota (0° = vpred).
  4. Quality – Kvalita odrazu (celé číslo).

Teória výpočtu

Ideálny model pohybu

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 :

Natočenie robota berieme priamo z gyroskopu. Nová poloha v rovine sa vypočíta integráciou:

Ideálne mapovanie

Bod nameraný lidarom (vzdialenosť , uhol ) prenesieme do globálnej mapy pomocou natočenia robota :

Praktické problémy a implementácia

Pretečenie enkodérov

Enkodéry robota sú 16-bitové nesignované integery (0 – 65535). Pri výpočte rozdielu musíte ošetriť skokovú zmenu hodnoty pri pretečení (overflow).

Ukážka v Matlabe:

diff = current - previous;
if diff > 32767, diff = diff - 65536; end
if diff < -32768, diff = diff + 65536; end

Ukážka v Pythone:

diff = current - previous
if diff > 32767: diff -= 65536
elif diff < -32768: diff += 65536

Uhol a smerovanie

Gyroskop vracia uhol v rozsahu ±180°. Pred interpoláciou sa odporúča použiť funkciu unwrap, ktorá odstráni skoky pri prechode cez hranicu.

  • Pozor: Lidar meria uhol 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 ().

Synchronizácia časových značiek

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.

Matlab: interp1(robot_time, robot_x, laser_time) Python (numpy): np.interp(laser_time, robot_time, robot_x)

Úlohy

  1. Načítajte logy a vykonajte konverziu jednotiek (impulzy -> metre, mm -> metre).
  2. Vypočítajte trajektóriu [x, y] a vykreslite ju.
  3. Transformujte body z lidaru do globálnych súradníc (filtrujte body s kvalitou 0 a vzdialenosťou mimo 0.15 - 6 m).
  4. Vykreslite mapu bludiska (čierne body) a do nej vložte trajektóriu robota (farebná čiara).