Kobuki
Zo stránky SensorWiki
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.
| 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 |
| 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
- Pomocou joysticku alebo klávesnice ovládajte robota v prostredí bludiska.
- Prejdite všetky hlavné chodby aj slepé uličky. Pomalší a plynulý pohyb zaručuje kvalitnejšie dáta.
- 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:
- Timestamp [us] – Čas merania v mikrosekundách.
- Left Encoder – Kumulatívny počet impulzov ľavého kolesa.
- Right Encoder – Kumulatívny počet impulzov pravého kolesa.
- Gyro Angle [deg] – Aktuálny uhol natočenia robota v stupňoch.
Súbor laser.log
Obsahuje surové merania z lidaru:
- Timestamp [us] – Synchronizačný čas.
- Distance [mm] – Vzdialenosť k prekážke.
- Angle [deg] – Uhol lúča voči osi robota (0° = vpred).
- 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
- Načítajte logy a vykonajte konverziu jednotiek (impulzy -> metre, mm -> metre).
- Vypočítajte trajektóriu [x, y] a vykreslite ju.
- Transformujte body z lidaru do globálnych súradníc (filtrujte body s kvalitou 0 a vzdialenosťou mimo 0.15 - 6 m).
- Vykreslite mapu bludiska (čierne body) a do nej vložte trajektóriu robota (farebná čiara).