GeoPose heading is 0.0

When gnss calibration is achieved and I try to convert a sl.Pose object to a sl.GeoPose object,
the resulting sl.GeoPose object has a heading of zero.

    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
>> geo_pose: sl.GeoPose = fusion.get_geopose(image_georect.pose)
>> geo_pose.heading
0.0

Any ideas why this is?

** pose info:

<pyzed.sl.Pose object at 0x7f774dfeb2d0>
special variables
function variables
pose_confidence:
0
pose_covariance:
array([ 1.21106258e+10, -7.78711872e+08,  6.20275866e+09,  9.63872254e-01,
        4.39816467e+02,  6.03725624e+01, -7.78711616e+08,  1.54839327e+10,
        1.54020288e+09, -4.53894989e+02,  1.63612187e+00, -2.29778748e+02,
        6.20275814e+09,  1.54020224e+09,  3.66498381e+09, -6.35581093e+01,
        2.25773514e+02, -3.02111030e+00,  9.63873982e-01, -4.53894989e+02,
       -6.35581169e+01,  2.30650530e-05,  1.18429689e-07, -2.39701876e-07,
        4.39816467e+02,  1.63611591e+00,  2.25773499e+02,  1.18429604e-07,
        2.22182734e-05, -4.53915561e-07,  6.03725739e+01, -2.29778809e+02,
       -3.02110863e+00, -2.39701279e-07, -4.53915447e-07,  2.31341655e-05])
special variables
[0:36] :
[12110625792.0, -778711872.0, 6202758656.0, 0.9638722538948059, 439.81646728515625, 60.372562408447266, -778711616.0, 15483932672.0, 1540202880.0, -453.8949890136719, 1.6361218690872192, -229.77874755859375, 6202758144.0, 1540202240.0, 3664983808.0, -63.558109283447266, 225.7735137939453, -3.0211102962493896, 0.9638739824295044, -453.8949890136719, -63.5581169128418, 2.306505302840378e-05, 1.1842968916653263e-07, -2.397018761257641e-07, 439.81646728515625, 1.6361159086227417, 225.77349853515625, 1.1842960390140433e-07, 2.2218273443286307e-05, -4.539155611382739e-07, 60.37257385253906, -229.77880859375, -3.021108627319336, -2.3970127926986606e-07, -4.539154474514362e-07, 2.3134165530791506e-05]
dtype:
dtype('float64')
max:
15483932672.0
min:
-778711872.0
shape:
(36,)
size:
36
timestamp:
<pyzed.sl.Timestamp object at 0x7f77700f01d0>
twist:
array([3.47285720e-12, 7.31619239e+28, 1.46074732e-19, 1.15783705e+27,
       1.11281946e+27, 3.47285720e-12])
twist_covariance:
array([7.31619239e+28, 1.43533634e-19, 7.39884024e+31, 6.99827890e+28,
       1.12888051e+16, 2.24808688e+14, 1.36494234e+10, 2.35657557e+14,
       1.89176549e+23, 7.18458933e+22, 6.99825765e+28, 3.03031554e+24,
       8.21333374e+02, 4.19363264e+15, 1.89176549e+23, 7.18458933e+22,
       1.85211894e+25, 1.32913693e+19, 1.60196605e-19, 1.83931620e+25,
       1.69290389e+22, 2.67924208e+20, 2.03118455e+32, 5.69110945e-08,
       2.06991014e-19, 1.89657003e+28, 1.79046294e+28, 1.21188894e+25,
       1.58780395e-19, 5.69110945e-08, 2.06991014e-19, 1.80372452e+28,
       3.35246645e-41, 0.00000000e+00, 7.62306365e-43, 0.00000000e+00])
valid:
False
1 Like

Hi @fdunbar,

Would you have sample data in order to reproduce this issue?

Unfortunately that would take an immense amount of work (to share our companies SDK and the data)

For now, would using the devices magnetic compass produce similar results?

The goal is to simply know the fused heading of the camera.

Hi @frigusgulo,

Thank you for reporting this to our attention.

After further investigation we’ve been able to reproduce your issue, this will be taken into account in the next release of the ZED SDK.

For what its worth, I am using the non-default coordinate system:

RIGHT_HANDED_Z_UP

just guessing but that might cause issues when attempting get geographical heading.

Thank you for the details, we will make sure the heading is available in ENU frame regardless of the ZED coordinate system.