通过ROS的 nmea_navsat_driver包发布GPS坐标

2023-05-16

通过nmea_navsat_driver包发布GPS坐标

  • 0 硬件及基本环境
  • 1 接通硬件并测试
    • 1.1 打开一个终端,修改端口的读写权限
    • 1.2 用cutecom读取串口数据
  • 2 安装 nmea_navsat_driver 及 下载 ROS 源码
    • 2.1 安装 nmea_navsat_driver
    • 2.2 下载ROS源码
    • 2.3 构建ROS包
  • 3 运行测试
    • 3.1 新开一个终端
    • 3.2 打印topic清单,并打印fix topic
  • 4 小坑汇总

0 硬件及基本环境

硬件:
1)控制端:PC、RapberryPi 或者 Jetson Nano板,三种硬件均测试通过;
2)GPS:市场上一款普通常用的GPS终端GNSS,带天线及Typc C线;
环境:
1)Ubuntu 18.04 LTS
2)ROS melodic

1 接通硬件并测试

1.1 打开一个终端,修改端口的读写权限

~$ cd /dev
/dev$ ll ttyUSB*

也可能是 ttyACM*

/dev$ sudo chmod 777 ttyUSB0

1.2 用cutecom读取串口数据

为了测试串口是否有数据输出,建议装一个cutecom,具体可参考《linux系统下可视化串口工具cutecom的使用》https://blog.csdn.net/hanxv_1987/article/details/106967108
在这里插入图片描述

2 安装 nmea_navsat_driver 及 下载 ROS 源码

2.1 安装 nmea_navsat_driver

~$ sudo apt-get install ros-kinetic-nmea-navsat-driver libgps-dev

如果之前有下载过,但又不完整的包, 可以卸载后,重新下载,我就落入此坑,尝试各种修复,最后还是重新安装解决。

~$ sudo apt-get remove --purge ros-kinetic-nmea-navsat-driver libgps-dev

2.2 下载ROS源码

github https://github.com/ros-drivers/nmea_navsat_driver

~$ git clone https://github.com/ros-drivers/nmea_navsat_driver.git

设置libnmea_navsat_driver文件夹中的,nmea_serial_driver.launch, nmea_serial_driver.py及nmea_topic_serial_reader.py 三文件中串口端口及波特率值。注意,需要保持此三文件的串口端口及波特率一致。

# nmea_serial_driver.launch
  <arg name="port" default="/dev/ttyUSB0" />
  <arg name="baud" default="115200" />
# nmea_serial_driver.py 和 nmea_topic_serial_reader.py 修改内容相同
    serial_port = rospy.get_param('~port', '/dev/ttyUSB0')
    serial_baud = rospy.get_param('~baud', 115200)

2.3 构建ROS包

在你的 ros 工作区的src创建一个nmea_navsat_driver ros包,并把下载的nmea_nasat_driver文件夹复制到你的ros 工作区的nmea_navsat_driver包中。退回到工作区所在目录,并catkin_make,完成编译。

:~/catkin_ws$ catkin_make

3 运行测试

3.1 新开一个终端

~$ roslaunch nmea_navsat_driver nmea_serial_driver.launch

如果出现以下错误

check_nmea_checksum
    split_sentence = nmea_sentence.split('*')
TypeError: a bytes-like object is required, not 'str'

是因为python 2.7 与 3.0 对于 ‘str’ 的描述不一致导致,可修改在nmea_navsat_driver ROS包中的scripts文件夹中的以下四个文件第一行环境来解决。

nmea_serial_driver
nmea_socket_driver
nmea_topic_driver
nmea_topic_serial_reader
#! /usr/bin/env python2.7

# Software License Agreement (BSD License)
#
# Copyright (c) 2019, Ed Venator <evenator@gmail.com>
# All rights reserved.
SUMMARY
========

PARAMETERS
 * /nmea_serial_driver_node/baud: 115200
 * /nmea_serial_driver_node/frame_id: gps
 * /nmea_serial_driver_node/port: /dev/ttyUSB0
 * /nmea_serial_driver_node/time_ref_source: gps
 * /nmea_serial_driver_node/useRMC: False
 * /nmea_serial_driver_node/use_GNSS_time: False
 * /rosdistro: melodic
 * /rosversion: 1.14.13

NODES
  /
    nmea_serial_driver_node (nmea_navsat_driver/nmea_serial_driver)

auto-starting new master
process[master]: started with pid [26416]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 9ccd69d6-3595-11ed-8e21-507b9d5ebd34
process[rosout-1]: started with pid [26427]
started core service [/rosout]
process[nmea_serial_driver_node-2]: started with pid [26434]


3.2 打印topic清单,并打印fix topic

打印topic 清单

~$ rostopic list
/fix
/rosout
/rosout_agg
/time_reference
/vel

打印 fix topic

~$ rostopic echo /fix
header: 
  seq: 197
  stamp: 
    secs: 1663315829
    nsecs:  44462919
  frame_id: "/gps"
status: 
  status: -1
  service: 1
latitude: 11 55 665 44 33 221 //以防因本文写得不够好,本人被读者定点清除,
longitude: 135 615 44 33 22 1 //所以修改了坐标。懂简谱,可以唱一下
altitude: 65.57
position_covariance: [9801.0, 0.0, 0.0, 0.0, 9801.0, 0.0, 0.0, 0.0, 39204.0]
position_covariance_type: 1
---

4 小坑汇总

  1. 未修改

特别说明:如果在室内测试,可能存在GPS坐标丢失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过ROS的 nmea_navsat_driver包发布GPS坐标 的相关文章

  • 目录相对 ZwCreateFile

    我必须为我的大学项目实施交叉视图文件完整性检查器 为此 我如何在内核模式下列出目录的文件 你的起点是ZwCreateFile http msdn microsoft com en us library windows hardware ff
  • 如何在 Android 中找到附近的应用程序用户?

    我正在制作一个应用程序 需要能够找到附近的人 他们是我的应用程序的用户 我看了很多类似问题的答案 似乎我别无选择 只能不断将用户的当前位置上传到服务器 并在必要时获取附近的用户列表 那么我的问题是 1 要获取附近的列表 应该有一些计算距离的
  • C# .net cf 中的 nmea 校验和

    我正在尝试编写自己的 nmea 解析器 因为我只需要来自 GPS 的一些信息 并且不需要解释所有消息 我遇到的问题是我的 nmea 消息验证器给了我一个错误的校验和 有人能看到我做错了什么吗 我正在使用这个想法Codepedia 计算和验证
  • 我是否需要在 Linux 3.12 驱动程序中“启用”PCIe 内存区域?

    我有从 PCIe 驱动程序的probe 函数调用的代码 大致基于此post https stackoverflow com a 5195061 32836 EDIT 基于安德烈亚斯 邦贝 https stackoverflow com a
  • 使用 C++ 连接到 MySQL 服务器

    我正在尝试使用 C 和 Visual C 2008 Express Edition 上的 MySQL ODBC 5 1 驱动程序连接到 MySQL 服务器 我按照 MSDN 中的这些说明进行操作 SQL连接 http msdn micros
  • 如何实现从一个进程到另一个进程的快速上下文切换?

    我需要在沙箱进程上运行不安全的本机代码 并且需要减少进程切换的瓶颈 两个进程 控制器和沙箱 共享两个自动重置events http msdn microsoft com en us library windows desktop aa964
  • 设置模拟位置时 GPS 提供商未知错误?

    我正在尝试设置我的模拟位置 但是 我收到以下错误 提供商 gps 未知 并且不确定出了什么问题 我已经获得了在manifest xml 中声明的所有权限以及所有参数 模拟定位法 Initiates the method to set the
  • GPS 坐标(以度为单位)来计算距离

    在iPhone上 我以十进制度数获取用户的位置 例如 纬度39 470920和经度 0 373192 也就是A点 我需要用另一个 GPS 坐标 同样以十进制表示 B 点创建一条线 然后 计算从 A 到 B 的线与另一个点 C 之间的距离 垂
  • GPS 对比加速度计计算距离

    我正在尝试实现一个健身应用程序 可以在Android 中跟踪跑步速度和跑步距离 看起来我可以使用 GPS 或加速度计来计算这些信息 由于跑步者可能会将手机放在手里 放在肩膀上或放在口袋里 所以我的第一直觉是使用 GPS 获取位置并计算跑步速
  • 如何将timestamp_t转换为实际时间?

    我见过很多使用 time t 的例子 但 timestamp t 让我感到困惑 我正在做一个作业 我们需要打印出 GPS 数据 并且 GPS 设备返回一个类型 timestamp t 来表示它的时间戳和纪元时间 我尝试过使用 gmtime
  • 移动应用程序在后台时的 GPS 位置(使用 ionicframework)

    我需要实现一个应用程序来存储用户从 A 移动到 B 时的旅程 路径 现在 我知道 ionicframework 可以使用 GPS 但是当我的应用程序转到后台时会发生什么 我的应用程序如何继续存储用户位置 这可能吗 有没有我可以使用的插件 请
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • 如何将 GPS 数据从 Android 发送到网站?

    我是 Android 和 Web 服务开发新手 目前我正在开发Android程序 该程序将发送经度和纬度信息到asp net网站 以显示位置更改网站地图 问题是 如何将此数据发送到网站 最佳实践 对合适框架的任何建议 从Android应用程
  • 如何从 Android 手机获取 GPS 数据?

    有没有办法将 Android 手机的 GPS 数据连接 USB 有线 到 PC 我目前正在使用基于 gpsd 项目的 GPSTether 应用程序 我正在寻找比该应用程序提供更多控制且错误更少的替代方案 另外 是否有另一种方法可以在不使用任
  • 使用 Google 电子表格中的脚本从手机获取我的当前位置

    有没有办法使用 Google Apps 脚本从手机的 GPS 数据中获取我的当前位置 纬度和经度 最好是十进制形式 另外 是否可以打开和关闭 GPS 或者至少检测它是否打开或关闭 这是我尝试做的 我带着电动助力车去一些地方 在每个地方我都会
  • iPhone 网络应用程序可以获取 GPS 位置吗?

    有没有一种简单的方法来设计一个网站来促进iphone用户提供gps网站坐标 我想知道表单字段是否有命名约定 例如 让用户以自动方式输入 我正在考虑建立一个基于位置的网站 并希望为 iPhone 和其他移动用户 量身定制 我意识到 iPhon
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c
  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • Selenium c#:如何在特定版本中启动 Internet Explorer 驱动程序(例如 IE8)

    在 java 中 可以通过传递所需的功能来设置 Internet Explorer 驱动程序的 IE 版本 这在 C 中不起作用 我希望它看起来像这样 DesiredCapabilities ieCapabilities null ieCa

随机推荐