SVO V1 / SVO V2 GNSS Fusion integration

I am trying to run tests with an SVO file that was recorded with Version 1.

When i call:

>>> zed.get_svo_data_keys()
[]

I get an empty list. My understanding is that in order to perform GNSS fusion with an .SVO file, there needs to be some sort of GNSS data in the .SVO file. Are there any work-arounds to processing .SVO files to perform GNSS fusion with SDK version 4+?

As it stands now, when attempting to get a GeoPose from a Pose, I get ‘CALIBRATION IN PROCESS’

Method:

    def get_geopose(self,pose:Union[sl.Pose,np.ndarray]) -> sl.GeoPose:
        geopose = sl.GeoPose()
        if isinstance(pose,np.ndarray):
            pose: sl.Pose = pose_from_numpy(pose)
        gnss_state : sl.GNSS_CALIBRATION_STATE = self.fusion.camera_to_geo(pose,geopose)
        return geopose,gnss_state

I/O:


>>>pose.pose_data()
55691E4FB610
0.990839 -0.120580 -0.060810 -0.053346
0.114405 0.988741 -0.096450 0.954958
0.071755 0.088609 0.993479 0.168579
0.000000 0.000000 0.000000 1.000000

geopose,gnss_state = self.get_geopose(pose)

>>> geopose.pose_data

556928390630
1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 0.000000
0.000000 0.000000 1.000000 0.000000
0.000000 0.000000 0.000000 1.000000

>>>geopose.latlng_coordinates.get_coordinates(False)
(44.xxxxxx, -123.xxxxx, 313.631)

>>> geopose.heading
0.0

>>> gnss_state
CALIBRATION_IN_PROGRESS

Additionally, how can I get the correct heading value?

Hi @fdunbar,

Your assumption is correct, the get_svo_data_keys() will always return an empty list in an SVO version 1, as the possibility to add external data in the SVO is a feature added in SVO version 2.

GNSS Fusion with SVO version 1 must be performed with an external file that contains GNSS data. The samples were made in order to support both ways of recording/replaying SVO and GNSS data.

The calibration process usually requires the system to move in order to calibrate the relative position between the antenna and the camera. To see the progress of the calibration step, you can use this method: get_current_gnss_calibration_std which will return the calibration error. The GNSSCalibrationParameters set the thresholds of your system to consider the calibration process is finished.

The heading value is currently unavailable, we are planning to support it in a future release of the ZED SDK.