Query on sl::Pose Validity and GeoPose ENU Zeros

Background:global localization

I’m encountering an issue with the pose data. Specifically:

  • The sl::Pose returned by fusion.getPosition() shows Valid as false and Confidence at 0/100.
  • Concurrently, the GeoPose object has valid LatLng and heading, but its ENU Translation and ENU Orientation values are all zeros.

Could you confirm if this data state is correct or indicative of a problem?

Hi @Lyra
If the pose is not valid, then the full information is not valid.

Is the system calibration procedure completed?
Please read more here.

Hi,

I’m setting up my GNSS calibration parameters as follows:

    sl::GNSSCalibrationParameters gnss_calibration_params{};
    sl::float3 gnss_antenna_position{0.5, -3, -0.5};
    gnss_calibration_params.gnss_antenna_position = gnss_antenna_position;
    gnss_calibration_params.enable_reinitialization = false;
    gnss_calibration_params.enable_rolling_calibration = false;
    gnss_calibration_params.enable_translation_uncertainty_target = true;
    gnss_calibration_params.target_yaw_uncertainty = 0.01;
    gnss_calibration_params.target_translation_uncertainty = 3e-2; //  3 cm
    _positional_tracking_fusion_params.enable_GNSS_fusion = true;
    _positional_tracking_fusion_params.gnss_calibration_parameters = gnss_calibration_params;

I’ve been monitoring the GNSS_FUSION_STATUS using getCurrentGNSSCalibrationSTD. Here’s a snippet of the output::

CurrentGNSSCalibrationSTD: GNSS State:CALIBRATION_IN_PROGRESS, calibration uncertainty yaw_std:61.4428, rad position_std: 0.079550095m, 0.014076781m,0.09694326m
CurrentGNSSCalibrationSTD: GNSS State:CALIBRATION_IN_PROGRESS, calibration uncertainty yaw_std:8.457334, rad position_std: 0.027261207m, 0.009953784m,0.014692248m
… …
… …
CurrentGNSSCalibrationSTD: GNSS State:CALIBRATION_IN_PROGRESS, calibration uncertainty yaw_std:0.012959355, rad position_std: 0.008937922m, 0.0050556576m,0.011000213m
CurrentGNSSCalibrationSTD: GNSS State:CALIBRATION_IN_PROGRESS, calibration uncertainty yaw_std:0.00951422, rad position_std: 0.008802628m, 0.005041268m,0.010952928m
CurrentGNSSCalibrationSTD: GNSS State:OK, calibration uncertainty yaw_std:0.00951422, rad position_std: 0.008802628m, 0.005041268m,0.010952928m
CurrentGNSSCalibrationSTD: GNSS State:OK, calibration uncertainty yaw_std:0.00951422, rad position_std: 0.008802628m, 0.005041268m,0.010952928m

When the GNSS State switches to OK and I’m printing Pose and GeoPose, does this indicate that the system’s calibration procedure has been successfully completed?

Hi @Myzhar
Do you have any further suggestions?

Yes, this is the case.

Hi, @Myzhar
After successful calibration, the data I’m printing shows the characteristics I described at the beginning of the thread :rofl:.
I’m confused about this: calibration clearly succeeded, yet the Pose data obtained from the fusion interface shows valid as false and Confidence as 0.

Does this mean the GeoPose data from fusion is also unreliable in this scenario?

Is the sl::Transform pose_data field within the GeoPose (the 4x4 ENU pose matrix) being assigned a value?

Hello @Lyra,

Thank you for your feedback. When obtaining the position from the sl::Fusion object, please disregard these attributes. The sl::Pose class was inherited from the sl::Camera class, and the fusion algorithm does not populate these fields. However, it is not normal for these fields to remain unpopulated with the sl::Pose camera data. We will address this issue.

In the meantime, if you absolutely need these values, you can still retrieve them from the sl::Camera class. If you need an indicator to determine whether the system is calibrated, you can use the return value of getGeoPose, which returns a GNSS_FUSION_STATUS containing this information.

I hope this answers your question.

Best regards, Tanguy