Atualização (17/07/2025): Temos bastante estoque de todos os nossos produtos, encontre-nos também em e    comprar agora

Como integrar u-blox ZED-F9P Receptor GNSS/RTK em ROS 2 (Jazzy)

integração de u-blox ZED-F9P Receptor GNSS/RTK no ROS 2 Jazzy
integração de u-blox ZED-F9P Receptor GNSS/RTK no ROS 2 Jazzy

Este tutorial explica como integrar o u-blox ZED-F9P RTK GNSS receptor com um robô executando o ROS 2 (Jazzy). Você aprenderá a conectar o hardware, configurar o receptor, configurar um espaço de trabalho ROS 2 e iniciar os nós necessários para receber e processar dados GPS de alta precisão com correções RTK por meio de um NTRIP serviço.

Ao final deste guia, você terá uma configuração ROS 2 totalmente funcional transmitindo dados RTK em tempo real do seu receptor RTK com base em u-blox ZED-F9P—adequado para aplicações de robótica que exigem precisão de posicionamento em nível centimétrico.

Hardware necessário:

Software necessário:

Recursos úteis

  1. Recursos úteis para instalar o Ubuntu:
  2. Usando WSL ou máquinas virtuais: Caso você queira usar WSL ou máquinas virtuais, é necessário compartilhar o receptor RTK com o Ubuntu. Há instruções sobre como compartilhá-lo com o sistema:
  3. NTRIP Acesso ao Serviço: Certifique-se de ter acesso e credenciais para NTRIP serviço. Se precisar de ajuda para encontrar um serviço de correção, consulte nosso Lista de NTRIP serviços de correção em seu país.
  4. Configuração do receptor RTK: Certifique-se de que seu receptor RTK esteja configurado como um Rover. Se precisar de ajuda para configurar um u-blox ZED-F9P como um Rover, consulte o nosso ZED-F9P Arquivos de configuração.

Como configurar u-blox ZED-F9P Receptor RTK com ROS 2?

Configurar ambiente ROS 2

  1. Quando o ambiente ROS 2 for instalado seguindo o Guia de instalação do ROS2, por padrão ele não fica ativo quando você abre um terminal.
    Para corrigir isso, abra o Terminal e execute o seguinte comando para configurar o Ubuntu para carregar o ambiente ROS 2 na configuração de inicialização do Terminal automaticamente.
				
					echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
				
			
  1. Para aplicar as alterações, use o comando abaixo. Depois disso, o ROS 2 estará pronto para uso sempre que você abrir um Terminal.

				
					source ~/.bashrc
				
			
  1. Para gerenciar dependências no ROS 2, atualize sua lista de pacotes e instalações ferramentas de desenvolvimento ros, Que inclui Rosdep e outras ferramentas de desenvolvimento úteis para ROS 2.
				
					sudo apt update && sudo apt install ros-dev-tools
				
			

Conecte o receptor RTK

  1. Conecte a antena RTK ao seu receptor. Coloque-a em um local com boa visão do céu ou perto de uma janela para testar a funcionalidade.
  2. Conecte seu receptor ao PC através da porta USB identificada com “POWER+GPS. "
  3. O receptor deve ser configurado automaticamente. Para verificar isso, abra o Terminal e digite o comando. Você deverá ver / dev / ttyACM0 (ou um dispositivo semelhante, por exemplo, / dev / ttyACM1).
				
					ls /dev/ttyACM*
				
			
integração u-blox ZED-F9P receptor rtk com correções em ROS2
  1. Para verificar o fluxo de GPS do receptor RTK, execute o comando no Terminal. Ele mostra os dados brutos de GPS transmitidos pelo receptor. Pressione Ctrl + C parar.
				
					sudo cat /dev/ttyACM0
				
			
  1. Dica: Se você não vir nenhuma saída ou o dispositivo estiver ausente, certifique-se de que seu usuário tenha as permissões apropriadas (por exemplo, estar no grupo dialout). Você pode se adicionar com o comando abaixo. Depois, saia e faça login novamente para que as alterações entrem em vigor.
				
					sudo usermod -a -G dialout $USER
				
			
  1. Para evitar que o receptor RTK inicie em um “ttyACM*” cada vez que for ligado, crie um regra udev (um link dinâmico) que cria uma entrada com um nome específico adicionando o seguinte arquivo antes de conectar o receptor RTK.
				
					sudo nano /etc/udev/rules.d/50-ardusimple.rules
				
			
  1. Insira o seguinte texto na regra:
				
					KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="1546", ATTRS{idProduct}=="01a9", SYMLINK="tty_Ardusimple", GROUP="dialout", MODE="0666"
				
			
  1. Imprensa Ctrl + X para sair do arquivo e pressione Y para salvar o buffer modificado.
  2. Desconecte (desligue) o receptor RTK e conecte-o (ligue) novamente.
  3. Agora, sempre que um receptor RTK estiver conectado, ele estará acessível a partir do “/dev/tty_Ardusimple” link. Para verificar isso, digite os comandos:
				
					sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
				
			
  1. Agora você pode ver que “tty_ArduSimple" foi criado.

Preparar um novo espaço de trabalho ROS 2 para o projeto

  1. Para criar um Diretório de Espaço de Trabalho, abra um Terminal e crie uma pasta (por exemplo, ros2_ws) com um src subpasta:
				
					mkdir -p ~/ros2_ws/src
				
			
  1. Navegue até seu espaço de trabalho.
				
					cd ~/ros2_ws
				
			
  1. Para construir o espaço de trabalho, use Colcon para construir todos os pacotes dentro src:
				
					colcon build
				
			
  1. Obtenha o arquivo de instalação para que seu shell reconheça os pacotes recém-criados:
				
					source install/setup.bash
				
			
  1. Adicione este comando ao seu ~/.bashrc (ou equivalente) para obter o código-fonte automaticamente sempre que você abrir um novo terminal.
				
					echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
				
			
integração u-blox ZED-F9P receptor rtk com correções em ROS2
  1. Agora você tem um espaço de trabalho ROS2 básico configurado para posterior desenvolvimento e integração com ArduSimple RTK.

Inicie o Node no ROS 2 para conectar ao receptor RTK

Nesta seção, faremos o download e construiremos o u-blox Nó ROS 2 e execute um teste rápido para confirmar se ele pode se comunicar com seu ArduSimple Dispositivo RTK. Embora demonstremos a modificação do arquivo de inicialização diretamente no u-blox pacote, recomendamos criar um pacote separado com seus próprios arquivos de inicialização personalizados em uma etapa posterior.
  1. Para clonar o u-blox repositório para seu espaço de trabalho ROS 2 (~/ros2_ws/src):
				
					cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git

				
			
  1. Iniciar Rosdep e baixe as últimas definições de dependências de pacotes.
				
					sudo rosdep init
rosdep update
				
			
integração u-blox ZED-F9P receptor rtk com correções em ROS2
  1.  Construir u-blox Node, retorne para a pasta principal do espaço de trabalho e compile:
				
					cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash

				
			
  1. Agora o u-blox O nó está disponível no seu ambiente ROS2.
  2. Modifique o arquivo de configuração para atualizar os caminhos ou parâmetros do dispositivo conforme necessário (usaremos /dev/tty_Ardusimple). O pacote ublox_gps inclui um arquivo de configuração padrão chamado zed_f9p.yaml. Abra o arquivo de configuração pelo comando:
				
					nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
				
			
  1. Modifique o arquivo de configuração para atualizar os caminhos ou parâmetros do dispositivo conforme necessário. No nosso caso, defina o caminho do dispositivo como /dev/tty_Ardusimple.
  1. Para configurar o nó com o zed_f9p.yaml Configurações, atualize o arquivo de inicialização. Abra o arquivo e adicione a seguinte linha para carregar a configuração:
				
					nano ~/ros2_ws/src/ublox/ublox_gps/launch/ublox_gps_node-launch.py
				
			
  1. Reconstrua os pacotes. Recomendamos usar um pacote separado para seus arquivos de configuração e inicialização personalizados para manter tudo organizado. Discutiremos essa abordagem mais tarde.
				
					cd ~/ros2_ws
colcon build
source install/setup.bash
				
			
integração u-blox ZED-F9P receptor rtk com correções em ROS2
  1. Inicie o nó GPS e teste a conexão:
				
					ros2 launch ublox_gps ublox_gps_node-launch.py
				
			
  1. Se tudo estiver configurado corretamente, o nó deve começar a publicar dados de GPS do ArduSimple receptor.
  1. Para evitar a parada do nó, abra um novo Terminal e inicialize o espaço de trabalho usando o comando abaixo. Se este nó for parado, o u-blox o dispositivo não publicará mais seus tópicos nem fornecerá seus serviços.
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. Execute o seguinte comando para visualizar os tópicos disponíveis. Procure tópicos como /ublox_gps_node/correção, que contém dados de GPS no formato sensor_msgs/NavSatFix, etc.
				
					ros2 topic list
				
			
  1. Execute o comando para ver os dados do GPS em tempo real. 
				
					ros2 topic echo /ublox_gps_node/fix
				
			
  1. Para interromper a transmissão, pressione Ctrl + C.
  2. Veja a lista de serviços disponíveis fornecidos pelo Node.
				
					ros2 service list
				
			
  1. Agora você tem o u-blox Nó ROS 2 executando e publicando dados em tempo real do seu receptor RTK.
    Importante:
    • Não pare o u-blox nó. Este nó deve estar em execução antes de seguir as etapas de inicialização do NTRIP cliente, já que o servidor de correção precisa de dados de GPS ao vivo para calcular e enviar correções RTCM.
    • A u-blox O nó deve permanecer ativo para visualizar a saída do GPS usando o eco do tópico ros2, conforme mostrado na etapa anterior.

Inicie o Node no ROS 2 para usar NTRIP correções

Vamos usar o ntrip_client Nó ROS2 para conectar a um NTRIP Caster e receber correções RTCM para um posicionamento mais preciso. Este nó também pode encaminhar dados locais NMEA frases para um servidor remoto, se necessário. Abaixo, uma breve visão geral de como configurá-lo e testá-lo.
Nota: Certifique-se de que o nó de conexão do GPS já esteja em execução, pois ele é necessário para transmitir dados de correção.
  1. Navegue até o diretório do espaço de trabalho do ROS2 e clone a ramificação do ROS 2.
				
					cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
				
			
  1. Retorne à raiz do espaço de trabalho, instale todas as dependências ausentes e crie o pacote
				
					cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash
				
			
  1. Abra o arquivo ntrip_client_launch.py e role para baixo para encontrar o código onde NTRIP credenciais são definidas.
				
					nano ~/ros2_ws/src/ntrip_client/launch/ntrip_client_launch.py
				
			
  1. Atualizar NTRIP parâmetros como host, porta, nome de usuário, senha e ponto de montagem e salve as alterações no arquivo.
				
					nano ~/ros2_ws/src/ntrip_client/launch/ntrip_client_launch.py
				
			
  1. Reconstrua os pacotes:
				
					cd ~/ros2_ws
colcon build
source ~/ros2_ws/install/setup.bash
				
			
  1. Inicie o Node com seu NTRIP parâmetros para estabelecer uma conexão com o NTRIP Caster:
				
					ros2 launch ntrip_client ntrip_client_launch.py
				
			
  1. Para evitar fechar o Nó, abra um novo Terminal e inicialize o espaço de trabalho.
    Nota: Se o nó for interrompido, o u-blox o dispositivo deixará de receber dados de correção. O u-blox o nó deve estar em execução antes de iniciar o NTRIP cliente, pois fornece os dados GPS necessários ao servidor de correção. Se o u-blox Se o nó for interrompido, ele não publicará mais os tópicos e serviços necessários, e o receptor rtk deixará de receber dados de correção.
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. Para evitar fechar o Nó, abra um novo Terminal e inicialize o espaço de trabalho.
    Nota: Se o nó for interrompido, o u-blox o dispositivo deixará de receber dados de correção. O u-blox o nó deve estar em execução antes de iniciar o NTRIP cliente, pois fornece os dados GPS necessários ao servidor de correção. Se o u-blox Se o nó for interrompido, ele não publicará mais os tópicos e serviços necessários, e o receptor rtk deixará de receber dados de correção.
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. Ver lista de tópicos disponíveis. 
				
					ros2 topic list
				
			
  1. Principais tópicos que você pode ver:
    • /rtcm: Publica dados de correção RTCM (mavros_msgs/RTCM ou rtcm_msgs/Message, dependendo da configuração).
    • /nmea: Assina frases NMEA locais, encaminhando-as para o servidor.
    • /ublox_gps_node/correção: Também é possível encaminhar dados de posição global caso eles ainda não estejam no formato NMEA.
  1. Se tudo for feito corretamente e com sucesso, você verá o Node publicar as correções RTCM no /rtcm tópico. Usando ntrip_client Node, você pode integrar dados de correção RTCM ao seu projeto ROS 2 para permitir posicionamento preciso com o receptor RTK.
				
					ros2 topic echo /rtcm
				
			
  1. Usando este nó, você pode integrar dados de correção RTCM ao seu projeto ROS 2 para permitir o posicionamento preciso com o receptor RTK.

Criando um pacote de lançamento combinado

Criaremos um pacote dedicado que contém um único arquivo de inicialização para execução ambos da ublox_gps nó (publicação de dados GPS) e o ntrip_client nó (lidando com correções RTK) simultaneamente. Essa abordagem mantém seu espaço de trabalho organizado e facilita a inicialização de todos os nós necessários com um único comando.

  1. Abra um novo Terminal, navegue até o seu espaço de trabalho ROS2 e crie um novo pacote. Para um nanofile de inicialização baseado em Python, execute os comandos:
				
					cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
				
			
  1. Crie um diretório de inicialização e um arquivo de inicialização do Python dentro do novo pacote.
				
					mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
				
			
  1. Copie o código do exemplo abaixo e cole-o no arquivo. O código faz:
  • ublox_gps Nó: Publica dados brutos de GPS do seu ArduSimple dispositivo.
  • ntrip_client Nó: Conecta-se ao NTRIP caster/server e publica correções RTCM em /rtcm (e também pode assinar /nmea ou /fix se necessário).
  • Shebang (#!/usr/bin/env python3) – Garante que o arquivo seja executado como um script Python.
  • Descrição do lançamento – Define quais nós iniciar.
  • Node parâmetros – Define parâmetros específicos do nó (por exemplo, dispositivo, host, porta, autenticação).
				
					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
    ])

				
			
  1. Edite o arquivo inserindo seu NTRIP credenciais (host, post, nome de usuário, senha, ponto de montagem) e salve o arquivo.
  1. Abra pacote.xml.
				
					cd ~/ros2_ws/src/combined_rtk/
nano package.xml
				
			
  1. Certifique-se de ter dependências como ublox_gps, ntrip_client, launch_ros, etc. em seu pacote.xml. Se você não os tiver, copie-os do código abaixo e cole no arquivo.
				
					<exec_depend>ublox_gps</exec_depend>
<exec_depend>ntrip_client</exec_depend>
<exec_depend>launch_ros</exec_depend>
				
			
  1. Abra setup.py.
				
					nano  ~/ros2_ws/src/combined_rtk/setup.py
				
			
  1. Copie o código abaixo e cole-o no setup.py arquivo para incluir arquivos de inicialização e dependências. Feche o arquivo e salve as alterações.
				
					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': [
        ],
    },
)

				
			
  1. Torne o arquivo de inicialização executável.
				
					cd ~/ros2_ws/src
chmod +x combined_rtk/launch/combined_nodes.launch.py
				
			
  1. Retorne à raiz do seu espaço de trabalho, crie seu novo pacote e obtenha o arquivo de configuração:
				
					cd ~/ros2_ws
colcon build
source install/setup.bash

				
			
  1. Lançar ambos os ublox_gps e ntrip_client Nós com um comando:
				
					ros2 launch combined_rtk combined_nodes.launch.py
				
			
  1. Você deverá ver logs de ambos os nós no seu terminal, indicando que:
    • ublox_gps está lendo dados de GPS do dispositivo especificado (por exemplo, /dev/tty_Ardusimple).
    • ntrip_client está conectado ao seu NTRIP servidor e publicando correções RTCM em /rtcm (e possivelmente assinando /nmea se configurado).
    Nota: Ao usar este arquivo de inicialização, não é necessário iniciar manualmente o u-blox e NTRIP nós separadamente — a inicialização iniciará ambos os nós automaticamente. Não feche este Terminal de inicialização se quiser inspecionar os tópicos ou serviços fornecidos por esses nós.
  1. Para interagir com os nós iniciados, não interrompa o fluxo. Abra um novo terminal e inicialize o espaço de trabalho.
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. Para verificar tópicos, serviços e status do dispositivo, abra um novo terminal e inicialize:
				
					source install/setup.bash
				
			
  1. Veja a lista de tópicos. 
				
					ros2 topic list
				
			
  1. Você será capaz de ver /ublox_gps_node/correção, /rtcm, ou outros.
  1. Veja Eco de dados de GPS.
				
					ros2 topic echo /ublox_gps_node/fix
				
			
  1. Isto mostra dados de GPS em tempo real. Para interromper a transmissão, pressione Ctrl + C.
  1. A ublox_gps O Node publica diagnósticos sobre um tópico como /diagnósticos. Para verificar informações de diagnóstico:
				
					ros2 topic echo /diagnostics
				
			
  1. Inclui mensagens de status como precisão horizontal, precisão vertical e “correção 3D” quando o receptor tem uma posição válida, ou “correção não ok” quando o GPS ainda não está corrigido corretamente.

  1. Dicas importantes para verificar o status da correção:
    • Monitore /ublox_gps_node/correção em mensagens NavSatFix (campo status.status) ou mensagens de diagnóstico para status baseados em texto mais detalhados.
    • A /diagnósticos O tópico geralmente fornece um resumo legível como “conserto 3D”.
    • Use /ublox/navpvt para obter informações detalhadas:
      • O campo fix_type deve ser 3 para correção 3D.
      • O campo de sinalizadores deve indicar que correções estão sendo usadas.
      • O campo flags2 inclui o status RTK: 67 RTK Flutuante, 128 RTK Fixo. Se o valor for significativamente menor, provavelmente significa que nenhuma correção RTK está sendo aplicada.
    • Certifique-se de que sua antena tenha uma visão clara do céu e de seu NTRIP caster as credenciais estão corretas para obter uma correção RTK estável.

Se você quiser seguir este tutorial, temos todos os produtos em estoque e prontos para serem enviados:

Se você gostou deste conteúdo, você pode nos seguir no Twitter, YouTube, Facebook or LinkedIn para ficar atualizado de conteúdo como este.

Tem alguma dúvida ou pedido?
Contate-nos! Responderemos <24 horas!

ícone
Contato ArduSimple
Fechar

Quer saber mais sobre GPS/RTK?

1. Nossa equipe de engenharia entrará em contato com você para resolver qualquer dúvida
2. Manteremos você atualizado sobre promoções e lançamentos de novos produtos
3. Você só receberá notícias nossas quando tivermos notícias importantes, não enviaremos spam para seu e-mail