Tässä opetusohjelmassa selitetään, miten integroidaan u-blox ZED-F9P RTK GNSS vastaanotin robotilla, jossa on ROS 2 (Jazzy). Opit kytkemään laitteiston, konfiguroimaan vastaanottimen, perustamaan ROS 2 -työtilan ja käynnistämään tarvittavat solmut vastaanottamaan ja käsittelemään erittäin tarkkaa GPS-dataa RTK-korjauksilla... NTRIP palvelusta.
Tämän oppaan loppuun mennessä sinulla on täysin toimiva ROS 2 -kokoonpano, joka suoratoistaa reaaliaikaista RTK-dataa RTK-vastaanottimestasi seuraavien ominaisuuksien perusteella: u-blox ZED-F9P—sopii robotiikan sovelluksiin, jotka vaativat senttimetritason paikannustarkkuutta.
Vaadittu laitteisto:
- simpleRTK2B – Perusaloitussarja
- USB-kaapeli Yhteensopiva vastaanottimen USB-portin kanssa PC-tietokoneeseen tai sulautettuun alustaan liittämistä varten
- tietokone tai sulautettu alusta, jossa on internetyhteys (tässä opetusohjelmassa käytämme tietokonetta)
Vaadittu ohjelmisto:
- Ubuntu 24.04 (asennettu natiivisti, virtuaalikoneeseen tai WSL:n kautta)
- ROS 2 (Jazzy) (asennettu Ubuntu-alustalle)
Hyödyllisiä resursseja
- Hyödyllisiä resursseja Ubuntun asentamiseen:
- WSL:n tai virtuaalikoneiden käyttö: Jos haluat käyttää WSL:ää tai virtuaalikoneita, RTK-vastaanotin on jaettava Ubuntun kanssa. Ohjeet sen jakamiseen järjestelmän kanssa ovat seuraavat:
- NTRIP Palvelun käyttöVarmista, että sinulla on käyttöoikeus ja tunnistetiedot NTRIP palvelu. Jos tarvitset apua korjauspalvelun löytämiseen, katso lisätietoja kohdasta Luettelo NTRIP korjauspalvelut maassasi.
- RTK-vastaanottimen konfigurointiVarmista, että RTK-vastaanottimesi on konfiguroitu RoverJos tarvitset apua konfiguroinnissa u-blox ZED-F9P kuten Rover, katso meidän ZED-F9P Asetustiedostot.
Kuinka perustaa u-blox ZED-F9P RTK-vastaanotin ROS 2:lla?
ROS 2 -ympäristön asennus
- Kun ROS 2 -ympäristö on asennettu noudattamalla ohjeita ROS2-asennusopas, oletuksena se ei ole aktiivinen, kun avaat pääteikkunan.
Korjaa tämä avaamalla Pääte ja suorittamalla seuraava komento määrittääksesi Ubuntun lataamaan ROS 2 -ympäristön automaattisesti Pääte-käynnistyskokoonpanoosi.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Muutosten käyttöönotto tapahtuu alla olevalla komennolla. Tämän jälkeen ROS 2 on käyttövalmis aina, kun avaat pääteikkunan.
source ~/.bashrc
- ROS 2:n riippuvuuksien hallitsemiseksi päivitä pakettiluettelosi ja asenna ros-dev-tools, Johon sisältyy rosdep ja muita hyödyllisiä kehitystyökaluja ROS 2:lle.
sudo apt update && sudo apt install ros-dev-tools
Liitä RTK-vastaanotin
- Kytke RTK-antenni vastaanottimeen. Aseta antenni paikkaan, josta on hyvä näkyvyys taivaalle, tai ikkunan lähelle testataksesi sen toimivuutta.
- Liitä vastaanotin tietokoneeseen USB-portin kautta, jossa on merkintä ”POWER+GPS"
- Vastaanottimen pitäisi konfiguroitua automaattisesti. Voit varmistaa tämän avaamalla Pääte-ikkunan ja kirjoittamalla komennon. Sinun pitäisi nähdä / dev / ttyACM0 (tai vastaava laite, esim. / dev / ttyACM1).
ls /dev/ttyACM*
- Tarkistaaksesi RTK-vastaanottimesta tulevan GPS-virran, suorita komento terminaalissa. Se näyttää vastaanottimesta suoratoistettavan GPS-raa'an datan. Paina Ctrl + C pysähtyä.
sudo cat /dev/ttyACM0
- Vinkki: Jos et näe mitään tulostetta tai laite puuttuu, varmista, että käyttäjälläsi on asianmukaiset käyttöoikeudet (esim. että hän kuuluu dialout-ryhmään). Voit lisätä itsesi alla olevalla komennolla. Kirjaudu sen jälkeen ulos ja kirjaudu takaisin sisään, jotta muutokset tulevat voimaan.
sudo usermod -a -G dialout $USER
- lehdistö Ctrl + X poistuaksesi tiedostosta ja paina Y tallentaaksesi muokatun puskurin.
- Irrota RTK-vastaanotin (katkaise virta) ja kytke se (virta) uudelleen.
- Nyt aina kun RTK-vastaanotin on kytketty, se on käytettävissä kohdasta ”/dev/tty_Ardusimple”-linkkiä. Tarkistaaksesi tämän, anna seuraavat komennot:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Valmistele uusi ROS 2 -työtila projektia varten
- Työtilahakemiston luomiseksi avaa Pääte ja luo kansio (esimerkiksi ros2_ws) kanssa src alikansio:
mkdir -p ~/ros2_ws/src
- Siirry työtilaan.
cd ~/ros2_ws
- Työtilan rakentamiseen käytä colcon rakentaa kaikki paketit sisälle src:
colcon build
- Lähde asennustiedostosta, jotta komentotulkkisi tunnistaa juuri rakennetut paketit:
source install/setup.bash
- Lisää tämä komento tiedostoon ~/.bashrc (tai vastaavaan), jotta saat lähdekoodin automaattisesti käyttöön aina, kun avaat uuden päätelaitteen.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
- Nyt sinulla on perus-ROS2-työtila määritettynä jatkokehitystä ja integrointia varten ArduSimple RTK.
Käynnistä solmu ROS 2:ssa yhteyden muodostamiseksi RTK-vastaanottimeen
- Kloonataksesi u-blox repository ROS 2 -työtilaan (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Aloittaa rosdep ja lataa uusimmat pakettiriippuvuusmääritelmät.
sudo rosdep init
rosdep update
- Nyt u-blox Solmu on käytettävissä ROS2-ympäristössäsi.
- Muokkaa määritystiedostoa päivittääksesi laitepolkuja tai parametreja tarpeen mukaan (käytämme /dev/tty_Ardusimple). Ublox_gps-paketti sisältää oletusasetustiedoston nimeltä zed_f9p.yamlAvaa asetustiedosto komennolla:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Rakenna paketit uudelleen. Suosittelemme käyttämään erillinen paketti mukautettuja kokoonpano- ja käynnistystiedostoja varten pitääksesi asiat järjestyksessä. Keskustelemme tästä lähestymistavasta myöhemmin.
cd ~/ros2_ws
colcon build
source install/setup.bash
- Vältä solmun pysäyttäminen avaamalla uusi pääte ja alustamalla työtila alla olevalla komennolla. Jos tämä solmu pysäytetään, u-blox laite ei enää julkaise aiheitaan eikä tarjoa palveluitaan.
source ~/ros2_ws/install/setup.bash
- Voit pysäyttää suoratoiston painamalla Ctrl + C.
- Katso luettelo solmun tarjoamista palveluista.
ros2 service list
- Nyt sinulla on u-blox ROS 2 -solmu on käynnissä ja julkaisee reaaliaikaista dataa RTK-vastaanottimestasi.
Tärkeää:- Älä pysäytä u-blox solmu. Tämän solmun on oltava käynnissä ennen kuin seuraavat vaiheet käynnistetään NTRIP asiakas, koska korjauspalvelin tarvitsee reaaliaikaista GPS-dataa RTCM-korjausten laskemiseen ja lähettämiseen.
- u-blox Solmun on pysyttävä aktiivisena visualisoidakseen GPS-lähtöä ros2-aiheen kaiun avulla, kuten edellisessä vaiheessa on esitetty.
Käynnistä solmu ROS 2:ssa käytettäväksi NTRIP korjaukset
Huomautus: Varmista, että GPS-yhteyssolmu on jo käynnissä, sillä sitä tarvitaan korjaustietojen lähettämiseen.
- Siirry ROS2-työtilahakemistoon ja kloonaa ROS 2 -haara.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Vältä solmun sulkeminen avaamalla uusi pääte ja alustamalla työtila.
Huomautus: Jos solmu pysäytetään, u-blox laite lakkaa vastaanottamasta korjaustietoja. u-blox solmun on oltava käynnissä ennen käynnistämistä NTRIP asiakas, koska se toimittaa tarvittavat GPS-tiedot korjauspalvelimelle. Jos u-blox Jos solmu pysäytetään, se ei enää julkaise tarvittavia aiheita ja palveluita, eikä rtk-vastaanotin enää vastaanota korjaustietoja.
source ~/ros2_ws/install/setup.bash
- Vältä solmun sulkeminen avaamalla uusi pääte ja alustamalla työtila.
Huomautus: Jos solmu pysäytetään, u-blox laite lakkaa vastaanottamasta korjaustietoja. u-blox solmun on oltava käynnissä ennen käynnistämistä NTRIP asiakas, koska se toimittaa tarvittavat GPS-tiedot korjauspalvelimelle. Jos u-blox Jos solmu pysäytetään, se ei enää julkaise tarvittavia aiheita ja palveluita, eikä rtk-vastaanotin enää vastaanota korjaustietoja.
source ~/ros2_ws/install/setup.bash
- Näytä luettelo käytettävissä olevista aiheista.
ros2 topic list
- Tärkeimmät aiheet, joita saatat nähdä:
- /rtcm: Julkaisee RTCM-korjaustiedot (joko mavros_msgs/RTCM tai rtcm_msgs/Message kokoonpanosta riippuen).
- /nmea: Tilaa paikalliset NMEA-lauseet ja välittää ne palvelimelle.
- /ublox_gps_node/korjausVoi myös lähettää globaalin sijaintitiedon, jos se ei ole jo NMEA-muodossa.
- Jos kaikki on tehty oikein ja onnistuneesti, näet solmun julkaisevan RTCM-korjaukset /rtcm aihe. Käyttämällä ntrip_client Node-sovelluksella voit integroida RTCM-korjaustiedot ROS 2 -projektiisi mahdollistaaksesi tarkan paikannuksen RTK-vastaanottimella.
ros2 topic echo /rtcm
- Tämän solmun avulla voit integroida RTCM-korjausdataa ROS 2 -projektiisi mahdollistaaksesi tarkan paikannuksen RTK-vastaanottimella.
Yhdistetyn käynnistyspaketin luominen
Luomme erillisen paketin, joka sisältää yhden käynnistystiedoston suorittamista varten sekä Ishayoiden opettaman ublox_gps solmu (julkaisee GPS-dataa) ja ntrip_client solmua (käsittelee RTK-korjauksia) samanaikaisesti. Tämä lähestymistapa pitää työtilasi järjestyksessä ja helpottaa kaikkien tarvittavien solmujen käynnistämistä yhdellä komennolla.
- Avaa uusi pääteikkuna, siirry ROS2-työtilaan ja luo uusi paketti. Python-pohjaisen käynnistysnanofilmin luomiseksi suorita seuraavat komennot:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Luo käynnistyshakemisto ja Python-käynnistystiedosto uuden paketin sisälle.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Kopioi alla olevan esimerkin koodi ja liitä se tiedostoon. Koodi tekee seuraavaa:
- ublox_gps Solmu: Julkaisee raakadataa GPS-laitteestasi ArduSimple laitteelle.
- ntrip_client Solmu: Yhdistää NTRIP caster/server ja julkaisee RTCM-korjaukset /rtcm (ja voi myös tilata /nmea- tai /fix-kansion tarvittaessa).
- Shebang (#!/usr/bin/env python3) – Varmistaa, että tiedosto suoritetaan Python-skriptinä.
- Käynnistyskuvaus – Määrittää, mitkä solmut käynnistetään.
- Solmu parametrit – Asettaa solmukohtaiset parametrit (esim. laite, isäntä, portti, todennus).
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import SetEnvironmentVariable
def generate_launch_description():
# ---------------------------------------------
# Node configuration for ublox_gps
# ---------------------------------------------
ublox_node = Node(
package='ublox_gps', # ROS 2 package containing the ublox GPS driver
executable='ublox_gps_node', # Executable name for the ublox GPS node
name='ublox_gps_node', # Name assigned to the node
output='screen', # Output log to screen
parameters=[{ # Node parameters defined inline
'debug': 0, # Debug level (0 = none)
'device': '/dev/tty_Ardusimple', # Serial port where GPS is connected
'frame_id': 'gps', # Frame ID to tag published GPS messages
'uart1': {
'baudrate': 9600 # Baudrate for UART1
},
'tmode3': 1, # Survey-in mode (TMODE3 = 1)
'sv_in': { # Survey-in configuration
'reset': True, # Reset survey-in every startup
'min_dur': 300, # Minimum duration for survey-in (seconds)
'acc_lim': 3.0 # Accuracy limit for survey-in (meters)
},
'inf': {
'all': True # Enable all INF messages on console
},
'publish': {
'all': True, # Publish all available messages
'aid': {
'hui': False # Do not publish aiding HUI messages
},
'nav': {
'posecef': False # Do not publish NAV-POSECEF messages
}
}
}]
)
# ---------------------------------------------
# Environment variable to control NTRIP client debug
# ---------------------------------------------
set_debug_env = SetEnvironmentVariable(
name='NTRIP_CLIENT_DEBUG', # Name of the environment variable
value='false' # Disable debug output
)
# ---------------------------------------------
# Node configuration for NTRIP client
# ---------------------------------------------
ntrip_node = Node(
package='ntrip_client', # ROS 2 package containing the NTRIP client
executable='ntrip_ros.py', # Python script for the NTRIP client
name='ntrip_client', # Name assigned to the node
output='screen', # Output log to screen
parameters=[{ # Parameters required for NTRIP connection
'host': 'ppntrip.services.u-blox.com', # NTRIP caster hostname
'port': 2101, # NTRIP port (integer)
'mountpoint': 'NEAR-RTCM', # Mountpoint on the NTRIP caster
'ntrip_version': 'None', # Optional NTRIP version
'authenticate': True, # Use authentication (username/password)
'username': user', # Auth username
'password': 'password', # Auth password
'ssl': False, # SSL not used
'cert': 'None', # No client certificate
'key': 'None', # No client key
'ca_cert': 'None', # No custom CA certificate
'rtcm_frame_id': 'odom', # Frame ID for published RTCM messages
'nmea_max_length': 128, # Max NMEA sentence length
'nmea_min_length': 3, # Min NMEA sentence length
'rtcm_message_package': 'rtcm_msgs', # Use the rtcm_msgs message format
'reconnect_attempt_max': 10, # Max reconnect attempts before giving up
'reconnect_attempt_wait_seconds': 5, # Wait time between reconnects
'rtcm_timeout_seconds': 4 # Max time without RTCM before reconnect
}],
remappings=[
('/fix', '/ublox_gps_node/fix') # Remap /fix topic to /ublox_gps_node/fix
]
)
# Return the full launch description with all configured actions
return LaunchDescription([
set_debug_env, # Set environment variable for NTRIP debug
ublox_node, # Launch ublox GPS node
ntrip_node # Launch NTRIP client node
])
- avoin setup.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Kopioi alla oleva koodi ja liitä se kansioon setup.py tiedostoon, joka sisältää käynnistystiedostot ja riippuvuudet. Sulje tiedosto ja tallenna muutokset.
import os
import glob
from setuptools import find_packages, setup
package_name = 'combined_rtk'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
(os.path.join('share', package_name), ['package.xml', *glob.glob('launch/*')]),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='jmnavarrete',
maintainer_email='jmnavarrete@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
],
},
)
- Käynnistä molemmat ublox_gps ja ntrip_client Yhdellä komennolla toimivat solmut:
ros2 launch combined_rtk combined_nodes.launch.py
- Sinun pitäisi nähdä lokit molemmista terminaalin solmuista, jotka osoittavat, että:
- ublox_gps lukee GPS-tietoja määritetystä laitteesta (esim. /dev/tty_Ardusimple).
- ntrip_client on yhdistetty laitteeseesi NTRIP palvelimelle ja julkaisee RTCM-korjaukset /rtcm-kansiossa (ja mahdollisesti tilaa /nmea-kansio, jos se on määritetty).
- Tarkistaaksesi aiheet, palvelut ja laitteen tilan, avaa uusi pääte ja alusta se:
source install/setup.bash
- ublox_gps Solmu julkaisee diagnostiikkaa aiheesta, kuten /diagnostiikka. Diagnostiikkatietojen tarkistaminen:
ros2 topic echo /diagnostics
Se sisältää tilaviestejä, kuten vaakasuoran tarkkuuden, pystysuoran tarkkuuden ja "3D-korjaus", kun vastaanottimella on kelvollinen sijainti, tai "korjaus ei onnistu", kun GPS-paikannus ei ole vielä oikein määritetty.
- Tärkeitä vinkkejä korjauksen tilan tarkistamiseen:
- monitori /ublox_gps_node/korjaus NavSatFix-viesteissä (status.status-kenttä) tai diagnostiikkaviesteissä, joissa on tarkempia tekstipohjaisia tiloja.
- /diagnostiikka aihe tarjoaa usein luettavaan muotoon tiivistetyn yhteenvedon, kuten ”3D-korjaus”.
- Käyttää /ublox/navpvt saadaksesi yksityiskohtaisia tietoja:
- 3D-korjauksen fix_type-kentän arvon tulee olla 3.
- Lippukentän pitäisi osoittaa, että korjauksia käytetään.
- flags2-kenttä sisältää RTK-tilan: 67 RTK Float, 128 RTK Fix. Jos arvo on merkittävästi pienempi, se todennäköisesti tarkoittaa, että RTK-korjauksia ei käytetä.
- Varmista, että antennillasi on esteetön näkymä taivaalle ja NTRIP caster tunnistetiedot ovat oikein vakaan RTK-paikannuksen saavuttamiseksi.
Lopuksi haluat integroida sekä GPS-tiedot että RTCM-korjaukset samanaikaisesti. Tätä varten sinulla on oltava molemmat solmut toimivat samaan aikaan. Näin se toimii:
ublox_gps-solmu
Julkaisee raakat GNSS-paikannukset
/fixaihe.Paljastaa käyttöliittymän (
rtcm_inputparametri), jotta saapuvat RTCM-viestit voidaan lähettää u-blox laite ROS 2:n kautta.
ntrip_client-solmu
Yhdistää sinun NTRIP caster ja julkaisee RTCM-korjausviestejä
/rtcmaihe.Nämä viestit on sitten lähetettävä eteenpäin u-blox vastaanotin kautta
/rtcm➔rtcm_input.
Vaikka opetusohjelmassa selitetään jokainen vaihe erikseen, se ei tee niin, jotta näet, miten kukin solmu käynnistetään ja miten data julkaistaan. emme linkittää ne automaattisesti toisiinsa. Käytännössä sinun tulisi käynnistää molemmat pinot yhdessä, esimerkiksi:
# Pääte 1: suorita ublox-ajuri
ros2-käynnistys ublox_gps ublox_gps_node-launch.py# Pääte 2: suorita NTRIP asiakas
ros2-käynnistys ntrip_client ntrip_client-launch.pyTällä tavoin RTCM-korjaukset virtaavat eteenpäin
/rtcmublox-kuljettaja noutaa ne välittömästi ja lähettää ne ZED-F9P laite, joka puolestaan julkaisee todellisen RTK-korjatun/fix.
Jos pääsit tänne asti, onnittelut! Tämä on luultavasti yksi pisimmistä tutoriaaleistamme 🙂
Jos haluat seurata tätä opetusohjelmaa, meillä on kaikki tuotteet varastossa ja valmiina lähetettäväksi: