Exwayz SLAM Fusion algorithm performs online fusion between an input Odometry and GNSS inputs.

Default YAML

Below is the example slam_fusion.yaml configuration file with all parameters open to the user. The comments are the main documentation of each parameters.

slam_fusion:
    # [required] Input GNSS settings
    gnss:
		    use_timestamp_sw: false
        # [optional, default=0.5(m)] Max tolerated std err on the input GNSS 
        # measure to input them to solver
        max_std_err: 0.05
        # [optional] Destination projection CRS. If not set, UTM projection 
        # will be performed
        dst_crs: EPSG:32631
        # [required] GNSS input settings
        inputs:
              # [required] topic name
            - topic: navsatfix_topic_0
              # [optional, default=100] Subscribe queue size
              queue_size: 100
              # [optional, default=[0.0, 0.0, 0.0] (m)] position of the antenna 
              # in the LiDAR frame
              lever_arm: [0.0, 0.0, 0.0]
              # [optional, default=0.0(s)] time offset of the GNSS compared to 
              # the LiDAR clock
              time_offset: 37.0
            - topic_name: navsatfix_topic_1
              lever_arm: [0.0, 0.0, 0.0]
              time_offset: 37.0

    # [optional] Rotation estimation from GNSS inputs
    angles_from_gnss:
        # [optional, default=false] Enable heading estimation using solely 
        # the GNSS measures
        enable: true
        # [required] Angle estimation mode.
        # 0: from a single antenna (heading is guessed after 
        # d_heading_estimation was traveled
        # 1: from two antennas. /!\\ the order of the antennas matter, we assume
        #    that antenna 0 is the left antenna and antenna 1 is the right.
        mode: 1
        # [optional, default=0.1(m)] Minimum distance between GNSS measurements
	      # to guess the heading
        d_heading_estimation: 0.1
        # [optional, default=None] Calibration of the GNSS estimated angles in 
        # the RF in the LiDAR frame
        calib:
            euler: [0.0, 0.0, 90.0]

    # [required] Solver settings
    solver:
        # [optional, default=5.0(m)] Standard error given to the GNSS 
        # measurements
        std_err_gnss : 0.2
        # [optional, default=30(deg)] Standard error given to the angular
        # measurements
        std_err_angle: 10.0

        # [optional, default=500(m)] Distance from current position beyond 
        # which measurements are discarded
        d_prune: 100.0
        # [optional, default=0.500(s)] Maximum time difference between 
        # successive odometries. If a time difference greater than the threshold
        # is detected, the measurement is ignored by the solver.
        max_dt_odometry: 0.300
        # [optional, default=0.500(s)] Maximum time difference between GNSS 
        # measurements used for interpolation. If the current measurement is 
        # being interpolated by two measurements with a time difference greater 
        # than the threshold, it is ignored
        max_dt_gnss_interpolation: 0.500

        # [optional, default=50] Maximum number of iterations of the solver
        num_iter: 10

    # [optional] Output settings
    output:
        # [optional, default = [0.0, 0.0, 0.0](m)] Output offset, retrieved 
        # from global output pose
        offset: [0.0, 0.0, 0.0]

        # [optional] Calibration applied to the output pose
        calib:
            # [optional, default=[0.0, 0.0, 0.0](m)] Translation
            translation: [0.0, 0.0, 0.0]
            # [optional, default=[0.0, 0.0, 0.0](rad)] Euler angles [Rx, Ry, Rz]
            # (roll, pitch yaw)
            euler: [0.0, 0.0, 0.0]
            # [optional, default=false] Interprete the angles in degrees
            angles_degrees: true

    # [required] (ros only) ROS parameters
    ros:
        # [optional, default=/exwayz/slam_fusion] Output namespace, prepends
        # all outputs.
        namespace: /exwayz/slam_fusion

        # [required] Input Odometry topic
        input_odometry:
            # [required] Topic name
            topic: <topic-name>
            # [optional, default=100] Subscribe queue size
            queue_size: 100

        # [optional, default=true] Enable / disable publishing of debug topics 
        # (gnss_positions and abs_directions)
        publish_debug_topics: true

        # [optional] Output Odometry settings
        output_odometry:
            # [optional, default=/odometry] Output topic
            topic: /odometry
            # [optional, default=xyz_map] Odometry message header.frame_id
            parent_frame_id: xyz_map
            # [optional, default=""] Odometry message child_frame_id. If empty,
            # input PointCloud2 frame id is used
            child_frame_id: slam
            # [optional, default=false] Optionally inverts output pose and 
            # frame_ids
            invert: false
            # [optional, default=false] Publish parent->child TF using the 
            # output Odometry
            publish_tf: true
        
        # [optional] Output SlamFusionStatus settings
        output_status:
            # [optional, default=/status]
            topic: /status

        # [optional] Output projected GNSS position settings
        output_gnss_positions:
            # [optional, default=/gnss_positions]
            topic: /gnss_positions

        # [optional] Output absolute direction settings
        output_abs_directions:
            # [optional, default=/absolute_directions]
            topic: /absolute_directions

Explanation

gnss

angles_from_gnss

solver

output

API-specific I/O parameters

ros