Giter VIP home page Giter VIP logo

ublox's Introduction

ublox

The ublox package provides support for u-blox GPS receivers. Only the serial configuration of the driver is documented here, but TCP/UDP communication is also supported by the driver (untested).

The driver was originally written by Johannes Meyer. Changes made later are detailed in the version history below.

Options

Example .yaml configuration files are included in ublox_gps/config. Consult the u-blox documentation for your device for the recommended settings.

The ublox_gps node supports the following parameters for all products and firmware versions:

  • device: Path to the device port. Defaults to /dev/ttyACM0.
  • raw_data: Whether the device is a raw data product. Defaults to false. Firmware <= 7.03 only.
  • load: Parameters for loading the configuration to non-volatile memory. See ublox_msgs/CfgCFG.msg
    • load/mask: uint32_t. Mask of the configurations to load.
    • load/device: uint32_t. Mask which selects the devices for the load command.
  • save: Parameters for saving the configuration to non-volatile memory. See ublox_msgs/CfgCFG.msg
    • save/mask: uint32_t. Mask of the configurations to save.
    • save/device: uint32_t. Mask which selects the devices for the save command.
  • uart1/baudrate: Bit rate of the serial communication. Defaults to 9600.
  • uart1/in: UART1 in communication protocol. Defaults to UBX, NMEA & RTCM. See CfgPRT message for possible values.
  • uart1/out: UART1 out communication protocol. Defaults to UBX, NMEA & RTCM. See CfgPRT message for possible values.
  • frame_id: ROS name prepended to frames produced by the node. Defaults to gps.
  • rate: Rate in Hz of measurements. Defaults to 4.
  • nav_rate: How often navigation solutions are published in number of measurement cycles. Defaults to 1.
  • enable_ppp: Enable precise-point-positioning system. Defaults to false.
  • gnss/sbas: Enable satellite-based augmentation system. Defaults to false.
  • sbas/max: Maximum number of SBAS channels. Defaults to 0.
  • sbas/usage: See CfgSBAS message for details. Defaults to 0.
  • dynamic_model: Possible values below. Defaults to portable. See u-blox documentation for further description.
    • portable
    • stationary
    • pedestrian
    • automotive
    • sea
    • airborne1: Airborne, max acceleration = 1G
    • airborne2: Airborne, max acceleration = 2G
    • airborne4: Airborne, max acceleration = 4G
    • wristwatch
  • fix_mode: Type of fixes supported: 2d, 3d or both.
  • dr_limit: Max time in seconds to use dead reckoning after signal is lost. Defaults to 0.
  • dat: Configuring the datum type (optional). See the CfgDAT message.
    • dat/set: If true, the node will the datum based on the parameters below (required if true). Defaults to false.
    • dat/majA: Semi-major Axis [m]
    • dat/flat: 1.0 / Flattening
    • dat/shift: [X-axis, Y-axis, Z-axis] shift [m]
    • dat/rot: [X, Y, Z] rotation [s]
    • dat/scale: scale change [ppm]

For firmware version 6:

  • nmea/set: If true, the NMEA will be configured with the parameters below.
  • nmea/version: NMEA version. Must be set if nmea/set is true.
  • nmea/num_sv: Maximum Number of SVs to report per TalkerId. Must be set if nmea/set is true.
  • nmea/compat: Enable compatibility mode. Must be set if nmea/set is true.
  • nmea/consider: Enable considering mode. Must be set if nmea/set is true.
  • nmea/filter: Namespace for filter flags.
    • nmea/filter/pos: Disable position filtering. Defaults to false.
    • nmea/filter/msk_pos: Disable masked position filtering. Defaults to false.
    • nmea/filter/time: Disable time filtering. Defaults to false.
    • nmea/filter/date: Disable date filtering. Defaults to false.
    • nmea/filter/sbas: Enable SBAS filtering. Defaults to false.
    • nmea/filter/track: Disable track filtering. Defaults to false.

For devices with firmware >= 7:

  • gnss parameters:
    • gnss/gps: Enable GPS receiver. Defaults to true.
    • gnss/glonass: Enable GLONASS receiver. Defaults to false.
    • gnss/beidou: Enable BeiDou receiver. Defaults to false.
    • gnss/qzss: Enable QZSS receiver. Defaults to false.
    • gnss/qzss_sig_cfg: QZSS signal configuration. Defaults to L1CA. See CfgGNSS message for constants.
  • nmea parameters:
    • nmea/set: If true, the NMEA will be configured.
    • nmea/version: NMEA version. Must be set if nmea/set is true.
    • nmea/num_sv: Maximum Number of SVs to report per TalkerId. Must be set if nmea/set is true.
    • nmea/sv_numbering: Configures the display of satellites that do not have an NMEA-defined value. Must be set if nmea/set is true.
    • nmea/compat: Enable compatibility mode. Must be set if nmea/set is true.
    • nmea/consider: Enable considering mode. Must be set if nmea/set is true.
    • nmea/limit82: Enable strict limit to 82 characters maximum. Defaults to false.
    • nmea/high_prec: Enable high precision mode. Defaults to false.
    • nmea/filter: Namespace for filter flags.
      • nmea/filter/pos: Enable position output for failed or invalid fixes. Defaults to false.
      • nmea/filter/msk_pos: Enable position output for invalid fixes. Defaults to false.
      • nmea/filter/time: Enable time output for invalid times. Defaults to false.
      • nmea/filter/date: Enable date output for invalid dates. Defaults to false.
      • nmea/filter/gps_only: Restrict output to GPS satellites only. Defaults to false.
      • nmea/filter/track: Enable COG output even if COG is frozen. Defaults to false.
    • nmea/gnssToFilt: Filters out satellites based on their GNSS.
      • nmea/gnssToFilt/gps: Disable reporting of GPS satellites. Defaults to false.
      • nmea/gnssToFilt/sbas: Disable reporting of SBAS satellites. Defaults to false.
      • nmea/gnssToFilt/qzss: Disable reporting of QZSS satellites. Defaults to false.
      • nmea/gnssToFilt/glonass: Disable reporting of GLONASS satellites. Defaults to false.
      • nmea/gnssToFilt/beidou: Disable reporting of BeiDou satellites. Defaults to false.
    • nmea/main_talker_id: This field enables the main Talker ID to be overridden. Defaults to 0.
    • nmea/gsv_talker_id: This field enables the GSV Talker ID to be overridden. Defaults to [0, 0].

For devices with firmware >= 8:

  • save_on_shutdown: If true, the node will send a UBX-UPD-SOS command to save the BBR to flash memory on shutdown. Defaults to false.
  • clear_bbr: If true, the node will send a UBX-UPD-SOS command to clear the flash memory during configuration. Defaults to false.
  • Additional gnss params
    • gnss/galileo: Enable Galileo receiver. Defaults to false.
    • gnss/imes: Enable IMES receiver. Defaults to false.
  • nmea/bds_talker_id: (See other NMEA configuration parameters above) Sets the two characters that should be used for the BeiDou Talker ID.

For UDR/ADR devices:

  • use_adr: Enable ADR/UDR. Defaults to true.
  • nav_rate should be set to 1 Hz.

For HPG Reference devices:

  • tmode3: Time Mode. Required. See CfgTMODE3 for constants.
  • arp/lla_flag: True if the Fixed position is in Lat, Lon, Alt coordinates. False if ECEF. Required if tmode3 is set to fixed.
  • arp/position: Antenna Reference Point position in [m] or [deg]. Required if tmode3 is set to fixed.
  • arp/position_hp: Antenna Reference Point High Precision position in [0.1 mm] or [deg * 1e-9]. Required if tmode3 is set to fixed.
  • arp/acc: Fixed position accuracy in [m]. Required if tmode3 is set to fixed.
  • sv_in/reset: Whether or not to reset the survey in upon initialization. If false, it will only reset if the TMODE is disabled. Defaults to true.
  • sv_in/min_dur: The minimum Survey-In Duration time in seconds. Required tmode3 is set to survey in.
  • sv_in/acc_lim: The minimum accuracy level of the survey in position in meters. Required tmode3 is set to survey in.

For HPG Rover devices:

  • dgnss_mode: The Differential GNSS mode. Defaults to RTK FIXED. See CfgDGNSS message for constants.

For TIM devices:

  • tim_tm2: Enable this message for GPS time-stamps everytime an external interrupt signal is received.

For FTS devices:

  • currently unimplemented. See FtsProduct class in ublox_gps package node.h & node.cpp files.

Fix Topics

~fix(sensor_msgs/NavSatFix)

Navigation Satellite fix.

~fix_velocity(geometry_msgs/TwistWithCovarianceStamped)

Velocity in local ENU frame.

INF messages

To enable printing INF messages to the ROS console, set the parameters below.

  • inf/all: This is the default value for the INF parameters below, which enable printing u-blox INF messages to the ROS console. It defaults to true. Individual message types can be turned off by setting their corresponding parameter to false.
  • inf/debug: Whether to configure the UBX and NMEA ports to send Debug messages and print received INF-Debug messages to ROS_DEBUG console.
  • inf/error: Whether to enable Error messages for the UBX and NMEA ports and print received INF-Error messages to ROS_ERROR console.
  • inf/notice: Whether to enable Notice messages for the UBX and NMEA ports and print received INF-Notice messages to ROS_INFO` console.
  • inf/test: Whether to enable Test messages for the UBX and NMEA ports and print received INF-Test messages to ROS_INFO console.
  • inf/warning: Whether to enable Warning messages for the UBX and NMEA ports and print received INF-Warning messages to the ROS_WARN console.

Additional Topics

To publish a given u-blox message to a ROS topic, set the parameter shown below to true. The node sets the rate of the u-blox messages to 1 measurement cycle.

All messages

  • publish/all: This is the default value for publish/<class>/all parameters below. It defaults to false. Individual message classes and messages can be enabled or disabled by setting the parameters described below to false.

AID messages

  • publish/aid/all: This is the default value for the publish/aid/<message> parameters below. It defaults to publish/all. Individual messages can be enabled or disabled by setting the parameters below.
  • publish/aid/alm: Topic ~aidalm
  • publish/aid/eph: Topic ~aideph
  • publish/aid/hui: Topic ~aidhui

RXM messages

  • publish/rxm/all: This is the default value for the publish/rxm/<message> parameters below. It defaults to publish/all. Individual messages can be enabled or disabled by setting the parameters below.
  • publish/rxm/alm: Topic ~rxmalm
  • publish/rxm/eph: Topic ~rxmeph
  • publish/rxm/raw: Topic ~rxmraw. Type is either RxmRAW or RxmRAWX depending on firmware version.
  • publish/rxm/rtcm: Topic ~rxmrtcm. Firmware >= 8 only
  • publish/rxm/sfrb: Topic ~rxmsfrb. Type is either RxmSFRB or RxmSFRBX depending on firmware version.

MON messages

  • publish/mon/all: This is the default value for the publish/mon/<message> parameters below. It defaults to publish/all. Individual messages can be enabled or disabled by setting the parameters below.
  • publish/mon/hw: Topic ~monhw

NAV messages

  • NAV messages are time stamped with iTOW, and multiple messages can be synchronized with ublox_msg_filters
  • publish/nav/all: This is the default value for the publish/mon/<message> parameters below. It defaults to publish/all. Individual messages can be enabled or disabled by setting the parameters below.
  • publish/nav/att: Topic ~navatt. ADR/UDR devices only
  • publish/nav/clock: Topic ~navclock
  • publish/nav/posecef: Topic ~navposecef
  • publish/nav/posllh: Topic ~navposllh. Firmware <= 6 only. For firmware 7 and above, see NavPVT
  • publish/nav/pvt: Topic ~navpvt. Firmware >= 7 only.
  • publish/nav/relposned: Topic ~navrelposned. HPG Rover devices only
  • publish/nav/heading: Topic ~navheading. HP Position receiver devices only. For firmware 9 and above
  • publish/nav/sat: Topic ~navsat
  • publish/nav/sol: Topic ~navsol. Firmware <= 6 only. For firmware 7 and above, see NavPVT
  • publish/nav/status: Topic ~navstatus
  • publish/nav/svin: Topic ~navsvin. HPG Reference Station Devices only
  • publish/nav/svinfo: Topic ~navsvinfo
  • publish/nav/velned: Topic ~navvelned. Firmware <= 6 only. For firmware 7 and above, see NavPVT

ESF messages

  • publish/esf/all: This is the default value for the publish/esf/<message> parameters below. It defaults to publish/all for ADR/UDR devices. Individual messages can be enabled or disabled by setting the parameters below.
  • publish/esf/alg: Topic ~esfalg
  • publish/esf/ins: Topic ~esfins
  • publish/esf/meas: Topic ~esfmeas
  • publish/esf/raw: Topic ~esfraw
  • publish/esf/status: Topic ~esfstatus

HNR messages

  • publish/hnr/pvt: Topic ~hnrpvt. ADR/UDR devices only

TIM messages

  • publish/tim/tm2: Topic timtm2. TIM devices only

Launch

A sample launch file ublox_device.launch loads the parameters from a .yaml file in the ublox_gps/config folder, sample configuration files are included. The required arguments are node_name and param_file_name. The two topics to which you should subscribe are ~fix and ~fix_velocity. The angular component of fix_velocity is unused.

Version history

  • 1.1.4:

    • Added messages for firmware 9: NavRELPOSNED9.
    • Added option to publish sensor_msgs/Imu message for High Precision Position Receiver devices with firmware version >= 9 for moving base applications (For example ZED-F9P; UBX-19009093 AppNote).
  • 1.1.3:

    • Update by TUC-ProAut
    • Added raw data stream output. To publish ros messages set rosparam raw_data_stream/publish to true. To store to a logfile set rosparam set raw_data_stream/dir to the appropriated directory. This feature has nothing todo with Raw Data Products.
    • Added flag config_on_startup to deactivate configuration of ublox.
  • 1.1.2:

    • BUG FIX for NavSatFix messages for firmware >=7. The NavSatFix now only uses the NavPVT message time if it is valid, otherwise it uses ROS time.
    • BUG FIX for TMODE3 Fixed mode configuration. The ARP High Precision position is now configured correctly.
    • BUG FIX for NavDGPS message which had the wrong Message ID.
    • After GNSS configuration & reset, I/O resets automatically, without need for restart.
    • Added UBX-UPD messages. For firmware version 8, the node can now save the flash memory on shutdown and clear the flash memory during configuration based on ROS params.
    • Added CfgGPS message and MonHW6 message for firmware version 6.
    • Added respawn parameters to example launch file.
    • Added parameters to load/save configuration.
    • Added raw_data parameter for Raw Data Products.
    • Changed name of "subscribe" parameter namespace to "publish" for clarity.
    • Migrated all callback handling to callback.h from gps.h and gps.cpp. ACK messages are now processed through callback handlers.
    • Modified how the I/O stream is initialized so that the node now handles parsing the port string.
    • Changed class names of Ublox product components (e.g. UbloxTim -> TimProduct) for clarity.
    • Cleaned up ublox custom serialization classes by adding typedefs and using count to determine repeating block statements instead of using try-catch statements to serialize stream.
    • Added doxygen documentation
  • 1.1.1:

    • BUG FIX for acknowledgments. The last received ack message was accessed by multiple threads but was not atomic. This variable is now thread safe.
    • BUG FIX for GNSS configuration for Firmware 8, the GNSS configuration is now verified & modified properly.
    • BUG FIX for fix diagnostics. NumSV was displaying incorrectly. For firmware versions >=7, the NavPVT flags variable is now compared to the constants from the NavPVT message not NavSOL.
    • Removed ublox_version param, value is now determined by parsing MonVER.
    • Organized parameters into namespaces.
    • Better parameter checking. Checks that unsigned ints and vectors of unsigned ints are in bounds.
    • Changed rtcm/rate parameter to a vector instead of a scalar, now each RTCM id can be set to a different rate.
    • Diagnostic variables are displayed more clearly with units included.
    • For HPG Rovers, added diagnostic updater for Carrier Phase Solution.
    • Added CfgNMEA messages for each firmware version and a CfgDAT message, as well as parameters to configure the NMEA and Datum.
    • Added constants for NavSAT_SV flags bit mask.
  • 1.1.0:

    • BUG FIX for NAV-PVT messages for firmware 7. The NAV-PVT message is shorter for firmware version 7, the new message is NavPVT7
    • BUG FIX for SBAS configuration, it now configures SBAS only if the device is SBAS capable. Previously, if enable_sbas was set to false, it would not configure, meaning that SBAS could not be turned off.
    • BUG FIX, the baudrate of the serial I/O port was not configured correctly, on the device it was set to the user desired settings, but on the computer it was always set to 4800.
    • BUG FIX, Diagnostics for Nav Status are now updated in firmware version 6.
    • BUG FIX, The method which waited for ACKs now checks if the ACK is from the correct class and message ID.
    • Added messages for CfgTMODE3, CfgHNR, CfgRST, CfgINF, NavATT, ESF messages, Inf message (for all INF types), HnrPVT, MgaGAL, NavSAT, MonHw, NavPVT7 (for firmware version 7).
    • Restructured Node class so that it now uses composition. The main node contains instances of classes which implement UBloxInterface, and calls the methods for each interface added to the node. The classes which implement the interface add new features that are not generic to all firmware versions or products. Each firmware version (6-8) has an interface, and each product category has one (SPG, HPG REF, HPG ROV, TIM, FTS, ADR/UDR). The product type is determined from parsing the MonVER message.
    • Added implementations of ComponentInterface called UbloxHpgRef and UbloxHpgRov for HPG reference station and rover devices. The reference station tmode3 can be configured upon startup (see Options section) and the rover dgnss mode can be set. After survey in, once the reference station entire time mode, the nav_rate is set to the user desired value (it must be 1 Hz during survey-in) and the RTCM output messages are enabled. The state can be monitored through the rqt_runtime_monitor. These classes were tested on C94-M8P devices.
    • Added an implementation of ComponentInterface called UbloxAdrUdr for ADR/UDR devices. It which subscribes to NavATT and ESF messages and configures useAdr. The diagnostics monitor specific to these devices is not implemented. This class has not been tested on a hardware device.
    • Added a partial implementation of UbloxTim for TIM devices which subscribes to RxmRAWX and RxmSFRBX messages. The getRosParams(), configureUblox(), and initializeDiagnostics() methods are unimplemented.
    • Added a skeleton class for UbloxFts for FTS devices which is unimplemented. See the ublox_gps node.cpp and node.h files.
    • Changed how GNSS is configured in firmware version 8. The documentation recommends a cold restart after reconfiguring the GNSS, and will reset the device if it receives a CfgGNSS message, even if the settings do not change. For firmware version 8, before reconfiguring, the node first checks if the current GNSS settings are the same as the desired settings. If so, it will not send a CfgGNSS message to the device. After reconfiguring, it will cold reset the GNSS.
    • Migrated I/O initialization to the Gps class from the Node class.
    • INF messages are now printed to the ROS console.
    • Changed how debug statements are displayed. If the debug parameter is set to 1 or greater, it prints debug messages.
  • 1.0.0:

    • Added messages for firmware 8: NavPVT, RxmRAWX, RxmSFRBX.
    • Modified ConfigGNSS and MonVER to include repeated blocks and added ConfigGNSS_Block (configures all GNSS at once) and MonVER_Extension (for MonVER_Char blocks).
    • MonVER info is now published upon initialization.
    • Fixed SBAS crashing issue (node crashed if device didn't have SBAS capabilities)
    • Modified remaining messages to update to firmware 8
    • Added UbloxNode abstract class which does all previous node functions which are the same for all firmware versions. Added subclasses which do functions specific to a given firmware version (e.g. subscribing to NavPVT messages).
    • Added a read lock to AsyncWorker
    • Removed hard-coded values from Gps and Node classes specific to a certain device and changed them to configurable parameters. Modified example launch file accordingly.
    • Added example parameter yaml files and launch file to load parameters from this file.
    • Moved implementations of Callback functions into callback.h (from gps.h and gps.cpp)
    • Updated formatting of some files per google style guide spec (e.g. 80 chars per line).
  • 0.0.5:

    • Reformat files under ublox_gps
  • 0.0.4:

    • Added install targets.
  • 0.0.3:

    • Added the enable_glonass, enable_beidou and enable_ppp options.
    • Added the ublox_version option. Consult known issues for important details.
    • Added numSVs field to the RQT monitor.
  • 0.0.2:

    • Changed meas_rate to simply rate, which is in Hz. meas_rate is computed automatically.
  • 0.0.1:

    • All topics are now published on a private node handle.
    • Velocities are published as stamped twist messages with covariance. Angular components are unused.
    • hAcc, vAcc and sAcc are used to generate diagonal covariances.
    • Velocities use the correct convention: X-Y-Z = East-North-Up.
    • 2D or 3D fix correspond to STATUS_FIX (previously only 3D).
    • fix and fix_velocity are time-stamped synchronously, using the iTOW to check arrival times.
    • Added options for changing the CFG-NAV5 settings (see above).
    • Added support for diagnostic_updater.
    • "received ACK" messages are elevated to debug level 2.
    • Corrected issue where baudrate was not set correctly using rosparam.
    • Corrected issue where socket destructors were not called.
  • 0.0.0:

Adding new features

Adding new messages

  1. Create the .msg file and add it to ublox_msgs/msg. Make sure the file includes the constants CLASS_ID and MESSAGE_ID.

  2. Modify ublox_msgs/include/ublox_msgs/ublox_msgs.h. a. Include the message header. b. Make sure the message's class constant is declared in the ublox_msgs::Class namespace. c. Declare the message's ID constant in the ublox_messages::Message::<CLASS_NAME> namespace.

  3. Declare the message in ublox_msgs/src/ublox_msgs.cpp.

  4. If the message has a repeated or optional block of varying size, create an additional message for the repeating block and include it in the message. a. Include the block message in the ublox_msgs/include/ublox_msgs/ublox_msgs.h file. b. Modify ublox_msgs/include/ublox/serialization/ublox_msgs.h and add a custom Serializer. If the message doesn't include the number of repeating/optional blocks as a parameter, you can infer it from the count/size of the message, which is the length of the payload.

  5. Modify ublox_gps/src/node.cpp (and the header file if necessary) to either subscribe to the message or send the configuration message. Be sure to modify the appropriate subscribe function. For messages which apply to all firmware/hardware, modify UbloxNode::subscribe(). Otherwise modify the appropriate firmware or hardware's subscribe function, e.g. UbloxFirmware8::subscribe(), HpgRovProduct::subscribe(). If the message is a configuration message, consider modifying ublox_gps/src/gps.cpp (and the header file) to add a configuration function.

One message protocol for multiple IDs (e.g. INF message)

If a given message protocol applies to multiple message IDs (e.g. the Inf message), do not include the message ID in the message itself. When declaring the message, for the first declaration, use DECLARE_UBLOX_MESSAGE macro. For the following declarations use the DECLARE_UBLOX_MESSAGE_ID macro.

Adding device / firmware specific functionality

The node.cpp file in ublox_gps contains a main Node class called UbloxNode which acts as the ROS Node and handles the node initialization, publishers, and diagnostics. UbloxNode contains a vector components_ of instances of ComponentInterface. The UbloxNode::initialize() calls each component's public interface methods. The node contains components for both the firmware version and the product category, which are added after parsing the MonVER message. Any class which implements ComponentInterface can be added to the UbloxNode components_ vector and its methods will be called by UbloxNode. Simply add an implementation of ComponentInterface to the ublox_gps node.h and node.cpp files. Behavior specific to a given firmware or product should not be implemented in the UbloxNode class and instead should be implemented in an implementation of ComponentInterface.

Currently there are implementations of ComponentInterface for firmware versions 6-8 and product categories HpgRefProduct, HpgRovProduct, AdrUdrProduct, TimProduct, FtsProduct. SPG products do not have their own implementation of ComponentInterface, since the Firmware classes implement all of the behavior of SPG devices.

HpgRefProduct and HpgRovProduct have been tested on the C94-M8P device.

Adding new parameters

  1. Modify the getRosParams() method in the appropriate implementation of ComponentInterface (e.g. UbloxNode, UbloxFirmware8, HpgRefProduct, etc.) and get the parameter. Group multiple related parameters into a namespace. Use all lower case names for parameters and namespaces separated with underscores.
  • If the type is an unsigned integer (of any size) or vector of unsigned integers, use the ublox_node::getRosUint method which will verify the bounds of the parameter.
  • If the type is an int8 or int16 or vector of int8's or int16's, use the ublox_nod::getRosInt method which will verify the bounds of the parameter. (This method can also be used for int32's but ROS has methods to get int32 parameters as well).
  1. If the parameter is used during configuration also modify the ComponentInterface's configureUblox() method to send the appropriate configuration message. Do not send configuration messages in getRosParams().
  2. Modify this README file and add the parameter name and description in the appropriate section. State whether there is a default value or if the parameter is required.
  3. Modify one of the sample .yaml configuration files in ublox_gps/config to include the parameter or add a new sample .yaml for your device.

Known Issues

Unimplemented / Untested Devices

TimProduct and FtsProduct are currently unimplemented skeleton classes. AdrUdrProduct is implemented, with the exception of initializeRosDiagnostics() and has not been tested on hardware.

UbloxFirmware7 has not been properly tested on a device with firmware version 7. UbloxFirmware6 has been tested on a device with firmware version 8, but not with firmware version 6.

Debugging

For debugging messages set the debug parameter to > 0. The range for debug is 0-4. At level 1 it prints configuration messages and checksum errors, at level 2 it also prints ACK/NACK messages and sent messages. At level 3 it prints the received bytes being decoded by a specific message reader. At level 4 it prints the incoming buffer before it is split by message header.

Troubleshooting

  1. Why can't the ublox_gps node open my device, even though I have correctly specified the path in /dev?
  • Make sure you are the owner of the device, or a member of dialout group.

Links

Consult the official protocol spec for details on packets supported by u-blox devices.

ublox's People

Contributors

balamuruganky avatar civerachb-cpr avatar fcladera avatar firolino avatar g-pereira avatar gareth-cross avatar haho12 avatar ito-san avatar jeromead avatar kartikmohta avatar khallenbeck-dsi avatar matheuskbc avatar meyerj avatar msadowski avatar r0gi avatar riebl avatar sandruz avatar stewart-worrall avatar timple avatar versatran01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ublox's Issues

The GPS status is always -1.

When I use Ublox EVK_M8L by this driver.
I check the navstatus:

iTOW: 282172800
gpsFix: 0
flags: 76
fixStat: 0
flags2: 0
ttff: 0
msss: 1270359

The gpsFix is always 0. Which means that there is no fix. But the EVK_M8L model supports 3d dead reckoning. Is there any way to fix this problem?

High CPU usage on disconnection of device

I'm using a ublox neo-m8u device. I observed that when the connection gets lost (e.g. disconnection of the usb cable), the CPU usage of all cores immediately increases to 60-80%. See here two screenshots before and after removing the usb cable:

Before:
image

After:
image

Error message is:

[ERROR] [1576242406.425972302]: U-Blox ASIO input buffer read error: End of file, 0

Is this a known problem?

feature request: transmit RTCM messages over ROS topics

Since our robots have already ROS communication setup between the robots and a docking station, it would be convenient if the RTK-GPS messages can be transferred via this communication channel.
Instead of setting up a seperate serial line.

Would this be a useful feature or am I missing something here?

With respect to latency I think we should be able to get below 500ms which is enough for ublox.

The node hangs on the survey-in completion

I'm trying to get RTCM stream from Drotek Tiny RTK GPS (ublox NEO-M8P-2-11). I faced a strange node behavior: the node hangs on the survey-in completion.

Here is a clipping from the log:

[DEBUG] [1527670615.269908056]: U-Blox sent 18 bytes:
b5 62 0b 30 01 00 16 52 10 b5 62 0b 31 01 00 16 53 14
[DEBUG] [1527670616.269507921]: U-Blox sent 18 bytes:
b5 62 0b 30 01 00 17 53 11 b5 62 0b 31 01 00 17 54 15
[ INFO] [1527670617.083385910]: Setting mode (internal state) to Time Mode
[DEBUG] [1527670617.083520593]: Configuring measurement rate to 1000 and nav rate to 1
[DEBUG] [1527670617.083661341]: Waiting for ACK 0x06 / 0x08
[ERROR] [1527671071.268433237]: Ublox AsyncWorker::send: Output buffer too full to send message
[ERROR] [1527671071.268639170]: Ublox AsyncWorker::send: Output buffer too full to send message

I clarified the stop point:

Gps::waitForAcknowledge(const boost::posix_time::time_duration& timeout, uint8_t class_id, uint8_t msg_id) -> worker_->wait(timeout) -> ScopedLock lock(read_mutex_)

Here is the configuration file (survey-in settings are set to allow survey-in completion in the office for the debug purposes):
c94_m8p_base.yaml.gz

Could you give a hint on this issue?

Thanks!

How to use this with EVK M8N?

Hello

I have been trying to figure out what would change in the config file, but in vain. Can anyone point me in the right direction? The readme suggests to look at the documentation that came with the particular evk to modify the config files. I can't seem to find/understand anything for EVK- M8N.

Thanks!

uart1:baudrate cannot be configured on f9p

Also holds for:

uart1:
  baudrate:
  in:
  out:
uart2:
  baudrate:
  in:
  out:
gnss:
  gps: 
  glonass: 
  beidou: 

USB baudrate still works though.

Seems like the interface description has changed more than expected / implemented in #64
The list above is what we encountered and is not a full list.

Basic operation works though including the imu heading message.

RINEX File

Good day,

Do you have any functions implemented to store the GPS raw data in a RINEX file?
I want to post-process the data recorded in a rosbag file, and I know that you have RxmRAWX.msg and
RxmSFRBX.msg but how can I find more info about the file format so that I can create one?

Issue changing frequency

I am not able to change the GPS and ROS update rate. I am using an f9p and would like to get data at 10 hz.

My configuration file looks as follows


debug: 1                    # Range 0-4 (0 means no debug statements will print)

device: /dev/ubloxF9P
frame_id: gps
rate: 10
nav_rate: 10

fix_mode: auto

uart1:
  in: 0
  out: 0

usb:
  in: 32                     # RTCM 3
  out: 0                    # No UART out for rover

# Enable u-blox message publishers
publish:
  all: false
  nav:
    all: true
    relposned: true
    posllh: true
    posecef: true

launching the node gives me the following output

[DEBUG] [1565274373.880197059]: U-Blox: Set ASIO baudrate to 9600
[DEBUG] [1565274373.880309379]: Configuring UART1 baud rate: 9600, In/Out Protocol: 0 / 0
[DEBUG] [1565274373.882758226]: EXT CORE 1.00 (94e56e), HW VER: 00190000
[DEBUG] [1565274373.882857437]: ROM BASE 0x118B2060
[DEBUG] [1565274373.882897782]: FWVER=HPG 1.11
[DEBUG] [1565274373.882926557]: PROTVER=27.10
[DEBUG] [1565274373.882953912]: MOD=ZED-F9P
[DEBUG] [1565274373.882994036]: GPS;GLO;GAL;BDS
[DEBUG] [1565274373.883023069]: QZSS
[ INFO] [1565274373.883112140]: U-Blox Firmware Version: 8
[ INFO] [1565274373.890233711]: U-Blox configured successfully.
[DEBUG] [1565274373.890339632]: Subscribing to U-Blox messages
[DEBUG] [1565274373.922967659]: Configuring INF messages

Everything starts, but I am not able to get the messages at any other speed than 1Hz.

do you have M8L Raw data ?

Do you have a ROSBAG / UBlox raw data file for the unit tests ? I do not have an M8 version and I couldn't seem to find any online..

How to view RTCM3 messages sent by base and received by rover

I am trying to set up base and rover with c94 m8p modules. My base station goes into Time mode after survey completes. I launch rover node with tmode3 = 0, and it runs without any error. But I dont see any green lights on either rover or base station. How do I confirm that RTCM3 messages are being sent by base and received by rover?

Cannot publish Raw measurements topic

Dear all,

I am using a Ublox F9P and trying to set up the ESF messages to be published on ROS. The fix and fix velocity topics are published correctly, however I cannot retrieve the ESF raw topic.

In the config file I have set
publish: esf: true
I have also tried:
publish: esf: raw: true

Yet when I type rostopic list in the terminal, I only get fix and fix velocity topics
Does anyone know how I could fix this?

Many thanks,
Anthony

Compatibility with C94-M8P-2

Hi

I have a C94-M8P-2 development board (two of them, running as a Base/Rover pair). It seems like this package is built for C94-M8P-0? In particular, given that the *-2 can either act as base (REF) or rover (ROV), I can only see it reporting that it is a "REF" device (this check is made in ublox_gps/src/node.cpp:107), even when I specify the rover yaml file. I have added a parameter to explicitly tell the node if its working with a ROV device, which 'seems' to work but it's not clear of the parameters in the yaml are getting propagated properly.

  1. Has this package been tested with the newer C94-M8P-2?
  2. What may need to change to ensure all the settings are getting set correctly? (I'm happy to make necessary changes, just need some guidance)
  3. I can read all the /rover/nav* topics, when I set the explicit parameter

Thanks!

Terry

multiple gps devices

Hello,

I have one more question.
I have multiple ublox devices and I can run following commands.

$ roslaunch ublox_gps ublox_gps.launch

$ roslaunch ublox_gps ublox_gps.launch device:=/dev/ttyACM1

But, how can I access to the msgs from differrent ublox devices?
$ rostopic list returns only one msgs.

Regards,
Kim

debian release

With your acceptance of PR #64 your package seems quite useful to us. Would you be interested to create a debian release for the ROS repositories?
http://wiki.ros.org/ROS/ReleasingAPackage

If you don't have the time or interest available for this, I could do it for you. That would mean a new repository would need to be created ublox-release for which I would need write access.

Thanks in advance for the consideration.

Device is cold restarting every launch.

Hi everyone!

I have U-blox F9P receiver and this driver seems to be working properly, except sometimes receiving NACK messages, but that is alright, because lat/lon/alt values are precise.

But every time I launch ublox-node with given launch and config file below, the device is cold-resetting, which leads to 15 sec. restart.

What should I change in the code in order to disable this reseting? The configuration of the device stays the same between launches.


Launch file

<?xml version="1.0" encoding="UTF-8"?>

<launch>
  <arg name="node_name" />
  <arg name="param_file_name" doc="name of param file, e.g. rover" default="f9p" />
  <arg name="output" default="screen" />
  <arg name="respawn" default="true" />
  <arg name="respawn_delay" default="30" />
  <arg name="clear_params" default="true" />

  <node pkg="ublox_gps" type="ublox_gps" name="$(arg node_name)"
        output="$(arg output)" 
        clear_params="$(arg clear_params)"
        respawn="$(arg respawn)" 
        respawn_delay="$(arg respawn_delay)">
    <rosparam command="load" 
              file="$(find ublox_gps)/config/$(arg param_file_name).yaml" />
  </node>
</launch>

Config file

dynamic_model: portable
fix_mode: auto # Switches between 2D/3D automatically
dr_limit: 0 # Dead reckoning limit
enable_ppp: false # Advanced setting not supported by all devices

rate: 20 # Measurement rate in Hz
nav_rate: 4 # in number of measurement cycles
device: /dev/ttyACM0
frame_id: gps_ublox1

dynamic_model: automotive

uart1:
    baudrate: 38400 # baudrate is device specific, check the device manual
    in: 1 # UBX
    out: 2 # NMEA
gnss:
    gps: true # (not required since it defaults to true)
    glonass: true
    beidou: true
    qzss: true
    sbas: false
    galileo: true

inf:
    all: true # Whether to display INF messages
publish:
    all: true
    aid:
        hui: false
subscribe:
    all: true # Subscribe to all messages
    aid:
        all: false # ... except AID messages``

ROSOUT

[ INFO] [Time: 1564987772.645131008]: [/GPS/ubx_receiver] U-Blox: Opened serial port /dev/ttyACM0
[DEBUG] [Time: 1564987772.645646104]: [/GPS/ubx_receiver] Configuring UART1 baud rate: 38400, In/Out Protocol: 1 / 2
[DEBUG] [Time: 1564987772.646969144]: [/GPS/ubx_receiver] EXT CORE 1.00 (61ce84), HW VER: 00190000
[DEBUG] [Time: 1564987772.647008517]: [/GPS/ubx_receiver] ROM BASE 0xDD3FE36C
[DEBUG] [Time: 1564987772.647047500]: [/GPS/ubx_receiver] FWVER=HPG 1.00
[DEBUG] [Time: 1564987772.647064783]: [/GPS/ubx_receiver] PROTVER=27.00
[DEBUG] [Time: 1564987772.647080632]: [/GPS/ubx_receiver] MOD=ZED-F9P
[DEBUG] [Time: 1564987772.647098306]: [/GPS/ubx_receiver] GPS;GLO;GAL;BDS
[DEBUG] [Time: 1564987772.647113384]: [/GPS/ubx_receiver] QZSS
[ INFO] [Time: 1564987772.647152607]: [/GPS/ubx_receiver] U-Blox Firmware Version: 8
[ WARN] [Time: 1564987772.647209724]: [/GPS/ubx_receiver] Product category HPG  from MonVER message not recognized options are HPG REF, HPG ROV, TIM, ADR, UDR, FTS, SPG
[DEBUG] [Time: 1564987772.664570786]: [/GPS/ubx_receiver] Configuring measurement rate to 50 ms and nav rate to 4 cycles
[DEBUG] [Time: 1564987772.665207169]: [/GPS/ubx_receiver] Disabling PPP
[DEBUG] [Time: 1564987772.665670317]: [/GPS/ubx_receiver] Setting dynamic model to 4
[DEBUG] [Time: 1564987772.666083642]: [/GPS/ubx_receiver] Setting fix mode to 3
[DEBUG] [Time: 1564987772.666458775]: [/GPS/ubx_receiver] Setting DR Limit to 0
[DEBUG] [Time: 1564987772.667392075]: [/GPS/ubx_receiver] Read GNSS config.
[DEBUG] [Time: 1564987772.667415579]: [/GPS/ubx_receiver] Num. tracking channels in hardware: 60
[DEBUG] [Time: 1564987772.667434314]: [/GPS/ubx_receiver] Num. tracking channels to use: 60
[DEBUG] [Time: 1564987772.667456365]: [/GPS/ubx_receiver] QZSS Configuration is different 1, 1
[DEBUG] [Time: 1564987772.667474730]: [/GPS/ubx_receiver] QZSS Configuration: 286326785
[DEBUG] [Time: 1564987772.667492683]: [/GPS/ubx_receiver] QZSS Configuration: 286326785
[DEBUG] [Time: 1564987772.667514324]: [/GPS/ubx_receiver] Re-configuring GNSS.
[ WARN] [Time: 1564987772.668483641]: [/GPS/ubx_receiver] GNSS re-configured, cold resetting device.
[ WARN] [Time: 1564987772.668508167]: [/GPS/ubx_receiver] Resetting u-blox. If device address changes, node must be relaunched.

UBX and NMEA messages are mixed

After running the configuration, I try to read from my C94-M8P receiver NMEA messages using the command
gpscat -s 19200 /dev/ttyACM0
As a result, I get all the messages mixed up. As I understand it, NMEA and UBX messages, which I transmit to the receiver with the configuration. Is it possible to solve this problem somehow, so that it is possible to receive only the NMEA messages, it is possible in the ROS-package settings to disable the persistent messaging

\x00\x00\x00\x00\x00\x00\x00\xd7\xecA\xd4\x86Ko\xa27\xd6\xdc9K^G2\xd0\x16\x19\xaa\x83\xc8\xa8\x8a
\x85\x83\xc9\xd9\x03\xd1p8\xd0\xc7\xd9\xa4}W\x7f\xe1\x1ac\xc7\xa1v\xe1\xd8\xaf\xdc\xa9\xc0\x83@\xdc8\x06\x8c9\xb1\xa7c2N\x9a\xfa\xb41\xf9\xd6\x1e\xc1]\xa3\xc7L_\xce\x0e<\xd0\xe6Y\xe4t<\xd0\xf9Y\xa4uW\x8a\xc1\x05\x83\xc6\xc0\xa01\x91</\xd8Y\xa4\x8bW\x8c\x97\x05\xa3F\xd8\x851\x91<\x84\xb8Y\xa6uv\x8a\xf7\x05\xd5G\xda^1\x91\xf7c\xd8\xd4\x85t\xbe\x8a \x85\x83\xc6\xda\xa11\x91"\xd0\xd2(\xa4uWu\xf7\xba\x83F\xda\xa11\x91<\xc9\xd8Y\xa4\x97\xb5b\x01\x064\x00Y\x1b\x03\xd1\xd0\x03\x00\xe0\x07\x02\xddK\x8d\xeb\x16\xca\x8c\xb9\x04&G\xdc\x1dV \x00\x00(\x00\x00\x00\xff\xff\xff\xff\xe2\xff\xff\xff\\x01\x00\x00\xcf\x02\x02\x03\x12\x19\xb6\x03^_\xb5b\x01\x07\\x00Y\x1b\x03\xe2\x07\x08\x1a\x0e\x1c\x1a7N\x00\x0\x1f\xbf\x8a\x01\x00\xb8\xdc\x00\x00-@\x01\x00M-\x00\x00\x10\xfe\xff\xff\xa4\xff\x00\x00\xde\xf9\x82\x00\xcf\x02\x00\x00\xb5b\x014\xc2\x00`Y\x1b\x03\x01\x1f\x00\x001\x00\x00\x0\x05\x001\x00\x000\x06\x05\x001\x00\x00\x07\x05\x001\x00\x00\x08
\x19'1\x00\x00
\x001\x00\x00
\x05\x001\x00$GNRMC,142826.00,A,5206.02475,N,01138.87490,E,0.981,,260818,,,A6C
$GNVTG,,T,,M,0.981$GNGGA,142826.00,5206.02475,N,01138.87490,E,1,03,7.12,56.5,M,44.6,M,,72
$GPGSV,4,2,14,11,72,192,,14,49,086,13,17,24,317,,18,70,124,21
7E
$GNGLL,5206.02475,N,01138.87490,E,142826.00,A,A
70
\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00K\x0e\xc0@K\x0e\xe8@K\x

Issue with multiple GPS nodes

Hello,

I have two ublox GPS modules and I want to connect and record data from both of them simultaneously.
I followed this suggestion and created a launch file as given below. It creates two different nodes gps1 and gps2. But topics are only published in one of them. What could be the error? I highly appreciate any suggestions.

<launch>
<arg name="output" default="screen" />
 <arg name="respawn" default="true" />
 <arg name="respawn_delay" default="30" />
 <arg name="clear_params" default="true" />

 <node pkg="ublox_gps" type="ublox_gps" name="gps1"
       output="$(arg output)" 
       clear_params="$(arg clear_params)"
       respawn="$(arg respawn)" 
       respawn_delay="$(arg respawn_delay)">
   <rosparam command="load" 
             file="$(find ublox_gps)/config/gps1.yaml" />
 </node>

 <node pkg="ublox_gps" type="ublox_gps" name="gps2"
       output="$(arg output)" 
       clear_params="$(arg clear_params)"
       respawn="$(arg respawn)" 
       respawn_delay="$(arg respawn_delay)">
   <rosparam command="load" 
             file="$(find ublox_gps)/config/gps2.yaml" />
 </node>
</launch>

Thank you

M8L support?

I'm using EVK-M8L device, but seems like this ros driver does not support M8L?
Such as when Setting use_adr = true, the following error will come:

ublox

Failed to poll MonVER & set relevant settings

Hello,

When I running by launch file, but the program hang up, the Error is " Failed to poll MonVER & set relevant settings"

kevin@kevin-virtual-machine:~/catkin_ws/src/ublox-master/ublox_gps/launch$ roslaunch ublox_device.launch
... logging to /home/kevin/.ros/log/ba984710-6f31-11ea-889b-d31927527346/roslaunch-kevin-virtual-machine-87976.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
WARNING: disk usage in log directory [/home/kevin/.ros/log] is over 1GB.
It's recommended that you use the 'rosclean' command.

started roslaunch server http://127.0.0.1:44973/

SUMMARY

CLEAR PARAMETERS

  • /ublox_gps/

PARAMETERS

  • /rosdistro: kinetic
  • /rosversion: 1.12.14
  • /ublox_gps/debug: 1
  • /ublox_gps/device: /dev/ttyUSB0
  • /ublox_gps/dgnss_mode: 3
  • /ublox_gps/dr_limit: 0
  • /ublox_gps/dynamic_model: airborne2
  • /ublox_gps/enable_ppp: False
  • /ublox_gps/fix_mode: auto
  • /ublox_gps/frame_id: gps
  • /ublox_gps/gnss/beidou: False
  • /ublox_gps/gnss/glonass: True
  • /ublox_gps/gnss/qzss: False
  • /ublox_gps/inf/all: True
  • /ublox_gps/nav_rate: 4
  • /ublox_gps/publish/aid/hui: False
  • /ublox_gps/publish/all: True
  • /ublox_gps/publish/nav/posecef: False
  • /ublox_gps/rate: 4
  • /ublox_gps/save/device: 4
  • /ublox_gps/save/mask: 3103
  • /ublox_gps/uart1/baudrate: 38400
  • /ublox_gps/uart1/in: 32
  • /ublox_gps/uart1/out: 0

NODES
/
ublox_gps (ublox_gps/ublox_gps)

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

setting /run_id to ba984710-6f31-11ea-889b-d31927527346
process[rosout-1]: started with pid [87999]
started core service [/rosout]
process[ublox_gps-2]: started with pid [88016]
[ INFO] [1585207000.055439752]: U-Blox: Opened serial port /dev/ttyUSB0
[DEBUG] [1585207000.558687442]: U-Blox: Set ASIO baudrate to 9600
[DEBUG] [1585207001.065283482]: U-Blox: Set ASIO baudrate to 19200
[DEBUG] [1585207001.572044700]: U-Blox: Set ASIO baudrate to 38400
[DEBUG] [1585207001.572119662]: Configuring UART1 baud rate: 38400, In/Out Protocol: 32 / 0
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to poll MonVER & set relevant settings

Setting node_name arg

When i try to run the launch file inside: ublox_gps --> launch --> ublox_device.launch it doesn't work and output this message:

problemino

My question is: where and how configure "node_name" ???
Here there are the "ublox_device.launc" launcher:
problemino2

Making it work for Protocol Versions 27 eg. ZED-F9P

I am trying to make this repository work for ZED-F9P hardware. I am having a C099-F9P board.
What must be the steps that I must follow in order to make it work. Initially, for first step I am only trying to get the NMEA data. The following is the config file:
debug: 1 # Range 0-4 (0 means no debug statements will print)
device: /dev/ttyACM0
frame_id: gps
dynamic_model: portable
fix_mode: 2D # Switches between 2D/3D automatically
dr_limit: 0 # Dead reckoning limit
enable_ppp: false # Advanced setting not supported by all devices

rate: 2 # Measurement rate in Hz
nav_rate: 4 # in number of measurement cycles

uart1:
baudrate: 38400 # baudrate is device specific, check the device manual
in: 1 # UBX
out: 2 # NMEA
gnss:
gps: true # (not required since it defaults to true)
glonass: true
beidou: true
qzss: true
sbas: false
galileo: true

nmea:
set: true
version: 65
num_sv: 8
sv_numbering: 1
compat: true
consider: true
limit82: true
high_prec: false
filter:
pos: false
msk_pos: false
time: false
date: false
gps_only: false
track: false
gnssToFilter:
gps: false
sbas: true
qzss: false
glonass: false
beidou: false
main_talker_id: 1
gsv_talker_id: [0,0]
bds_talker_id: [0,0]

inf:
all: true # Whether to display INF messages
publish:
all: true
aid:
hui: false
tim:
tm2: true
nav:
clock: false
status: false
subscribe:
all: true # Subscribe to all messages
aid:
all: false # ... except AID messages`

The attached image shows the information I get from launching it.
ublox_gps

Can anyone guide me, from where should I start editing in order to make it work

RXM message generation for C94-M8P device

With the C94-M8P evaluation board it is currenctly not possible to generate RXM messages, even if the receiver is correctly configurated. This is due to a twist in u-blox product description. In the u-blox 8 Protocol Specification [1, p. 337] it says RXM-RAWX messages are only supported on Time Sync products, however in the datasheet for the evaluation board [2, p. 11] it is stated that "The NEO-M8P modules provide raw measurement data [...] in the UBX-RXM-RAWX message".

In the code for ublox_gps node, rawx is currently only implemented for timing products here. However, all devices using an u-blox M8P chipset generate raw data using RXM-RAWX instead of RXM-RAW.

I guess there should be some distinction in RawDataProduct.

As I have never worked with cpp, I can't suggest a fix. I would be happy about any fix.

Thanks!

[1] https://www.u-blox.com/sites/default/files/products/documents/u-blox8-M8_ReceiverDescrProtSpec_%28UBX-13003221%29_Public.pdf

[2] https://www.u-blox.com/sites/default/files/NEO-M8P_DataSheet_%28UBX-15016656%29.pdf

Error Message "Failed to set measurement rate to xx ms"

Hello

I have a low-cost RTK-GPS with an U-BLOX M8T Chip onboard.

In the output-Stream should come only the following messages:

  • NAV-POSLLH
  • NAV-STATUS
  • NAV-DOP
  • NAV-VELNED
  • NAV-SOL

The outputstream comes in the following format:

Rate: 5 Hz
Format:38400:8:n:1:off
-> baudrate 38400, 8 bits, no parity check, 1 stop bit, no flow control

I adapted the launch-file with these parameters, but I always get the following Error-Message:

Failed to set measurement rate to 200ms

So I tried wiht other rates (1-16Hz), but that never worked.

If you can give me a tip where the problem is, that would be very helpful.

Thank you for the answer.

failed to compile this driver in Ros with Catkin tool

Hi guys,

I tried to compile this driver in ROS with the Catkin tool. but I met errors when building the ublox_msgs package:
/drivers/ublox/ublox_msgs/include/ublox_msgs/ublox_msgs.h:32:31: fatal error: ublox_msgs/NavATT.h: No such file or directory
then i checked the file ublox_msgs.h and there are many headfiles included in it:

#include <ublox_msgs/NavATT.h>
#include <ublox_msgs/NavCLOCK.h>
#include <ublox_msgs/NavDGPS.h>
#include <ublox_msgs/NavDOP.h>
#include <ublox_msgs/NavPOSECEF.h>
#include <ublox_msgs/NavPOSLLH.h>
#include <ublox_msgs/NavRELPOSNED.h>
#include <ublox_msgs/NavSBAS.h>
#include <ublox_msgs/NavSOL.h>
#include <ublox_msgs/NavPVT.h>
#include <ublox_msgs/NavPVT7.h>
#include <ublox_msgs/NavSTATUS.h>
#include <ublox_msgs/NavSAT.h>
#include <ublox_msgs/NavSVIN.h>
#include <ublox_msgs/NavSVINFO.h>
#include <ublox_msgs/NavTIMEGPS.h>
#include <ublox_msgs/NavTIMEUTC.h>
#include <ublox_msgs/NavVELECEF.h>
#include <ublox_msgs/NavVELNED.h>

#include <ublox_msgs/RxmALM.h>
#include <ublox_msgs/RxmEPH.h>
#include <ublox_msgs/RxmRAW.h>
#include <ublox_msgs/RxmRAW_SV.h>
#include <ublox_msgs/RxmRAWX.h>
#include <ublox_msgs/RxmRAWX_Meas.h>
#include <ublox_msgs/RxmRTCM.h>
#include <ublox_msgs/RxmSFRB.h>
#include <ublox_msgs/RxmSFRBX.h>
#include <ublox_msgs/RxmSVSI.h>

#include <ublox_msgs/Inf.h>
#include <ublox_msgs/Ack.h>

#include <ublox_msgs/CfgANT.h>
#include <ublox_msgs/CfgCFG.h>
#include <ublox_msgs/CfgDAT.h>
#include <ublox_msgs/CfgDGNSS.h>
#include <ublox_msgs/CfgGNSS.h>
#include <ublox_msgs/CfgHNR.h>
#include <ublox_msgs/CfgINF.h>
#include <ublox_msgs/CfgINF_Block.h>
#include <ublox_msgs/CfgMSG.h>
#include <ublox_msgs/CfgNAV5.h>
#include <ublox_msgs/CfgNAVX5.h>
#include <ublox_msgs/CfgNMEA.h>
#include <ublox_msgs/CfgNMEA6.h>
#include <ublox_msgs/CfgNMEA7.h>
#include <ublox_msgs/CfgPRT.h>
#include <ublox_msgs/CfgRATE.h>
#include <ublox_msgs/CfgRST.h>
#include <ublox_msgs/CfgSBAS.h>
#include <ublox_msgs/CfgTMODE3.h>
#include <ublox_msgs/CfgUSB.h>

#include <ublox_msgs/UpdSOS.h>
#include <ublox_msgs/UpdSOS_Ack.h>

#include <ublox_msgs/MonGNSS.h>
#include <ublox_msgs/MonHW.h>
#include <ublox_msgs/MonHW6.h>
#include <ublox_msgs/MonVER.h>

#include <ublox_msgs/AidALM.h>
#include <ublox_msgs/AidEPH.h>
#include <ublox_msgs/AidHUI.h>

#include <ublox_msgs/EsfINS.h>
#include <ublox_msgs/EsfMEAS.h>
#include <ublox_msgs/EsfRAW.h>
#include <ublox_msgs/EsfSTATUS.h>
#include <ublox_msgs/EsfSTATUS_Sens.h>

#include <ublox_msgs/MgaGAL.h>

#include <ublox_msgs/HnrPVT.h>

#include <ublox_msgs/TimTM2.h>

but none of them can be found anywhere in the downloaded driver... that's why the compilation failed. are the head files missing or am I understanding something wrong here? Can anyone tell me where to find these head files?
Thanks a lot. :)

Metapackage dependencies

Hi!

I'm just starting to use your package. I think the package.xml in ublox directory should specify ublox_gps, ublox_msgs and ublox_serialization as dependencies. Then, when you install the package via apt-get install ros-melodic-ublox then all dependencies should be installed correctly.

I'm happy to make a PR for this if it's helpful.

RTCM msg 4072.0

Hi
Is it possible to make a moving Baseline setup with this Driver and send the 4072 message?

4072

Best regards
M

Running the driver on Raspberry PI

I have a raspberry PI loaded with Ubuntu and ROS Kinetic. The driver compiles and runs on the raspberry PI but doesn't publish the requested topics, although the same driver runs fine on x86 based system also with ROS Kinetic. Anyone had a similar issue?

Could not configure serial baud rate

Hello,
sometimes I get an error, if I want to connect the rover with my Rasperry Pi. The base and the rover are connected to difference Raspberry Pi. I can start the base without an error. But if I start the rover launch file, it works just every third time.

robot@igel01:~/catkin_ws/src/ublox/ublox_gps/config$ roslaunch ublox_gps ublox_device.launch node_name:=rover param_file_name:=c94_m8p_rover
... logging to /home/robot/.ros/log/bb634996-58d2-11e8-a299-b827eb0b48c0/roslaunch-igel01-5419.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://igel01:35856/

SUMMARY

CLEAR PARAMETERS

  • /rover/

PARAMETERS

  • /rosdistro: kinetic
  • /rosversion: 1.12.13
  • /rover/debug: 1
  • /rover/device: /dev/ttyACM0
  • /rover/dgnss_mode: 3
  • /rover/dr_limit: 0
  • /rover/dynamic_model: airborne2
  • /rover/enable_ppp: False
  • /rover/fix_mode: auto
  • /rover/frame_id: gps
  • /rover/gnss/beidou: False
  • /rover/gnss/glonass: True
  • /rover/gnss/qzss: False
  • /rover/inf/all: True
  • /rover/nav_rate: 4
  • /rover/publish/aid/hui: False
  • /rover/publish/all: True
  • /rover/publish/nav/posecef: False
  • /rover/rate: 4
  • /rover/save/device: 4
  • /rover/save/mask: 3103
  • /rover/sv_in/acc_lim: 3.0
  • /rover/sv_in/min_dur: 300
  • /rover/sv_in/reset: False
  • /rover/tmode3: 1
  • /rover/uart1/baudrate: 19200
  • /rover/uart1/in: 32
  • /rover/uart1/out: 0

NODES
/
rover (ublox_gps/ublox_gps)

ROS_MASTER_URI=http://localhost:11311

process[rover-1]: started with pid [5438]
[ INFO] [1526454535.202589825]: U-Blox: Opened serial port /dev/ttyACM0
[DEBUG] [1526454535.203817069]: Configuring UART1 baud rate: 19200, In/Out Protocol: 32 / 0
terminate called after throwing an instance of 'std::runtime_error'
what(): Could not configure serial baud rate
[rover-1] process has died [pid 5438, exit code -6, cmd /home/robot/catkin_ws/devel/lib/ublox_gps/ublox_gps __name:=rover __log:=/home/robot/.ros/log/bb634996-58d2-11e8-a299-b827eb0b48c0/rover-1.log].
log file: /home/robot/.ros/log/bb634996-58d2-11e8-a299-b827eb0b48c0/rover-1*.log

can't locate node [ublox_gps] in package [ublox_gps]

EDIT: I wasn't running it under a catkin_workspace. My bad.

Hey, when I try to launch the package, I get this error:

ERROR: cannot launch node of type [ublox_gps/ublox_gps]: can't locate node [ublox_gps] in package [ublox_gps]

Here is my launch file:

<?xml version="1.0" encoding="UTF-8"?>

<launch>
  <arg name="node_name" default="navilock_gpsnode"/>
  <arg name="param_file_name" doc="param file name" default="c94_m8p_base" />
  <arg name="output" default="screen" />
  <arg name="respawn" default="true" />
  <arg name="respawn_delay" default="30" />
  <arg name="clear_params" default="true" />

  <node pkg="ublox_gps" type="ublox_gps" name="$(arg node_name)"
        output="$(arg output)" 
        clear_params="$(arg clear_params)"
        respawn="$(arg respawn)" 
        respawn_delay="$(arg respawn_delay)">
    <rosparam command="load" 
              file="$(find ublox_gps)/config/$(arg param_file_name).yaml" />
  </node>
</launch>

And here is my config file (I know it's plain but Ive tried it with the premade ones, I dont think where the problem is, I havent even got to play with the config file as it has no effect atm)

# Navilock config

device: /dev/ttyACM0
frame_id: gps_base
dynamic_model: portable
nav_rate: 1
rate: 1

inf:
  all: true

publish:
  all: true

The device I have: https://www.navilock.de/produkte/G_61840/treiber.html
Basically rosmake goes well, compiles fine, but the launch won't ever work. And trying to use rosrun on the ublox_gps package won't even tab complete any node, like there weren't any.

Cannot enable/disable sbas on ublox M8P

Starting the node always fails with the message Error configuring device: Failed to disable SBAS. (or enabling it - neither works).

We have a Ublox M8P connected via USB. I've tried 9600 and 4800 baud rate.

ublox c94 m8p rover or base should be used in ublox_gps node?

Hello,

Can you please explain me which station should be launched with the node?
This question has been asked in the forum as well: link

So basically, i copy-paste my questions from the forum:

1: I was able to set up successfully the ublox rover and base stations using the official u-center windows application based on the quick setup guide.

Now i want to use ublox_gps node to have the relevant gps topics in ROS environment. Since the node provides configuration files for both the rover (c94_m8p_rover.yaml) and base (c94_m8p_base.yaml),

im confused which one should be launched? I assume both shall be connected via USB (otherwise no RTK of course), but which config yaml file should be launched in ROS?

2: Does the accuracy of the survey-in coordinate determination (done on the base station) influences the coordinate determination accuracy of the rover station relative from the base station? I assume yes and of course it sounds evident, but better to ask a pro :)

Thank you for the help. Regards.

PS:I did so far the following setup in u-center:

Base successfully finished the survery-in + UBX-CFG-PRT: Target 1-UART1, In none, Out 5-RTCM3, Baud 19200 + USBX-CFG-MSG: 1005, 1077, 1087, 1230 messages are assigned to UART1

Rover only needs to receive RTCM messages, therefore UBX-CFG-PRT: Target 1-UART1, In 5-RTCM3, Out none, Baud 19200

ADR support M8L

I have seen that this package offers ADR support but there are not much details about it. I am not able to configure M8L module to read it. Can we send speed data for ADR using this package to the Ublox module?

Error : U-blox: received NACK

Hello,

Thanks for the package I have been using it for quite some time with an EVK-7P.

I recently bought a EVK-M8U and I have been struggling with errors that makes this development kit unusable... Here is the print of the error when debug parameter is set at 1 :

process[ublox_m8u-2]: started with pid [6872]
[ INFO] [1582558977.916018067]: U-Blox: Opened serial port /dev/ttyACM0
[DEBUG] [1582558977.916223076]: Configuring UART1 baud rate: 115200, In/Out Protocol: 1 / 2
[DEBUG] [1582558977.920783874]: EXT CORE 3.01 (1ec93f), HW VER: 00080000
[DEBUG] [1582558977.920811168]: ROM BASE 2.01 (75331)
[DEBUG] [1582558977.920817646]: FWVER=UDR 1.21
[DEBUG] [1582558977.920822781]: PROTVER=19.20
[DEBUG] [1582558977.920831824]: MOD=NEO-M8U-0
[DEBUG] [1582558977.920840261]: FIS=0xEF4015 (84524)
[DEBUG] [1582558977.920849343]: GPS;GLO;GAL;BDS
[DEBUG] [1582558977.920858546]: SBAS;IMES;QZSS
[ INFO] [1582558977.920880726]: U-Blox Firmware Version: 8
[ WARN] [1582558977.942375333]: ROS Diagnostics specific to u-blox ADR/UDR devices is unimplemented. See AdrUdrProduct class in node.h & node.cpp.
[DEBUG] [1582558977.942403975]: Configuring measurement rate to 250 ms and nav rate to 4 cycles
[DEBUG] [1582558977.943039965]: Configuring SBAS: usage 1, max_sbas 0
[DEBUG] [1582558977.943742464]: Disabling PPP
[ERROR] [1582558977.944578522]: U-blox: received NACK: 0x06 / 0x23
[FATAL] [1582558977.944667048]: Error configuring u-blox: Failed to disable PPP.
[ERROR] [1582558977.945527244]: U-Blox ASIO input buffer read error: Operation canceled, 0
[ INFO] [1582558977.945586391]: Closed connection to /dev/ttyACM0.
[ublox_m8u-2] process has finished cleanly

I precise that this EVK M8U works fine on Windows's U-Center.

Before posting this issue I looked a bit at how to fix and here is also my dirty workaround.
Error displayed previously is triggered because of disabling PPP functionality. Disabling PPP is done by the method setPpp line 455 of src/node.cpp, I commented the full block (liens 455 to 458)..

Next error is :

process[ublox_m8u-2]: started with pid [12835]
[ INFO] [1582559130.450352861]: U-Blox: Opened serial port /dev/ttyACM0
[DEBUG] [1582559130.450729744]: Configuring UART1 baud rate: 115200, In/Out Protocol: 1 / 2
[DEBUG] [1582559130.454792017]: EXT CORE 3.01 (1ec93f), HW VER: 00080000
[DEBUG] [1582559130.454896389]: ROM BASE 2.01 (75331)
[DEBUG] [1582559130.455063274]: FWVER=UDR 1.21
[DEBUG] [1582559130.455147505]: PROTVER=19.20
[DEBUG] [1582559130.455202968]: MOD=NEO-M8U-0
[DEBUG] [1582559130.455287552]: FIS=0xEF4015 (84524)
[DEBUG] [1582559130.455352122]: GPS;GLO;GAL;BDS
[DEBUG] [1582559130.455407759]: SBAS;IMES;QZSS
[ INFO] [1582559130.455499582]: U-Blox Firmware Version: 8
[ WARN] [1582559130.561418116]: ROS Diagnostics specific to u-blox ADR/UDR devices is unimplemented. See AdrUdrProduct class in node.h & node.cpp.
[DEBUG] [1582559130.561513553]: Configuring measurement rate to 250 ms and nav rate to 4 cycles
[DEBUG] [1582559130.562403695]: Configuring SBAS: usage 1, max_sbas 0
[DEBUG] [1582559130.563217725]: Setting dynamic model to 0
[DEBUG] [1582559130.563945310]: Setting fix mode to 3
[DEBUG] [1582559130.564995635]: Setting DR Limit to 0
[DEBUG] [1582559130.567321972]: Read GNSS config.
[DEBUG] [1582559130.567396911]: Num. tracking channels in hardware: 28
[DEBUG] [1582559130.567439278]: Num. tracking channels to use: 28
[DEBUG] [1582559130.567596408]: Galileo GNSS Configuration is different
[DEBUG] [1582559130.567669093]: Re-configuring GNSS.
[ WARN] [1582559130.569029918]: GNSS re-configured, cold resetting device.
[ WARN] [1582559130.569126551]: Resetting u-blox. If device address changes, node must be relaunched.
[ERROR] [1582559131.570413209]: U-Blox ASIO input buffer read error: Operation canceled, 0
[ INFO] [1582559146.571430061]: U-Blox: Reset serial port /dev/ttyACM0
[DEBUG] [1582559146.573829678]: Enabling ADR/UDR
[ERROR] [1582559146.574597604]: U-blox: received NACK: 0x06 / 0x23
[FATAL] [1582559146.574938008]: Error configuring u-blox: Failed to enableuse_adr
[ERROR] [1582559146.576165756]: U-Blox ASIO input buffer read error: Operation canceled, 0
[ INFO] [1582559146.576379704]: Closed connection to /dev/ttyACM0.
[ublox_m8u-2] process has finished cleanly

This time the error is regarding some enable_use_adr. I commented the block, line 1290 to 1292 in src/node.cpp that contains the setUseAdr method responsable for my error.

And finally I managed to use the EVK M8U...

I obviously agree that this is totally a dirty fix but only a temporary workaround.
I would appreciate a cleaner fix in the future but at least this post might help a bit ;).
Or... an explanation if other people also have the EVK M8U that works without the need of all those fixes..

NavPVT timestamp invalid nanosecond data

Hi

When I am using ublox_gps with M8P module I get an incorrect timestamp at nsec field every at 5th frame (operating at 5Hz). Although this problem is not frequent and hence not reproducible yet when I looked closely at the bag file I realized that it is reporting something similar to GPS time from NavPVT message in the nsec field instead of nanosecond data. The length of it is also 10 digits instead of 9.

I believe that there is something wrong with the code because of which it uses PVT timestamps seldom. I also felt something odd here in node.h. Shouldn't it be AND instead of OR? Also, is there a check for the nano field data of NavPVT message to be bounded within the range?
I am not sure if this is a system issue or a diver issue. Hence I have also attached the bag fille for reference.
gps_anomaly.bag.zip

Thanks

launch application

suggest me
1, how to ran the application with parameters ?
2, what is the value to be passed for node_name
as per understanding roslaunch launch/ublox_device.launch node_name = ?

pls suggest

4072 RTCM message

Hi, I am working with three zed-f9p on a base+moving base with rover configuration. One requisite of this configuration is that the moving base sends the RTCM messages 4072.0 and 4072.1 to the rover. What are the rtcm message IDs associated to this messages (4072.0 and 4072.1) to enable them on the config file?

Thank you for you attention.

Possible to see GPS status?

I have a c94 development board and I am running ROS on the rover module using the config file provided by this repo.
gps/fix tell me just the latitude and longitude
I am guessing that gps/navstatus tell me something that could be useful for me but I cannot understand the meaning of the message:

iTOW: 60582000
gpsFix: 3
flags: 223
fixStat: 1
flags2: 8
ttff: 32534
msss: 512530

Can someone help me telling me what should I look for having a confirmation of fixed rtk gps signal? Which topic should I look to see if the GPS has a fixed signal?

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.