Driver Runtime Operation
Run novatel_oem7_driver
The following sections illustrate how to launch and use the novatel_oem7_driver by Hexagon | NovAtel for use with your OEM7 type GNSS or SPAN sensor.
Launching via a TCP/UDP Connection
When connecting to your receiver over a network, you will need to make sure the OEM7 receiver’s IP address and intended ICOM port are correctly configured in the novatel_oem7_driver.
The protocol (TCP or UDP) and port numbers used can be configured by editing the file named oem7_net.launch.py. When using novatel_oem7_driver via binary package installation, the template for this file is located at the location:
/opt/ros/{$ROS_DISTRO}/share/novatel_oem7_driver/launch/oem7_net.launch.py
For example, Jazzy users would therefore find this template file at:
/opt/ros/jazzy/share/novatel_oem7_driver/launch/oem7_net.launch.py
Users may copy this template to a project directory, edit it and then run it with ros2 launch <the edited launch file>
.
To change the default TCP port that novatel_oem7_driver is configured to use, edit the default value of the oem7_port
argument in your copy of the oem7_net.launch.py
file.
Alternatively, users may launch by referring to the template launch file and then overriding parameters (like the IP address) as needed when calling ros2 launch
.
Operation over TCP/IP
Assumptions:
OEM7 Receiver is reachable over IP networking at 192.168.1.10
OEM7 Receiver’s internal ICOM ports are configured for access over TCP (default)
Important
Here is an example of launching the driver with a TCP connection:
ros2 launch novatel_oem7_driver oem7_net.launch.py oem7_ip_addr:=192.168.1.10
Suppose that you wanted to also override the default port specified in the oem7_net.launch.py
file to instead be 3005
, then you could run:
ros2 launch novatel_oem7_driver oem7_net.launch.py oem7_ip_addr:=192.168.1.10 oem7_port:=3005
As another example, let’s suppose you copied the template oem7_net.launch.py
file to /path/to/my_novatel_oem7_net.launch.py
.
You could then edit the contents of this file with whatever parameters you like and then launch it with ros2 launch
by running:
ros2 launch /path/to/my_novatel_oem7_net.launch.py
Operation over UDP/IP
Configure OEM7 ICOM Port(s) for UDP
OEM7 receivers default to TCP-based network communication (on hardware models with networking support). You can reconfigure your OEM7 receiver to have some or all internal ICOM ports instead accessible via UDP ports. For this, you will have to manually connect to your receiver and configure it with the ICOMCONFIG command, followed by the SAVECONFIG command.
For example, the internal port ICOM2
could be reconfigured to be
reachable on the receiver via UDP port number 3002
as follows:
ICOMCONFIG ICOM2 UDP ":3002"
SAVECONFIG
ICOM Communications documentation is also relevant and is available here.
Run novatel_oem7_driver with UDP profile
Assuming your receiver is reachable at UDP port 3002 at IP address 192.168.1.10, you can then connect novatel_oem7_driver with the ros2 launch
command.
Important
Here is an example of launching the driver with a UDP connection:
ros2 launch novatel_oem7_driver oem7_net.launch.py oem7_if:=Oem7ReceiverUdp oem7_ip_addr:=192.168.1.10 oem7_port:=3002
Operation over USB
The novatel_oem7_driver can be used to communicate with your OEM7 receiver directly over USB, directly over a serial port or a virtual serial port (connected via USB to your receiver). You must make sure your computer can reach the OEM7 receiver at the given port, or the novatel_oem7_driver won’t be able to connect.
Newer Linux Kernels will show your OEM7 receiver when connected over USB (visible via the ‘lsusb’ command).
Note
On Ubuntu Linux systems, for a user account to use a serial device, the account must be a member of the ‘dialout’ user group.
If you do not see your NovAtel receiver listed by ‘lsusb’ when USB connected and powered-on, then you must configure your Linux system to attach the USB device to the ‘usbserial’ kernel module.
When your receiver is connected via USB and properly configured the receiver will enumerate under /dev/ttyUSB*, such as /dev/ttyUSB0.
Important
novatel_oem7_driver could be launched via USB with:
ros2 launch novatel_oem7_driver oem7_port.launch.py oem7_port_name:=/dev/ttyUSB0
Note that OEM7 receivers connected via USB do not need the baud rate set.
Operation over Serial
The novatel_oem7_driver can be used to communicate with your OEM7 receiver directly over a serial port. Ensure your computer can reach the OEM7 receiver at the given port, or the novatel_oem7_driver won’t be able to connect.
Note that on Ubuntu Linux systems, for a user account to use a serial device, the account must be a member of the ‘dialout’ user group.
For serial connections, a baud rate must be set. The default is 9600 to align with the receiver’s default. It is strongly recommended to use a higher baud rate to avoid messages being dropped or delayed.
In novatel_oem7_driver you can optionally set the baud rate such as to
115200, using the argument oem7_port_baud:=115200
Important
The novatel_oem7_driver can be launched over a serial connection with:
ros2 launch novatel_oem7_driver oem7_port.launch.py oem7_port_name:=/dev/ttyS1 oem7_port_baud:=115200
Note
This baud rate must correspond to your receiver’s internal COM port configuration. To manually change the connection parameters of a COM port within your OEM7 receiver, please refer to the Serial Port Communications documentation in the OEM7 Documentation Portal here.
Runtime Reconfiguration
The driver implements ROS Service /novatel/oem7/Oem7Cmd novatel_oem7_msgs/srv/Oem7AbasciiCmd.
This service allows the user to send OEM7 Abbreviated ASCII commands from the terminal to the receiver using the ros2 service
tool.
Oem7Cmd syntax
ros2 service call /novatel/oem7/Oem7Cmd novatel_oem7_msgs/srv/Oem7AbasciiCmd "{cmd: '$oem7_abbreviated_ascii_command'}""
Oem7Cmd example
ros2 service call /novatel/oem7/Oem7Cmd novatel_oem7_msgs/srv/Oem7AbasciiCmd "{cmd: 'EXTERNALPVAS 0.0 0.0 0.0 0.4502 10.54 -0.09598 0.0 0.0 0.0 0.0 0.0 0.0 0.01 0.01 0.01 0.0 0.0 0.0 4000 10'}"
requester: making request: novatel_oem7_msgs.srv.Oem7AbasciiCmd_Request(cmd='EXTERNALPVAS 0.0 0.0 0.0 0.4502 10.54 -0.09598 0.0 0.0 0.0 0.0 0.0 0.0 0.01 0.01 0.01 0.0 0.0 0.0 4000 10')
response:
novatel_oem7_msgs.srv.Oem7AbasciiCmd_Response(rsp='OK')
The above command of example of EXTERNALPVAS provides the SPAN engine an external update that would be derived from an external sensor:
Note that the OEM7 response is printed out verbatim.
This is to notify the user if the command was accepted or if there was an error.
All standard OEM7 abbreviated ASCII commands are supported.
The commands are executed as-is, the syntax is not modified.
Oem7Cmd
does not support binary or ASCII command input.
Recording data to a ROS bag
Configuring OEM7 Logs in ROS bag
The novatel_oem7_driver requests NovAtel OEM7 logs as part of normal operation.
Logs specified in the std_oem7_raw_msgs.yaml
file are recorded in ROS under the /novatel/oem7/oem7raw
topic.
Record a ROS bag
The novatel_oem7_driver does not automatically record the ROS bag.
The user must choose to record the bag as required for the application.
This can be done using the ros2 bag
command-line tool and the record
command.
Recording the bag is required if NovAtel OEM7 logs are needed for troubleshooting or post-processing. It is highly recommended to collect oem7raw.
For instance, to record all topics with ros2 bag
, for later use and processing, run:
ros2 bag record -a
ROS bags containing the /novatel/oem7/oem7raw
topic can then have their data extracted and concatenated to then be loaded into NovAtel Application Suite to convert the data into ASCII, KML, or RINEX formats.
Extracted logs can also be loaded into Inertial Explorer for post-processing.
Viewing live ROS topic data
You may wish to observe data published in a ROS topic at runtime. You can use the ros2 topic
command for this.
To see available topics, you can run:
ros2 topic list
Here are some typical novatel_oem7_topics this command returns when you have the novatel_oem7_driver installed:
/novatel/oem7/bestgnsspos
/novatel/oem7/bestgnssvel
/novatel/oem7/bestpos
/novatel/oem7/bestutm
/novatel/oem7/bestvel
/novatel/oem7/corrimu
/novatel/oem7/fix
/novatel/oem7/gps
/novatel/oem7/heading2
/novatel/oem7/imu/data
/novatel/oem7/imu/data_raw
/novatel/oem7/insconfig
/novatel/oem7/inspva
/novatel/oem7/inspvax
/novatel/oem7/insstdev
/novatel/oem7/odom
/novatel/oem7/odom_origin
/novatel/oem7/oem7raw
/novatel/oem7/ppppos
/novatel/oem7/rxstatus
/novatel/oem7/terrastarinfo
/novatel/oem7/terrastarstatus
/novatel/oem7/time
Suppose you wanted to then observe BESTPOS topic output, you could run the command:
ros2 topic echo /novatel/oem7/bestpos