Tartalom
  1. Érzékelés
    1. Kamera
    2. LIDAR
    3. Radar
    4. IMU
    5. GNSS (GPS)
    6. CAN bus
  2. ROS 2 időkezelés
  3. Források

Érzékelés

Az érzékelés nyers adatok beolvasását jelenti.

Érzékelés esetében fontos felhívi a figyelmet, hogy ez még nem jelent magas szintű adatfeldolgozást. Szenzorai lehetnek kamerák, mikrofonok, LIDAR-ok stb. Ahogy az ábra is mutatja a tananyagban az érzékeléssel együtt tárgyaljuk az aktuálást is.

Magyar nyelven könnyű összekeverni az érzékelés (sensing) és az észlelés (perception) foglamakat. Az érzékelés egyszerű driver szintű nyers adatok előállításával foglakozik.

Kamera

A kamera az érzékelőjére (pl CCD CMOS szenzor) érkező fényt elektronikus jellé alakítja, diitálisan. Megkülönböztethetünk mono, sztereo vagy mélységérzékelésre képes kamerákat is.

cam

LIDAR

A LIDAR (Light Detection and Ranging) szenzor egy olyan eszköz, amely lézerpulzusokkal és azok visszaverődési idejéből távolságokat képes megállapítani. Az elve hasnoló a lézeres távolságmérőhöz, ám a mérés gyakorisága és frekvenciája is sokkal naygobb annál. Példaképp vegyünk egy forgó 64 csatornás LIDAR-t. Ez jellemzően 10 vagy 20 Hz-en mér, tehát másodpercenként 10 vagy 20 teljes 360°-os körbefordulást tesz meg. A 64 csatorna azt jelenti, hogy minden pillanatban 64 egymás alatti érzékelő érzékel. Egy körbefordulást jellemzően 512 / 1024 / 2048 mérést jelent csatornánként. Innen ki is számolható a másodpercenkénti mérésadat: pl 20*64*1024 = 1 310 720. Tehát jellemzően másodpercenként, több mint egymillió 3D pontot mér az eszköz, amihez intenzitás, ambient, reflektív tulajdonságok is társulnak.

  • Jellemző gyártók: Velodyne, Ouster, Livox, SICK, Hokuy, Pioneer, Luminar, Hesai, Robosense, Ibeo, Innoviz, Quanenergy, Cepton, Blickfeld, Aeva
  • Jellemző interfész: GigE
  • Jellemző ROS 2 topic típusok: sensor_msgs/msg/PointCloud2, sensor_msgs/msg/LaserScan

LIDAR gyártókat, dataseteket, algoritmusokat tartlamazó gyűjtemény: github.com/szenergy/awesome-lidar.

lidar

Radar

  • Jellemző gyártók: Aptiv, Bosch, Continental, Denso
  • Jellemző interfész: CAN bus
  • Jellemző ROS 2 topic típusok: radar_msgs/msg/RadarTrack

A LIDAR és a kamera jellemzőinek összehasonlítása

IMU

Az IMU kis méretű elektromechanikus giroszkópokat és gyorsulásmérőket, valamint jelfeldolgozó processzorokat tartalmazó szenzor. Gyakran kombinálják további szenzorokkal, pl. barometrikus magasságmérővel, magnetométerrel, iránytűvel. Némely GPS (GNSS) rendszerben is megtalálhatók.

imu

GNSS (GPS)

A GNSS (global navigation satellite system) globális szatelit-alapú navigációs rendszert jelent, köznapi szóhasználatban ezt szokás GPS-nek nevezni. Ha pontosak szeretnénk lenni, akkor a GPS csupán az első ilyen technológia ezen kívül létezik még GLONASS, BeiDou, Galileo és QZSS rendszer is, ezek üzemeltetése különböző államokhoz / szövetségekhez kötődik.

gnss

Rövid, de jó leírás a GNSS pontosságról: www.sbg-systems.com/news/mastering-accurac-gnss-and-its-errors-sources/

CAN bus

A CAN bus (Controller Area Network) egy jellemően autóipari szabvány, mely lehetővé teszi a mikrokontrollerek és az eszközök számára, hogy központi egység (host) nélkül kommunikáljanak egymással. Az ethernet kommunkációval összevetve egyszerűbb megvalósítás, alacsonyabb sávszélességű, robosztus.

can

ROS 2 időkezelés

Az ROS idő kezelésre a Unix-időt, vagy a POSIX-időt használja. Ez a UTC (greenwichi idő) szerinti 1970. január 1. 00:00:00 óta eltelt másodpercek és nanoszekundumok számát jelenti (int32 sec, int32 nsec). Ez egyrészt relatív kis helyet foglal a memóriában, másrészt könnyen számolható két időpont között eltelt idő, mégpedig egy egyszerű kivonással.

ros2time.ipynb

Hátránya, hogy nem túl intuitív, nem olvasható az ember számára. Pl. a Foxglove Studio ezért is gyakran átalakítja olvashatóbb formátumra.

foxglove

A másodpercek és nanoszekundumok a következőképp képzelhetők el:

import rclpy
current_time = node.get_clock().now()
print(current_time.to_msg())

Output: 
sec=1694595162, nanosec=945886859

Az időbélyeg több helyen is szerepet kap:

ros2 topic echo /clock --once
clock:
  sec: 1689687476
  nanosec: 770421827
ros2 topic echo --once /lexus3/gps/duro/current_pose

header:
  stamp:
    sec: 1694595162
    nanosec: 945886859
  frame_id: map
pose:
  position:
    x: 640142.9676535318
    y: 5193606.439717201
    z: 1.7999999523162842
  orientation:
    x: 0.008532664424537166
    y: 0.0018914791588597107
    z: 0.44068499630505714
    w: 0.8976192678279703

Ha szeretnénk átválatni a másodperceket és nanoszekundumokat, azt a következő módon tehetjük meg:

from datetime import datetime
current_time_float = current_time.to_msg().sec + current_time.to_msg().nanosec / 1e9 # 1e9 is 1,000,000,000: nanosec to sec
print("As a float:\t%.5f" % (current_time_float))
print("ISO format:", end="\t")
print(datetime.utcfromtimestamp(current_time_float).isoformat())


Output:
As a float:	1694595162.94589
ISO format:	2023-09-13T08:52:42.945887

Források


Table of contents