The following is a list of ROSaic parameters found in the config/rover.yaml file.
-
Parameters Configuring Communication Ports and Processing of GNSS and INS Data
device: location of device connectionserial:xxxformat for serial connections, where xxx is the device node, e.g.serial:/dev/ttyUSB0file_name:path/to/file.sbfformat for publishing from an SBF logfile_name:path/to/file.pcapformat for publishing from PCAP capture.- Regarding the file path, ROS_HOME=`pwd` in front of
roslaunch septentrio...might be useful to specify that the node should be started using the executable's directory as its working-directory.
- Regarding the file path, ROS_HOME=`pwd` in front of
tcp://host:portformat for TCP/IP connections28784should be used as the default (command) port for TCP/IP connections. If another port is specified, the receiver needs to be (re-)configured via the Web Interface before ROSaic can be used.
- default: empty
serial: specifications for serial communicationserial/baudrate: serial baud rate to be used in a serial connectionserial/rx_serial_port: determines to which (virtual) serial port of the Rx we want to get connected to, e.g. USB1 or COM1hw_flow_control: specifies whether the serial (the Rx's COM ports, not USB1 or USB2) connection to the Rx should have UART HW flow control enabled or notoffto disable UART HW flow control,RTS|CTSto enable it
- default:
115200,USB1,off
receiver_type: This parameter is to select the type of Septentrio receiverGNSS: If thereceiver_type: GNSSthen ROS can only output data related to GNSS receivers.INS: If thereceiver_type: INSthen ROS can only output data related to INS receivers.
frame_id: name of the ROS tf frame for the Rx, placed in the header of all published messages- In ROS, the tf package lets you keep track of multiple coordinate frames over time. The frame ID will be resolved by
tf_prefixif defined. If a ROS message has a header (all of those we publish do), the frame ID can be found viarostopic echo /topic, where/topicis the topic into which the message is being published. - default:
gnss
- In ROS, the tf package lets you keep track of multiple coordinate frames over time. The frame ID will be resolved by
datum: datum that (ellipsoidal) height should be referenced to in all published ROS messages- Since the standardized GGA message does only provide the orthometric height (= MSL height = distance from Earth's surface to geoid) and the geoid undulation (distance from geoid to ellipsoid) for which non-WGS84 datums cannot be specified, it does not affect the GGA message.
- default:
ETRS89
marker_to_arp: offsets of the antenna reference point (ARP) with respect to the marker- The parameters
delta_e,delta_nanddelta_uare the offsets in the East, North and Up (ENU) directions respectively, expressed in meters. - All absolute positions reported by the receiver are marker positions, obtained by subtracting this offset from the ARP. The purpose is to take into account the fact that the antenna may not be located directly on the surveying point of interest.
- default:
0.0,0.0and0.0
- The parameters
ant_type: type of your antenna- For best positional accuracy, it is recommended to select a type from the list returned by the command
lstAntennaInfo, Overview. This is the list of antennas for which the receiver can compensate for phase center variation. - By default and if
ant_typedoes not match any entry in the list returned bylstAntennaInfo, Overview, the receiver will assume that the phase center variation is zero at all elevations and frequency bands, and the position will not be as accurate. - default:
Unknown
- For best positional accuracy, it is recommended to select a type from the list returned by the command
ant_serial_nr: serial number of your antennaleap_seconds: number of leap seconds that have been inserted up until the point of ROSaic usage- At the time of writing the code (2020), the GPS time, which is unaffected by leap seconds, was ahead of UTC time by 18 leap seconds. Adapt the leap_seconds parameter accordingly as soon as the next leap second is inserted into the UTC time or in case you are using ROSaic for the purpose of simulations. In the latter case, in addition please set the parameter
use_GNSS_timeto true and uncomment a paragraph in theUTCtoUnix()function definition found in the fileseptentrio_gnss_driver/src/septentrio_gnss_driver/parsers/parsing_utilities.cppand enter the year, month and date to be simulated.
- At the time of writing the code (2020), the GPS time, which is unaffected by leap seconds, was ahead of UTC time by 18 leap seconds. Adapt the leap_seconds parameter accordingly as soon as the next leap second is inserted into the UTC time or in case you are using ROSaic for the purpose of simulations. In the latter case, in addition please set the parameter
polling_period/pvt: desired period in milliseconds between the polling of two consecutivePVTGeodetic,PosCovGeodetic,PVTCartesianandPosCovCartesianblocks and - if published - between the publishing of two of the corresponding ROS messages (e.g.septentrio_gnss_driver/PVTGeodetic.msg)- Clearly, the publishing of composite ROS messages such as
sensor_msgs/NavSatFix.msgorgps_common/GPSFix.msgis triggered by the SBF block that arrives last among the blocks of the current epoch. - default:
500(2 Hz)
- Clearly, the publishing of composite ROS messages such as
polling_period/rest: desired period in milliseconds between the polling of all other SBF blocks and NMEA sentences not addressed by the previous parameter, and - if published - between the publishing of all other ROS messages- default:
500(2 Hz)
- default:
reconnect_delay_s: delay in seconds between reconnection attempts to the connection specified in the parameterdevice- default:
2
- default:
use_GNSS_time:trueif the ROS message headers' unix epoch time field shall be constructed from the TOW (in the SBF case) and UTC (in the NMEA case) data,falseif those times shall be constructed by the driver via the time(NULL) function found in thectimelibrary- default:
true
- default:
ntrip_settings: determines NTRIP connection parameters- The two implemented use cases are
- a) The Rx has internet access, set
rx_has_internetto true, and - b) The Rx has no internet access, set
rx_has_internetto false, butData Linkfrom Septentrio's RxTools is installed on the computer.
- a) The Rx has internet access, set
- The first nested ROS parameter,
ntrip_settings/mode, specifies the type of the NTRIP connection and must be one ofClient,Client-Sapcordaoroff. InClientmode, the receiver receives data from the NTRIP caster. When selecting theClient-Sapcordamode, the receiver receives data from the Sapcorda NTRIP service and no further settings are required, i.e. all other nested parameters are ignored. Note that the latter mode only works in Europe and North America. Set mode tooffto disable all correction services. - Next,
ntrip_settings/casteris the hostname or IP address of the NTRIP caster to connect to. To send data to the built-in NTRIP caster, use "localhost" for this parameter. - Note that
ntrip_settings/port,ntrip_settings/username,ntrip_settings/passwordandntrip_settings/mountpointare the IP port number, the user name, the password and the mount point, respectively, to be used when connecting to the NTRIP caster. The receiver encrypts the password so that it cannot be read back with the command "getNtripSettings". Thentrip_settings/versionargument specifies which version of the NTRIP protocol to use (v1orv2). - Further,
send_ggaspecifies whether or not to send NMEA GGA messages to the NTRIP caster, and at which rate. It must be one ofauto,off,sec1,sec5,sec10orsec60. Inautomode, the receiver automatically sends GGA messages if requested by the caster. - The boolean parameter
rx_has_internetspecifies whether the Rx has internet access or not. Note that an Ethernet cable is the only way to enable internet access on mosaic receivers (and most others) at the moment. In case internet is available, NTRIP will be configured with a simple commandsnts, ...that ROSaic sends to the receiver. - The parameter
rtcm_versionspecifies the type of RTCM data transmitted to ROSaic by the NTRIP caster, eitherRTCMv2orRTCMv3. It depends on the mountpoint. - In case the connection to the receiver is via TCP,
rx_input_corrections_tcpspecifies the port number of the IP server (IPS1) connection that ROSaic establishes on the receiver. Note that ROSaic will send GGA messages on this connection, such that in theData Linkapplication ofRxToolsone just needs to set up a TCP client to the host name as found in the ROSaic parameterdevicewith the port as found inrx_input_corrections_tcp. If the latter connection were connection 1 onData Link, then connection 2 would set up an NTRIP client connecting to the NTRIP caster as specified in the above parameters in order to forward the corrections from connection 2 to connection 1. - Finally, in case we are facing a serial connection (COM or USB), the parameter
rx_input_corrections_serialanalogously determines the port on which corrections could be serially forwarded to the Rx viaData Link. - default:
off, empty, empty, empty, empty, empty,v2,auto,false,RTCMv2,6666,USB2
- The two implemented use cases are
-
Inertial Navigation System (INS) is a device which measures rotation and acceleration and uses this information from Inertial Measurement Unit (IMU) to calculate its position relative to the starting point and provides continuous positioning even during short GNSS outages.
-
The IMU is typically made up of a 3-axis accelerometer, a 3-axiss gyroscope and sometimes a 3-axis magnetometer and measures the system's angular rate and acceleration. The computational unit used to determine the attitude, position, and velocity of the system based on the raw measurements from the IMU given an initial starting position and attitude.
Measure and Compensate for Antenna Lever arm
-
The antenna lever-arm is the relative position between the IMU reference point and the GNSS Antenna Reference Point (ARP), measured in the vehicle frame.
-
In case of AsteRx SBi3, the IMU reference point is clearly marked on the top panel of the receiver. It is important to compensate for the effect of the lever arm, otherwise the receiver may not be able to calculate an accurate INS position.
-
The IMU/antenna position can be changed by specifying the lever arm
x,yandzin theconfig.yamlfile under theins_ant_lever_armparameter
Compensate for IMU/Receiver Orientations
- It is important to take into consideration the mounting direction of the receiver, therefore the IMU, in the body frame of the vehicle. For e.g. when the receiver is installed horizontally with the front panel facing the direction of travel, it will be necessary to compensate for the IMU’s orientation to make sure the IMU reference frame is aligned with the vehicle reference frame.
- The IMU’s orientation can be changed by specifying the orientation angles
theta_x,theta_yandtheta_zin theconfig.yamlfile under theimu_orientation/angles - The below image illustrates the orientation of the IMU reference frame with the associated IMU orientation for the depicted installation
-
-
These Steps should be followed to configure the receiver in INS integration mode:
- Specify the
receiver_type:INS - Specify the orientation of the IMU sensor with respect to your vehicle, using the
imu_orientationparameter - Specify the antenna lever arm in the vehicle reference frame. This is the vector starting from the IMU reference point to the ARP of the main GNSS antenna This can be done by
ins_ant_lever_armparameter - If the point of interest is not the IMU, the vector between the IMU and the point of interest can be provided with the
ins_point_of_interestparameter - Make sure that the INS/GNSS integration filter is enabled :
ins_output_type
- Specify the
ROSaic INS parameters
-
The following is a list of ROSaic INS parameters found in the
config/rover.yamlfile. -
Tested with the AsteRx-SBi3 Pro receiver
attitude_offset
attitude_offset: Angular offset between two antenna (Main and Aux) and vehicle headingheading:The perpendicular axis can be compensated for by adjusting theheadingparameterpitch: Vertical offset can be compensated for by adjusting thepitchparameter
imu_orientation
imu_orientation: IMU sensor orientation- If orientation is set to
sensor_defaultto true, the receiver assumes that the IMU is attached to the vehicle in the nominal orientation, i.e. horizontally, upside up and with theX axismarked on the receiver pointing to the front of the vehicle. In this case the value oftheta_x,theta_yandtheta_zunderanglesparam should be equal to zero - If orientation is set to
manual: true, the receiver will use parameterstheta_x,theta_yandtheta_zunderanglesparam to determine the sensor orientation with respect to the vehicle frame. Positive angles correspond to a right-handed (clockwise) rotation of the IMU with respect to its nominal orientation. The order of the rotations is as follows:theta_zfirst, thentheta_y, thentheta_x. (The value should be in degrees)
- If orientation is set to
ins_poi_of_interest
-
ins_point_of_interest: The lever arm from the IMU reference point to a user-defined point of interest in the vehicle- The parameters
poi_x,poi_yandpoi_zrefers to the vehicle reference frame (The value should be in meter) - The reference point of the navigation output in the insnavcart and insnavgeod of ROS /topic is either the main GNSS antenna, or POI. By default, POI is colocated with the IMU reference point (lever arm is zero by default)
- The parameters
ins_ant_lever_arm
ins_ant_lever_arm: The lever arm from the IMU reference point to the main GNSS antenna- The parameters
x,yandzrefers to the vehicle reference frame (The value should be in meter)
- The parameters
ins_vel_sensor_lever_arm
ins_vel_sensor_lever_arm: The lever arm from the IMU reference point to the velocity sensor- The parameters
vsm_x,vsm_yandvsm_zrefers to the vehicle reference frame (The value should be in meter)
ins_initial_heading
ins_initial_heading: This parameter enables the use of last computed headings when unit is power cycledauto: This mode will store the vehicle heading,whenever the vehicle is in staticstored: This mode is used to store the last heading alignment when the vehicle stopped before switching of the receiver.
ins_std_dev_mask
ins_std_dev_mask: This parameter represent the maximum accepted accuracy. By providing the parameter value will let the receiver compansate for the offset before calculating the attitude by sbstracting them from the measured attitude angles. If standard deviation exceed then INS position and INS attitude won't be available in the output.att_std_dev: This parameter configures an output limit on standard deviation of the attitude angles (max accuracy accepted: 5 degree)pos_std_dev: This parameter configures an output limit on standard deviation of the position (max accuracy range between -100m to 100m)
ins_output_type
ins_output_type: The INS navigation filteroutput_location: This parameter either refer to the main GNSS antenna ARP or to a user-defined point of interest (POI) on the vehicle. The user can either use lever arms from the IMU to main antenna asoutput_location: MainAntor to user defined point of interest asoutput_location: POI1- The
ins_output_typeparameter enables or disables the computation of INS attitude or velocity and the associated standard deviations, and publish the following INS related data. For e.g. ifpos_std_dev: falsethen the value of position standard deviation block in the topic /insnavcart and /insnavgeod will be NaN and even these parameters will affect the ROS standard messages, so make sure to set all these param to true. - pos_std_dev: true
- att: true
- att_std_dev: true
- vel: true
- vel_std_dev: true
-
For further more information about receiver and their parameters, visit
ins_user_manualreference_guide
publish/gpgga:trueto publishseptentrio_gnss_driver/GPGGA.msgmessages into the topic/gpggapublish/gprmc:trueto publishseptentrio_gnss_driver/GPRMC.msgmessages into the topic/gprmcpublish/gpgsa:trueto publishseptentrio_gnss_driver/GPGSA.msgmessages into the topic/gpgsapublish/gpgsv:trueto publishseptentrio_gnss_driver/GPGSV.msgmessages into the topic/gpgsvpublish/pvtcartesian:trueto publishseptentrio_gnss_driver/PVTCartesian.msgmessages into the topic/pvtcartesianpublish/pvtgeodetic:trueto publishseptentrio_gnss_driver/PVTGeodetic.msgmessages into the topic/pvtgeodeticpublish/poscovcartesian:trueto publishseptentrio_gnss_driver/PosCovCartesian.msgmessages into the topic/poscovcartesianpublish/poscovgeodetic:trueto publishseptentrio_gnss_driver/PosCovGeodetic.msgmessages into the topic/poscovgeodeticpublish/atteuler:trueto publishseptentrio_gnss_driver/AttEuler.msgmessages into the topic/atteulerpublish/attcoveuler:trueto publishseptentrio_gnss_driver/AttCovEuler.msgmessages into the topic/attcoveulerpublish/gpst:trueto publishsensor_msgs/TimeReference.msgmessages into the topic/gpstpublish/navsatfix:trueto publishsensor_msgs/NavSatFix.msgmessages into the topic/navsatfixpublish/gpsfix:trueto publishgps_common/GPSFix.msgmessages into the topic/gpsfixpublish/pose:trueto publishgeometry_msgs/PoseWithCovarianceStamped.msgmessages into the topic/posepublish/diagnostics:trueto publishdiagnostic_msgs/DiagnosticArray.msgmessages into the topic/diagnosticspublish/insnavcart:trueto publishseptentrio_gnss_driver/INSNavCart.msgmessage into the topic/insnavcartpublish/insnavgeod:trueto publishseptentrio_gnss_driver/INSNavGeod.msgmessage into the topic/insnavgeodpublish/extsensormeas:trueto publishseptentrio_gnss_driver/ExtSensorMeas.msgmessage into the topic/extsensormeaspublish/imusetup:trueto publishseptentrio_gnss_driver/IMUSetup.msgmessage into the topic/imusetuppublish/velsensorsetup:trueto publishseptentrio_gnss_driver/VelSensorSetup.msgsmessage into the topic/velsensorsetuppublish/exteventinsnavcart:trueto publishseptentrio_gnss_driver/ExtEventINSNavCart.msgsmessage into the topic/exteventinsnavcartpublish/exteventinsnavgeod:trueto publishseptentrio_gnss_driver/ExtEventINSNavGeod.msgsmessage into the topic/exteventinsnavgeod
A selection of NMEA sentences, the majority being standardized sentences, and proprietary SBF blocks is translated into ROS messages, partly generic and partly custom, and can be published at the discretion of the user into the following ROS topics. All published ROS messages, even custom ones, start with a ROS generic header std_msgs/Header.msg, which includes the receiver time stamp as well as the frame ID, the latter being specified in the ROS parameter frame_id.
/gpgga: publishes custom ROS messageseptentrio_gnss_driver/Gpgga.msg- equivalent tonmea_msgs/Gpgga.msg- converted from the NMEA sentence GGA/gprmc: publishes custom ROS messageseptentrio_gnss_driver/Gprmc.msg- equivalent tonmea_msgs/Gprmc.msg- converted from the NMEA sentence RMC/gpgsa: publishes custom ROS messageseptentrio_gnss_driver/Gpgsa.msg- equivalent tonmea_msgs/Gpgsa.msg- converted from the NMEA sentence GSA/gpgsv: publishes custom ROS messageseptentrio_gnss_driver/Gpgsv.msg- equivalent tonmea_msgs/Gpgsv.msg- converted from the NMEA sentence GSV/pvtcartesian: publishes custom ROS messageseptentrio_gnss_driver/PVTCartesian.msg, corresponding to the SBF blockPVTCartesian/pvtgeodetic: publishes custom ROS messageseptentrio_gnss_driver/PVTGeodetic.msg, corresponding to the SBF blockPVTGeodetic/poscovcartesian: publishes custom ROS messageseptentrio_gnss_driver/PosCovCartesian.msg, corresponding to SBF blockPosCovCartesian/poscovgeodetic: publishes custom ROS messageseptentrio_gnss_driver/PosCovGeodetic.msg, corresponding to SBF blockPosCovGeodetic/atteuler: publishes custom ROS messageseptentrio_gnss_driver/AttEuler.msg, corresponding to SBF blockAttEuler/attcoveuler: publishes custom ROS messageseptentrio_gnss_driver/AttCovEuler.msg, corresponding to the SBF blockAttCovEuler/gpst(for GPS Time): publishes generic ROS messagesensor_msgs/TimeReference.msg, converted from thePVTGeodeticblock's GPS time information, stored in its header, or - ifuse_gnss_timeis set tofalse- from the systems's wall-clock time/navsatfix: publishes generic ROS messagesensor_msgs/NavSatFix.msg, converted from the SBF blocksPVTGeodetic,PosCovGeodeticandINSNavGeod- The ROS message
sensor_msgs/NavSatFix.msgcan be fed directly into thenavsat_transform_nodeof the ROS navigation stack.
- The ROS message
/gpsfix: publishes generic ROS messagegps_common/GPSFix.msg, which is much more detailed thansensor_msgs/NavSatFix.msg, converted from the SBF blocksPVTGeodetic,PosCovGeodetic,ChannelStatus,MeasEpoch,AttEuler,AttCovEuler,VelCovGeodetic,INSNavGeodandDOP/pose: publishes generic ROS messagegeometry_msgs/PoseWithCovarianceStamped.msg, converted from the SBF blocksPVTGeodetic,PosCovGeodetic,AttEuler,AttCovEulerandINSNavGeod/insnavcart: publish custom ROS messageseptentrio_gnss_driver/INSNavCart.msg, corresponding to SBF blockINSNavCart/insnavgeod: publish custom ROS messageseptentrio_gnss_driver/INSNavGeod.msg, corresponding to SBF blockINSNavGeod/extsensormeas: publish custom ROS messageseptentrio_gnss_driver/ExtSensorMeas.msg, corresponding to SBF blockExtSensorMeas/imusetup: publish custom ROS messageseptentrio_gnss_driver/IMUSetup.msg, corresponding to SBF blockIMUSetup/velsensorsetup: publish custom ROS messageseptentrio_gnss_driver/VelSensorSetup.msgcorresponding to SBF blockVelSensorSetup/exteventinsnavcart: publish custom ROS messageseptentrio_gnss_driver/ExtEventINSNavCart.msg, corresponding to SBF blockExtEventINSNavCart/exteventinsnavgeod: publish custom ROS messageseptentrio_gnss_driver/ExtEventINSNavGeod.msg, corresponding to SBF blockExtEventINSNavGeod- Note that GNSS provides absolute positioning, while robots are often localized within a local level frame. The pose field of this ROS message contains position with respect to the absolute ENU frame (longitude, latitude, height), while the orientation is with respect to a vehicle-fixed (e.g. for mosaic-x5 in moving base mode via the command
setAntennaLocation, ...) !local! NED frame. Thus the orientation is !not! given with respect to the same frame as the position is given in. The cross-covariances are hence set to 0. - In ROS, all state estimation nodes in the
robot_localizationpackage can accept the ROS messagegeometry_msgs/PoseWithCovarianceStamped.msg.
- Note that GNSS provides absolute positioning, while robots are often localized within a local level frame. The pose field of this ROS message contains position with respect to the absolute ENU frame (longitude, latitude, height), while the orientation is with respect to a vehicle-fixed (e.g. for mosaic-x5 in moving base mode via the command
/diagnostics: accepts generic ROS messagediagnostic_msgs/DiagnosticArray.msg, converted from the SBF blocksQualityInd,ReceiverStatusandReceiverSetup

