ROS 2:n 3D-LiDAR-integraatio
Käytännöllinen polku yhtenäisen Hesai ROS 2 -ajurin rakentamiseen, oikean tietolähteen valitsemiseen ja validointiin /lidar_points, ja PandarXT32-tyyppisen integraation siirtäminen Autoware-työtilaan sekoittamatta ajurin asetuksia ajoneuvopinon asetuksiin.
Lyhyt vastaus: nykyinen Hesai ROS -tietovarasto perustuu HesaiLidar_SDK_2.0-kokonaisuuteen. Kloonaa se aliprojekteineen, käännä se ROS 2 -työtilassa ja varmista, että source_type kuvaa ajurille todellisuudessa lähettämääsi dataa. Reaaliaikainen UDP, PCAP-toisto, pakettien toisto ROS-bagista ja JT16-sarjapolku ovat eri syötteitä. Hämmentävät virheet alkavat yleensä siitä, että toistolähteeltä puuttuu korjaus- tai firetime-tiedosto tai että hyödyllinen pistepilvi jää verkko-, kehys- tai aihe-epäsopivuuden peittoon.
source_type määrittää, odottaako ajuri reaaliaikaisia paketteja, PCAP-tiedostoa, ROS:n pakettidataa vai JT16-sarjaliitäntää.
/lidar_points oletusarvoisesti, mikä tarjoaa konkreettisen validointipisteen ennen hahmontunnistustyön aloittamista.
Mitä Hesain ROS 2 -ajuri todella tekee
Hesai julkaisee yhtenäisen ROS- ja ROS 2 -ajurin, joka vastaanottaa LiDAR-paketteja, välittää ne Hesai SDK:n kautta ja tarjoaa pistepilvidataa ROS-graafille. Tämä on 3D-LiDAR-työnkulku: se ei ole tasomainen LaserScan integraatio, joka on puettu erilaisen käynnistystiedoston muotoon. Hyödyllinen ensimmäinen virstanpylväs on vakaa PointCloud2-viesti, jonka aikaleima, kehys ja spatiaalinen käyttäytyminen ovat järkeviä todellisessa robotin koordinaatistossa.
Tietovarasto tukee Pandar-, OT-, QT-, XT-, AT-, FT- ja JT-perheiden malleja. Mallin nimi on silti tärkeä: pakettimuodon, kalibrointitiedostojen, siirtoasetusten ja projektitason käynnistysasetusten on vastattava anturia ja ajuriversiota. Toimiva PandarXT32-kokoonpano on näyttöä vain kyseisen yhdistelmän toimivuudesta, ei kaikista Hesai-laitteista.
ROS 2 -projektissa pidä tietopolku mielessä yksinkertaisena: anturipaketit saapuvat isäntäkoneelle, ajuri purkaa ne valitun lähteen ja kalibrointisyötteiden avulla, minkä jälkeen ROS julkaisee pistepilven RVizille, muunnoksille, lokitukseen tai seuraavalle käsittelyketjulle. Selvitä jokainen taso ennen ylemmälle siirtymistä. Näin ”ei pisteitä” -tilanteet, vääristynyt geometria ja katkonaiset paketit on paljon helpompi rajata.
| Taso | Mitä on varmistettava | Edistymisen merkit |
|---|---|---|
| Fyysinen anturi | Vakaa virransyöttö, kiinteä kiinnitys, suojattu verkkoyhteys ja tunnettu malli. | Pakettien saapuminen isäntäkoneen liitäntään on johdonmukaista. |
| Ajurin syöte | Oikea source_type ja lähdekohtaiset asetukset. |
Ajuri käynnistyy ilman syöte- tai kalibrointivirhettä. |
| ROS-tuloste | Pistepilviaihe, kehyksen tunnus ja muunnossuunnitelma. |
/lidar_points ilmestyy ja sisältää PointCloud2-dataa. |
| Sovelluspino | Autoware-, kartoitus-, paikannus- tai mukautetun hahmotuksen parametrit. | Kuluttava pino vastaanottaa tarkoitetun aiheen ja geometrian. |
Rakenna yhtenäinen ajuri puhtaassa ROS 2 -työtilassa
Virallisessa ajuridokumentaatiossa luetellaan ROS 2 Dashing-, Foxy-, Humble- ja Jazzy-ympäristöt. Ubuntu 22.04:n Humble on edelleen käytännöllinen lähtökohta monissa käytössä olevissa robottiohjelmissa, ja sama repositoriodokumentaatio kattaa myös uudemman Jazzy-polun. Aloita omassa työtilassa, jotta vanha lähdekoodin uloskuittaus, vanhentunut install-puu tai asiaankuulumaton overlay ei peitä tulosta.
Tärkeä yksityiskohta on rekursiivinen kloonaus. Ajuri riippuu Hesai SDK -alikansiosta. Tavallinen kloonaus voi jättää lähdepuun puutteelliseksi ja saada riippuvuusvirheen näyttämään kääntäjäongelmalta.
sudo apt-get update
sudo apt-get install -y libboost-all-dev libyaml-cpp-dev
mkdir -p ~/hesai_ws/src
cd ~/hesai_ws/src
git clone --recurse-submodules https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0.git
cd ~/hesai_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install
source install/local_setup.bash
ros2 launch hesai_ros_driver start.py
ROS 2 Dashing käyttää virallisissa ohjeissa eri käynnistyskomentoa: ros2 launch hesai_ros_driver dashing_start.pyPidä tämä poikkeus paikallisena Dashing-järjestelmässä äläkä kopioi sitä Humble- tai Jazzy-ympäristöön. Vakiokäynnistyskomento ei yksin määritä anturimallia, vaan se lukee repositorion määritykset ja siellä annetut syöttövalinnat.
source install/local_setup.bash jokaisessa uudessa komentotulkissa, josta ajuri käynnistetään. Onnistunutta koontia seuraava ”pakettia ei löydy” tarkoittaa usein vain sitä, ettei overlay-ympäristöä ole ladattu.Valitse source_type Ennen muiden asioiden muokkaamista
Ajurin määrityksissä source_type on kuvaus siitä, mistä pakettidata tulee. Se ei ole suorituskykytila eikä lyhenne LiDAR-mallille. Nykyinen ajuridokumentaatio erottaa toisistaan reaaliaikaisen laitteen UDP-liikenteen, PCAP-toiston, ROS:n kautta välitettävän pakettidatan ja JT16-sarjaliikennevaihtoehdon. Kullakin reitillä on omat pakolliset tietonsa.
| source_type | Syöttöreitti | Määritysten painopiste | Yleinen sudenkuoppa |
|---|---|---|---|
| 1 | Reaaliaikainen LiDAR-UDP | Laitteen IP-osoite, UDP- ja PTC-portit, tavoitettavissa oleva liitäntä, kalibroinnin varamenetelmä. | Väärän isäntäliitännän kuunteleminen tai ICMP-toiminnan olettaminen todisteeksi UDP-yhteyden toimivuudesta. |
| 2 | PCAP-toisto | PCAP-polku, korjaustiedosto ja firetime-tiedosto. | Pakettien toisto ilman mukana toimitettuja kalibrointisyötteitä. |
| 3 | Pakettien rosbag-toisto | Pakettiaihe sekä korjaus- ja firetime-tiedostot. | PointCloud2-rosbag, jossa ajuri odottaa tallennettuja paketteja. |
| 4 | Sarjaportin polku | JT16:n sarjaliikennekokoonpanon tiedot. | Tämän haaran soveltaminen verkkoon yhdistettyyn laitteeseen. |
Aloita täsmälleen käytetyn ohjain-checkoutin mukana toimitetusta kokoonpanotiedostosta. Seuraava on tarkoituksella pieni reaaliaikaisen UDP:n katkelma, ei täydellinen korvaava tiedosto. Se näyttää arvot, jotka on syytä tarkistaa tietoisesti. Dokumentoidut oletusarvot sisältävät UDP-portin 2368 ja PTC-portti 9347; asiakasverkko, anturin verkkokokoonpano tai ajoneuvointegraatio voi muuttaa näitä arvoja.
lidar:
- ohjain:
käytä_gpu: false
lähdetyyppi: 1
lidar_udp-tyyppi:
laitteen_ip-osoite: "192.168.1.201"
udp-portti: 2368
ptc-portti: 9347
käytä_ptc-yhteyttä: true
korjaustiedoston_polku: "/opt/hesai/calibration.csv"
firetimes_polku: ""
ros:
ros_kehystunnus: hesai_lidar
ros_lähetä_pistepilvi_aihe: /lidar_points
lähetä_pistepilvi_ros: true
Korjaustiedoston riviä kannattaa pitää teknisenä varmistuksena. Reaaliaikainen käyttö voi hakea kalibroinnin PTC-yhteyden kautta, jos yhteys on käytettävissä, mutta virallinen dokumentaatio suosittelee korjaustiedostoa estämään jäsennysvirheen tilanteessa, jossa LiDARin kulmakalibrointia ei saada haettua. Säilytä tiedosto muutostenhallinnan alaisena yhdessä anturikokoonpanon kanssa, älä nimettömässä lataushakemistossa.
PCAP- ja rosbag-toisto vaativat muutakin kuin tallenteen
Toisto on vaihe, jossa muuten siisti esittely muuttuu harhaanjohtavaksi dataksi. PCAP sisältää pakettidataa; se ei välttämättä sisällä kaikkia kalibrointitietoja, joita tarvitaan pakettien ajoituksen ja paluiden muuntamiseen luotettavaksi pistepilveksi. Hesain ohjain dokumentoi korjaustiedoston ja firetime-tiedoston PCAP-toistoa varten. Pakettirosbagin toisto noudattaa samaa periaatetta, ja tallennettu pakettiaihe lisätään kokoonpanoon.
Tämä on tärkeintä regressiotestauksessa. Tiimit ylläpitävät usein pientä tallennekirjastoa jäsenninmuutosten, hahmotuspäivitysten ja ajoneuvokokoonpanojen testaamista varten. Säilytä jokainen PCAP- tai pakettirosbag yhdessä tallennushetkellä käytettyjen korjaus- ja firetime-tiedostojen kanssa, dokumentoi malli ja ohjainversio sekä kirjaa, sisältääkö loki reaaliaikaisia paketteja vai aiemmin dekoodatun pistepilven. Näin toistosta tulee visuaalisen likiarvon sijaan toistettava testi.
lidar:
- ohjain:
lähdetyyppi: 2
pcap_tyyppi:
pcap_polku: "/data/hesai/run.pcap"
korjaustiedoston_polku: "/data/hesai/correction.csv"
firetimes_polku: "/data/hesai/firetimes.csv"
ros:
ros_kehystunnus: hesai_lidar
ros_lähetä_pistepilvi_aihe: /lidar_points
lähetä_pistepilvi_ros: true
lidar:
- ohjain:
lähdetyyppi: 3
rosbag_tyyppi:
korjaustiedoston_polku: "/data/hesai/correction.csv"
firetimes_polku: "/data/hesai/firetimes.csv"
ros_vastaanota_pakettiaihe: "/hesai_packets"
ros:
ros_kehystunnus: hesai_lidar
ros_lähetä_pistepilvi_aihe: /lidar_points
lähetä_pistepilvi_ros: true
Esimerkissä olevat nimet eivät korvaa toimitettua YAML-skeemaa. Käytä koneelle asennetun repositorioversion täsmällisiä kenttänimiä, erityisesti PCAP- ja rosbag-lohkoissa. Nykyisessä haarassa kelpaava kenttä voidaan ohittaa tai hylätä vanhemmassa checkout-versiossa.
Varmista verkko ennen pistepilvien vianmääritystä
Tyhjä visualisoija houkuttelee aloittamaan RViz-asetuksista, mutta pakettien saapuminen on nopeampi tarkistettava asia. Selvitä anturiverkkoon yhdistetty langallinen liitäntä, varmista isännän osoitesuunnitelma ja tarkkaile odotettua UDP-porttia. Ping voi olla kätevä, mutta ICMP-vastauksen puuttuminen ei osoita, että UDP-virta puuttuisi. Pakettikaappaus on verkkokerroksen ratkaiseva havainto.
ip addr show enp2s0
ping -c 3 192.168.1.201
sudo tcpdump -ni enp2s0 udp port 2368
ros2 topic list
ros2 topic info /lidar_points
Korvaa enp2s0 ja IP-osoite todellisen liitännän ja laitteen asetusten kanssa. Tavoitteena ei ole säilyttää näitä esimerkkiarvoja, vaan todistaa ketju järjestyksessä: paketit saapuvat, ohjain toimii, pistepilviaihe on olemassa ja tilaajat voivat käyttää sitä. Tämä lähestymistapa havaitsee myös vahingossa valitun Wi-Fi-reitin tai yritysverkkosovittimen, joka on asetettu erillisen anturi-NIC:n edelle.
| Oire | Tarkista ensin | Todennäköinen korjaus |
|---|---|---|
| Ohjaimelta ei saada tulostetta | Overlay-koonti, launch-tiedosto ja YAML-polku. | Lähdekoodaa työtila ja käynnistä ROS 2:lle tarkoitettu kokoonpano. |
| Portissa 2368 ei ole paketteja | Isäntäkoneen liitäntä, VLAN, laitteen osoite, kaapeli ja virransyöttö. | Korjaa fyysinen tai verkkoreitti ennen dekooderin arvojen muuttamista. |
| Aihe on olemassa, mutta pistepilvi on tyhjä tai virheellinen |
source_type, korjaustiedot ja toistotiedostot. |
Yhdistä tallenne sen korjaus- ja firetime-tiedostoihin. |
| Pistepilvi näyttää siirtyneeltä RVizissä |
ros_frame_id ja muunnosketju. |
Käytä tarkoituksellisesti valittua anturikehystä ja mitattua staattista muunnosta. |
| Autoware ei näe odotettua syötettä | Aihe- ja kehyskäytäntö integrointirajalla. | Mukauta ajoneuvopinon kokoonpanoa sen sijaan, että kirjoittaisit ohjaimen sokeasti uudelleen. |
Muodosta /lidar_points Merkityksellinen ROS-sopimus
Ohjainkokoonpano tarjoaa kohteen ros_send_point_cloud_topic ja asettaa oletusarvoksi /lidar_points. Säilytä tämä nimi varhaisen validoinnin ajan. Se tarjoaa RVizille, tallennustyökaluille ja jatkokäsittelysolmuille vakaan havaintopisteen muun järjestelmän vielä muuttuessa. Nimeä se uudelleen tai uudelleenohjaa se myöhemmin vasta, kun kohdejärjestelmän rajapintasopimus on selkeä.
Avaa RViz ja lisää julkaistulle aiheelle PointCloud2-näkymä. Aseta kiinteäksi kehykseksi kehys, jolla on kelvollinen muunnossuhde kehyksen kanssa hesai_lidartai käytä tilapäisesti anturin kehystä varmistaessasi raakadataa. PointCloud2-asettelu voi vaihdella ohjainversion ja laitteen mukaan; tarkista aktiivisen järjestelmän tuottama viesti ennen mukautetun sovittimen kirjoittamista, jos se olettaa kenttien järjestyksen tai aikaleimakäytännön.
ros2 topic info /lidar_points -v
ros2 interface show sensor_msgs/msg/PointCloud2
ros2 run tf2_ros tf2_echo base_link hesai_lidar
# Toisessa päätelaitteessa
rviz2
Raakavisualisointi ei ole päätepiste. Pysäköi robotti tunnettujen tasojen ja reunojen lähelle: seinän, lavan sivun, turvapylvään, rampin ja lattian. Yhdestä kamerakulmasta uskottavalta näyttävä pistepilvi voi silti sisältää virheellisen kiinnitysmuunnoksen tai vanhentuneen kalibrointitiedoston. Alustan hidas liikuttaminen toistettavaa reittiä pitkin on parempi tapa testata ajallista johdonmukaisuutta kuin yksi staattinen kuvakaappaus.
Autoware-integraatio: pidä kaksi kokoonpanokerrosta erillään
Autoware Foundationin LSA-viitedokumentaatio sisältää Hesai LiDAR -osion ja näyttää PandarXT32:n kokoonpanopolun. Se on hyödyllinen, koska siinä yhdistyvät tietyn LiDAR-mallin tiedot, verkko-osoite, vastaanottoportti, aloituskulma ja kulmaresoluutio Autoware-suuntautuneeseen anturikokoonpanoon. Se ei korvaa Hesai-ohjaimen YAML-tiedostoa. Nämä kaksi tiedostoa ratkaisevat toisiinsa liittyviä mutta eivät identtisiä ongelmia.
Ohjaimen YAML-tiedosto kertoo Hesai-paketille, miten data vastaanotetaan ja puretaan. Autowaren kokoonpano kertoo ajoneuvon ohjelmistopinolle, mikä LiDAR-laite integroidaan ja miten kyseinen anturi liittyy ajoneuvon laajempaan kokoonpanoon. Näiden käyttöalojen pitäminen erillään suojaa toimivaa ohjainta asiaan liittymättömältä ajoneuvopinon muokkaukselta ja tekee katselmoinnista paljon selkeämpää.
cd ~/autoware_ws/src
git clone --recurse-submodules https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0.git
cd ~/autoware_ws
colcon build --packages-select hesai_ros_driver
# Mallikohtaiset arvot kuuluvat Autowaren anturikokoonpanoon.
lidar_type: "PandarXT32"
server_ip: "192.168.1.201"
lidar_recv_port: 2368
gps_recv_port: 10110
start_angle: 0
resolution: 0.2
Käytä Autowaren virallista esimerkkiä mallikohtaisen lähtökohdan pohjana ja vertaa sitä sitten asennettuun Autoware-versioon sekä todelliseen anturiverkkoon. Ohjaimen dokumentoitu oletusarvoinen PTC-portti on 9347, kun taas yllä oleva esimerkki sisältää GPS-vastaanottimen portin osana laajempaa ajoneuvokokoonpanoa. Nämä eivät ole keskenään vaihdettavia asetuksia.
Useita LiDAR-laitteita, CUDA ja ”yksi kokoonpano sopii kaikille” -ajattelun rajat
Ohjainkokoonpanossa voidaan määrittää useita lidar lohkoja, joten se soveltuu projektiin, joka tarvitsee useamman kuin yhden Hesai-anturilähteen. Anna kullekin anturille erillinen kehystunnus, erilliset lähdeparametrit ja eksplisiittinen muunnos. Kaksi virtaa, joilla on sama kehyksen tai aiheen nimi, voi näyttää toimivan, kunnes niitä käyttää kartoitin, paikannusputkisto tai bag-tallennin.
Koontijärjestelmässä dokumentoidaan myös PTC:n käyttöön ja CUDAn havaitsemiseen liittyviä asetuksia. WITH_PTCS_USE ohjaa PTC SSL:ään liittyvää asetusta, ja se on oletusarvoisesti käytössä dokumentoiduissa koontiasetuksissa. FIND_CUDA on oletusarvoisesti poissa käytöstä ja ottaa CUDA-grafiikkasuorittimen kiihdytyksen käyttöön, kun se valitaan tarkoituksella. Muuta näitä kytkimiä vasta, kun perus-CPU-polun tiedetään toimivan oikein; uuden kiihdytysasetuksen ei pitäisi olla ensimmäinen selitys puuttuvalle UDP-virralle.
Ennen kuin kutsut integraatiota valmiiksi
- Kirjaa anturin malli, sarjatunniste, ajurin commit, ROS 2 -jakelu ja konfiguraatioversion tiedot.
- Säilytä korjaus- ja firetime-tiedostot jokaisen testeissä käytetyn PCAP-tiedoston tai pakettimuotoisen rosbagin yhteydessä.
- Mittaa LiDARin ja tukikohdan välinen koordinaatistomuunnos sen sijaan, että arvioisit sen visuaalisen kiinnitysasennon perusteella.
- Vahvista pistepilvi sekä paikallaan olevassa ympäristössä että hitaassa, hallitussa liikeajossa.
- Tee aihe-, koordinaatisto- ja aikaleimaodotukset yksiselitteisiksi ennen tietojen välittämistä autonomiapinoon.
Hesain LiDAR-vaihtoehdot ROS 2 -projektiin
Ajuriopas on hyödyllisin, kun se tekee myös laitteistorajan näkyväksi. Seuraavat aktiiviset tuotteet ovat nykyisiä Global-storen vaihtoehtoja, jotka sopivat 3D LiDAR- ja ROS 2 -validointikontekstiin. Valitse laite todellisen robotin toiminta-alueen, havainnointitehtävän, mekaanisen integroinnin ja kyseisen mallin toimittajadokumentaation perusteella; yhtenäinen ajuri ei poista mallikohtaisen varmennuksen tarvetta.
Aiheeseen liittyvät Hesai LiDAR -vaihtoehdot
HESAI JT16 Mini 3D LiDAR robotiikkaan ja teollisuusautomaatioon
Kompakti JT-sarjan 3D LiDAR -vaihtoehto projekteihin, joissa käytetään mallikohtaista sarjakonfiguraatiopolkua.
Näytä tuote
HESAI JT64P LiDAR tehokkaaseen tilan digitalisointiin
3D LiDAR -vaihtoehto tiimeille, jotka validoivat reaaliaikaisen siirron, koordinaatistomuunnokset ja kalibroinnin ennen korkeamman tason havainnointia.
Näytä tuote
HESAI JT128 3D LiDAR AVG AMR -kartantunnistusnavigointi
JT128-valinta AMR- tai navigointityönkulkuihin, joissa tarvitaan laitekohtainen pistepilven validointisuunnitelma.
Näytä tuoteAvoimen lähdekoodin ajuri, suljettu laitteisto, käytännöllinen lisenssikatselmus
Repositorio sisältää LiDARin integrointiin tarvittavan lähdekoodin, ei itse anturin avoimen laitteistosuunnittelun aineistoa. Sen lisenssi on muokattu BSD-lisenssi, jonka tutut ehdot koskevat tekijänoikeus- ja lisenssimerkintöjen säilyttämistä sekä suositteluun viittaavan kielen välttämistä. Se on salliva lähtökohta monille suunnitteluohjelmille, mutta se ei korvaa kyseisen repositorioversion, mukana toimitettujen riippuvuuksien, tietojenkäsittelyvaatimusten tai laitteiston kaupallisten ehtojen tarkistamista.
Pidä tämä erottelu näkyvänä projektidokumentaatiossa. Robotti voi käyttää samanaikaisesti avointa ajuria, suljettua anturia, omistusoikeudellista autonomiapinoa ja projektikohtaisia kalibrointitietoja. Integraatio säilyy ylläpidettävänä, kun nämä rajat kirjataan sen sijaan, että ne sulautettaisiin epämääräiseen väitteeseen, jonka mukaan koko järjestelmä on ”avointa lähdekoodia”.
Usein kysytyt kysymykset
Mitkä Hesai-mallit voivat käyttää yhtenäistä ROS 2 -ohjainta?
Mitä source_type 1 tarkoittaa Hesai-määrityksessä?
Miksi PCAP-toisto tarvitsee korjaus- ja firetime-tiedostot?
Minkä ROS 2 -aiheen ohjain julkaisee oletusarvoisesti?
/lidar_points oletusarvoisena PointCloud2-tulostusaiheena. Projekti voi uudelleenmäärittää sen, mutta oletusarvon säilyttäminen ensimmäisen varmennuksen aikana helpottaa vianmääritystä.Osoittaako epäonnistunut ping, ettei LiDAR lähetä dataa?
Onko Hesai-ohjaimen YAML sama asia kuin Autowaren anturimääritys?
Pitäisikö CUDA ottaa käyttöön ensimmäistä ohjaintestiä varten?
Tekniset lähteet
- HesaiLidar_ROS_2.0:n virallinen repositorio: tuetut tuoteperheet, ROS 2 -koontiohjeet, käynnistysmerkinnät, lähdetyypit, määrityskentät ja CMake-asetukset.
- Autoware Foundationin LSA-anturimäärityksen viite: esimerkki Hesai LiDARin ja PandarXT32:n integroinnista.
- HesaiLidar_ROS_2.0:n lisenssi: muokattu BSD-lisenssiteksti ohjaimen lähdekoodille.
- HesaiLidar_SDK_2.0:n virallinen repositorio: SDK-perusta, johon yhtenäinen ROS-ohjain viittaa.
