菜单

Mavlink消息与Mavros话题(GPS相关)

下载

Mavlink消息与Mavros话题(GPS相关)

本篇梳理一下在户外使用PX4飞控时,与GPS定位相关的Mavlink消息与Mavros话题

参考资料

  • Mavlink消息原始定义:https://mavlink.io/en/messages/common.html
  • Mavros源码:
    • 相关的plugin有:global_position.cpp、gps_status.cpp
  • 建议通过AI搜索了解什么是WGS84坐标系、ENU坐标系以及其转换关系如何构建等基本概念

枚举类型 - GPS_FIX_TYPE

/
GPS_FIX_TYPE
  • 简单来说,这个枚举值要大于等于3,否则认为GPS无效

原始GPS数据 - GPS_RAW_INT (#24)

  • 顾名思义是从GNSS模块获得的原始数据
/
GPS_RAW_INT
  • global_position.cpp中对这个Mavlink消息进行了解析处理,发布了如下话题:

    • 经纬度:mavros/global_position/raw/fix,话题类型为sensor_msgs::NavSatFix
    • 速度:mavros/global_position/raw/gps_vel,话题类型为geometry_msgs::TwistStamped
    • 搜星数:mavros/global_position/raw/satellites,话题类型为std_msgs::UInt32
  • gps_status.cpp中对这个Mavlink消息进行了解析处理,发布了如下话题:

    • 经纬度:mavros/gpsstatus/gps1/raw,话题类型为mavros_msgs::GPSRAW>

GPS状态 - GPS_STATUS (#25)

/
GPS_STATUS
  • 没有相关的Mavros处理函数

GPS融合后的信息 - GLOBAL_POSITION_INT (#33)

The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It is designed as scaled integer message since the resolution of float is not sufficient.

/
GLOBAL_POSITION_INT
  • global_position.cpp中对这个Mavlink消息进行了解析处理,发布了如下话题:
    • 经纬度:mavros/global_position/global,话题类型为sensor_msgs::NavSatFix(重要!)
    • 位置+速度:mavros/global_position/local,话题类型为nav_msgs::Odometry
      • 这个是原始数据中没有的,是Mavros解算出来的ENU坐标。具体如何解算?
    • 相对高度:mavros/global_position/rel_alt,话题类型为std_msgs::Float64
    • 航向角:mavros/global_position/compass_hdg,话题类型为std_msgs::Float64

GPS原点坐标 - GPS_GLOBAL_ORIGIN (#49)

Publishes the GPS coordinates of the vehicle local origin (0,0,0) position. Emitted whenever a new GPS-Local position mapping is requested or set - e.g. following SET_GPS_GLOBAL_ORIGIN message.

/
GPS_GLOBAL_ORIGIN
  • global_position.cpp中对这个Mavlink消息进行了解析处理,发布了如下话题:
    • 经纬度:mavros/global_position/gp_origin,话题类型为geographic_msgs::GeoPointStamped
上一个
PX4无人机调参
下一个
PX4二次开发
最近修改: 2025-09-27