This package provides ROS2 support for u-blox ZED F9P GPS receivers. Most of this driver has been written based off the original ROS(1) driver that can be found here. Changes made to support the latest firmware are listed below:
Features:
- Fast and robust
- Tested only for serial connections
- Can play back PCAP capture logs to test behavior
- Easy to add support for more log types
- Supports ASCII and binary-format logs
- Can synchronize
BESTPOS
,BESTVEL
, andPSRDOP2
logs together in order to produce gps_common/GPSFix messages - Can produce IMU data from receives with SPAN support
- Ubuntu 20.04 (Tested)
- Ubuntu 22.04 (Untested)
- ROS2 Foxy and ROS2 Galactic (Tested)
- ROS2 Humble (Untested)
- Colcon
- Firmware 9
mkdir -p ublox_ws/src
cd ublox_ws/src
git clone https://github.com/gokulp01/ros2-ublox-zedf9p.git
cd ..
colcon build
ros2 launch ublox_gps ublox_gps_node_zedf9p-launch.py
Note: Values are published on /fix
topic
Some common errors and how to fix them (this list will be updated as and when new issues are raised).
-
Could NOT find asio (missing: ASIO_INCLUDE_DIR)
: To fix it, install the asio package on your system.sudo apt-get install libasio-dev
Source and build again.
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. Seeublox_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. Seeublox_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. SeeCfgPRT
message for possible values.uart1/out
: UART1 out communication protocol. Defaults to UBX, NMEA & RTCM. SeeCfgPRT
message for possible values.frame_id
: ROS name prepended to frames produced by the node. Defaults togps
.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
: SeeCfgSBAS
message for details. Defaults to 0.dynamic_model
: Possible values below. Defaults toportable
. See u-blox documentation for further description.portable
stationary
pedestrian
automotive
sea
airborne1
: Airborne, max acceleration = 1Gairborne2
: Airborne, max acceleration = 2Gairborne4
: Airborne, max acceleration = 4Gwristwatch
fix_mode
: Type of fixes supported:2d
,3d
orboth
.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 / Flatteningdat/shift
: [X-axis, Y-axis, Z-axis] shift [m]dat/rot
: [X, Y, Z] rotation [s]dat/scale
: scale change [ppm]
use_adr
: Enable ADR/UDR. Defaults to true.nav_rate
should be set to 1 Hz.
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 iftmode3
is set to fixed.arp/position
: Antenna Reference Point position in [m] or [deg]. Required iftmode3
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 iftmode3
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. Requiredtmode3
is set to survey in.
dgnss_mode
: The Differential GNSS mode. Defaults to RTK FIXED. SeeCfgDGNSS
message for constants.
tim_tm2
: Enable this message for GPS time-stamps everytime an external interrupt signal is received.
- currently unimplemented. See
FtsProduct
class inublox_gps
packagenode.h
&node.cpp
files.
~fix
(sensor_msgs/NavSatFix)
Navigation Satellite fix.
~fix_velocity
(geometry_msgs/TwistWithCovarianceStamped)
Velocity in local ENU frame.
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-bloxINF
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 receivedINF-Debug
messages toROS_DEBUG
console.inf/error
: Whether to enable Error messages for the UBX and NMEA ports and print receivedINF-Error
messages toROS_ERROR
console.inf/notice
: Whether to enable Notice messages for the UBX and NMEA ports and print receivedINF-Notice messages to
ROS_INFO` console.inf/test
: Whether to enable Test messages for the UBX and NMEA ports and print receivedINF-Test
messages toROS_INFO
console.inf/warning
: Whether to enable Warning messages for the UBX and NMEA ports and print receivedINF-Warning
messages to theROS_WARN
console.
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.
publish/all
: This is the default value forpublish/<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.
publish/aid/all
: This is the default value for thepublish/aid/<message>
parameters below. It defaults topublish/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
publish/rxm/all
: This is the default value for thepublish/rxm/<message>
parameters below. It defaults topublish/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 eitherRxmRAW
orRxmRAWX
depending on firmware version.publish/rxm/rtcm
: Topic~rxmrtcm
. Firmware >= 8 onlypublish/rxm/sfrb
: Topic~rxmsfrb
. Type is eitherRxmSFRB
orRxmSFRBX
depending on firmware version.
publish/mon/all
: This is the default value for thepublish/mon/<message>
parameters below. It defaults topublish/all
. Individual messages can be enabled or disabled by setting the parameters below.publish/mon/hw
: Topic~monhw
publish/nav/all
: This is the default value for thepublish/mon/<message>
parameters below. It defaults topublish/all
. Individual messages can be enabled or disabled by setting the parameters below.publish/nav/att
: Topic~navatt
. ADR/UDR devices onlypublish/nav/clock
: Topic~navclock
publish/nav/posecef
: Topic~navposecef
publish/nav/posllh
: Topic~navposllh
. Firmware <= 6 only. For firmware 7 and above, see NavPVTpublish/nav/pvt
: Topic~navpvt
. Firmware >= 7 only.publish/nav/relposned
: Topic~navrelposned
. HPG Rover devices onlypublish/nav/heading
: Topic~navheading
. HP Position receiver devices only. For firmware 9 and abovepublish/nav/sat
: Topic~navsat
publish/nav/sol
: Topic~navsol
. Firmware <= 6 only. For firmware 7 and above, see NavPVTpublish/nav/status
: Topic~navstatus
publish/nav/svin
: Topic~navsvin
. HPG Reference Station Devices onlypublish/nav/svinfo
: Topic~navsvinfo
publish/nav/velned
: Topic~navvelned
. Firmware <= 6 only. For firmware 7 and above, see NavPVT
publish/esf/all
: This is the default value for thepublish/esf/<message>
parameters below. It defaults topublish/all
for ADR/UDR devices. Individual messages can be enabled or disabled by setting the parameters below.publish/esf/ins
: Topic~esfins
publish/esf/meas
: Topic~esfmeas
publish/esf/raw
: Topic~esfraw
publish/esf/status
: Topic~esfstatus
publish/hnr/pvt
: Topic~hnrpvt
. ADR/UDR devices only
publish/tim/tm2
: Topictimtm2
. TIM devices only
- 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).
- If the parameter is used during configuration also modify the
ComponentInterface
'sconfigureUblox()
method to send the appropriate configuration message. Do not send configuration messages ingetRosParams()
. - 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.
- Modify one of the sample
.yaml
configuration files inublox_gps/config
to include the parameter or add a new sample.yaml
for your device.
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.
Consult the official protocol spec for details on packets supported by u-blox devices.