Why is there multiple kinds of translation & rotation matrix for same sensor

Hi,

I wonder why there are different translation & rotation matrix for the same sensor ?
take sensor_token : 725903f5b62f56118f4094b46a4470d8 (cam_front) in calibrated_sensor.json for example
there are two kinds of translation & rotation combination:
1.
“translation”: [
1.72200568478,
0.00475453292289,
1.49491291905
],
“rotation”: [
0.5077241387638071,
-0.4973392230703816,
0.49837167536166627,
-0.4964832014373754
],

2.
“translation”: [
1.70079118954,
0.0159456324149,
1.51095763913
],
“rotation”: [
0.4998015430569128,
-0.5030316162024876,
0.4997798114386805,
-0.49737083824542755
],

They both represent the calibration from cam_front to ego car.
But I thought cam_front to ego car’s calibration should always stay the same, so there should only be one translation & rotation matrix ? But it shows two.
What did I misunderstood? Thanks!

@chiu_kevin both of the examples you provided only contain one pair of translation and rotation each:

from nuscenes.nuscenes import NuScenes


nusc = NuScenes(version='v1.0-trainval', dataroot='/data/sets/nuscenes', verbose=False)

print(nusc.calibrated_sensor[714])
"""
{
    "token": "bff1f6294cbc4b61a07f2d85b9b5f391",
    "sensor_token": "725903f5b62f56118f4094b46a4470d8",
    "translation": [
        1.72200568478,
        0.00475453292289,
        1.49491291905
    ],
    "rotation": [
        0.5077241387638071,
        -0.4973392230703816,
        0.49837167536166627,
        -0.4964832014373754
    ],
    "camera_intrinsic": [
        [
            1252.8131021185304,
            0.0,
            826.588114781398
        ],
        [
            0.0,
            1252.8131021185304,
            469.9846626224581
        ],
        [
            0.0,
            0.0,
            1.0
        ]
    ]
}
"""

print(nusc.calibrated_sensor[1122])
"""
{
    "token": "24bf02ba05db455199ed779fc834aa0e",
    "sensor_token": "725903f5b62f56118f4094b46a4470d8",
    "translation": [
        1.70079118954,
        0.0159456324149,
        1.51095763913
    ],
    "rotation": [
        0.4998015430569128,
        -0.5030316162024876,
        0.4997798114386805,
        -0.49737083824542755
    ],
    "camera_intrinsic": [
        [
            1266.417203046554,
            0.0,
            816.2670197447984
        ],
        [
            0.0,
            1266.417203046554,
            491.50706579294757
        ],
        [
            0.0,
            0.0,
            1.0
        ]
    ]
}
"""

(I had to guess which calibrated_sensor tokens you picked those from, so do let me know if the calibrated_sensor tokens should be something else)

Hi, thanks for the reply!

But I still don’t understand. Take the two calibrated_sensor you’ve mentioned,

Their “sensor_token” are both “725903f5b62f56118f4094b46a4470d8”, and according to sensor.json, they both represent the sensor CAM_FRONT to ego_car.
but why the translation & rotation are different, I thought the translation & rotation should be the same due to they are from the same sensor (CAM_FRONT).

For data collection, two cars (with an identical sensor layout) were used to drive in Boston and
Singapore

Naturally, there would be small differences in the dimensions of the cars and sensors (e.g. due to manufacturing tolerances), and this means that the extrinsics of the calibration would differ slightly

And you would be able to observe this in the two examples above - the translations and rotations only slightly from each other

Got it ! Thanks a lot!

1 Like