Repository with ROS tools for the u-blox RTK receiver.
source /opt/ros/noetic/setup.bash
export ROS_VERSION=`rosversion -d`
sudo apt install -y python3-catkin-tools \
ros-$ROS_VERSION-ublox \
ros-$ROS_VERSION-ntrip-client \
ros-$ROS_VERSION-nmea-msgs \
ros-$ROS_VERSION-mavros-msgs \
ros-$ROS_VERSION-rtcm-msgs
cd ~
mkdir -p catkin_ws/src
cd catkin_ws
catkin init
cd ~/catkin_ws/src
git clone [email protected]:ethz-asl/ublox_utils.git
catkin build
This section describes the hardware setup with one or two receivers on the rover. The following considerations should be taken into account:
- Optimal sky coverage of the antennas.
- Antennas far distanced from other electronics to avoid interference (especially LiDAR and USB 3.0 devices).
- Omnidirectional helical antennas preferable over patch antennas as they do not require ground plane and have a better attitude coverage (see ZED-FP9 Moving base applications, p.8).
- Multi-band antennas that support all receiver frequencies with well-defined phase center and small phase center variation (see for example HC882 Dual-Band Helical Antenna + L-Band).
- Known phase center position with respect to rover body frame (see r_BP and r_BM in Figure below).
- Rover antenna at least 20cm distanced from moving base antenna (see ZED-FP9 Moving base applications, p.7).
The NTRIP setup does not require a base station. Instead the corrections are provided by an NTRIP caster online. The wiring is shown in the Figure below. In case of a moving baseline setup, corrections from the moving base receiver (Receiver 1) will be sent to the rover (Receiver 2) via UART2.
This is the part list for the standard moving baseline setup above. The prices are regular retail prices. For some, e.g., NTRIP corrections or Tallysman antennas research discounts may apply.
No. | Pc. No. | Description | Source Object | Supplier | Supplier Number | Cost per Unit | Cost Total |
---|---|---|---|---|---|---|---|
1 | 2 | Sparkfun u-blox ZED-F9P GPS-RTK-SMA receiver | GPS-16481 | digikey | 1568-GPS-16481-ND | CHF 260.- | CHF 520.- |
2 | 2 | Tallysman HC882 dual-band helical antenna | 33-HC882-28 | digikey | 1526-33-HC882-28-ND | CHF 250.- | CHF 500.- |
3 | 1 | Swipos GIS/GEO NTRIP license | swipos GIS/GEO | swisstopo | swipos-GIS/GEO | CHF 2000.- p.a. | CHF 2000.- p.a. |
4 | 2 | USB-C connector cable (300mm) | CAB-15426 | digikey | 1568-CAB-15426-ND | CHF 4.- | CHF 8.- |
5 | 2 | Coaxial SMA to SMA (500mm) | 415-0031-MM500 | digikey | J10300-ND | CHF 16.- | CHF 32.- |
The latest tested firmware was 1.32 on ZED-F9P receiver. To update the firmware follow the sparkfun tutorial.
When using a dual receiver setup update the configuration of the moving base receiver and rover receiver.
The configuration is elaborated in ZED-FP9 Moving base applications, p.16.
To flash the configuration go to u-center and select View->Generation 9 Configuration View->Advanced Configuration->Load from file...->Send config changes
Note: If you are only using a single rover, the default config is fine.
To revert to the default config select View->Messages view->UBX->CFG->CFG->Revert to default configuration->Send
.
ublox.launch provides the launch file to start the u-blox receivers ROS interface.
The default startup with a single receiver is
roslaunch ublox_utils ublox.launch device_position_receiver:=/dev/ttyACM0
The relevant ROS topics are
/ublox_position_receiver/fix
/ublox_moving_baseline_receiver/fix_velocity
Additionally, you should monitor the fix status.
/ublox_position_receiver/navstatus
At first use, setup the firmware.
To startup two receivers where the second receiver estimates the moving baseline run
roslaunch ublox_utils ublox.launch device_position_receiver:=/dev/ttyACM0 use_moving_baseline:=true device_moving_baseline_receiver:=/dev/ttyACM1
The relevant ROS topic is
/ublox_moving_baseline_receiver/navheading
Additionally, you should monitor a valid fix flag as well as the distance between the antennas in
/ublox_moving_baseline_receiver/navrelposned
Note: You may want to find a smart way to allocate the device ID.
We use the swipos-GIS/GEO caster in conjunction with the ROS ntrip client. Our ublox2nmea node makes sure the caster receives the current VRS location. It receives the NavPVT from the u-blox receiver and outputs it as NMEA $GPGGA sentence.
roslaunch ublox_utils ublox.launch device_position_receiver:=/dev/ttyACM0 use_ntrip:=true ntrip_username:=YOUR_USER ntrip_password:=YOUR_PASSWORD
The rosgraph should look like this:
roslaunch ublox_utils ublox.launch device_position_receiver:=/dev/ttyACM0 use_moving_baseline:=true device_moving_baseline_receiver:=/dev/ttyACM1 use_ntrip:=true ntrip_username:=YOUR_USER ntrip_password:=YOUR_PASSWORD