fix(tracking): construct RPT camera payloads via typed bindings

Switch the triangulation adapter from ad hoc Python dictionaries to rpt.make_camera so the tracker passes the exact typed camera objects expected by the current RPT bindings.

The camera convention test now asserts against the bound camera object's numeric fields instead of raw dict payloads, which keeps the test aligned with the compiled interface.
This commit is contained in:
2026-03-27 12:02:41 +08:00
parent 2c877dc53c
commit d86e9f11d7
2 changed files with 15 additions and 14 deletions
+10 -10
View File
@@ -15,16 +15,16 @@ def build_rpt_config(
min_group_size: int, min_group_size: int,
) -> TriangulationConfig: ) -> TriangulationConfig:
cameras = [ cameras = [
{ rpt.make_camera(
"name": camera.name, name=camera.name,
"width": camera.width, width=camera.width,
"height": camera.height, height=camera.height,
"K": camera.K.tolist(), K=camera.K,
"DC": camera.DC.tolist(), DC=camera.DC,
"R": camera.pose_R.tolist(), R=camera.pose_R,
"T": camera.pose_T.reshape(3, 1).tolist(), T=camera.pose_T,
"model": camera.model, model=camera.model,
} )
for camera in scene.cameras for camera in scene.cameras
] ]
roomparams = np.asarray([scene.room_size, scene.room_center], dtype=np.float32) roomparams = np.asarray([scene.room_size, scene.room_center], dtype=np.float32)
+5 -4
View File
@@ -7,6 +7,7 @@ import numpy as np
import pytest import pytest
pytest.importorskip("rpt") pytest.importorskip("rpt")
import rpt
from pose_tracking_exp.schema import CameraCalibration, CameraModel, SceneConfig, parse_camera_model from pose_tracking_exp.schema import CameraCalibration, CameraModel, SceneConfig, parse_camera_model
from pose_tracking_exp.tracking.replay_io import load_scene_file from pose_tracking_exp.tracking.replay_io import load_scene_file
@@ -125,7 +126,7 @@ def test_build_rpt_config_uses_pose_convention(monkeypatch: pytest.MonkeyPatch)
captured: dict[str, object] = {} captured: dict[str, object] = {}
def fake_make_triangulation_config( def fake_make_triangulation_config(
cameras: list[dict[str, object]], cameras: list[rpt.Camera],
roomparams: np.ndarray, roomparams: np.ndarray,
joint_names: list[str], joint_names: list[str],
*, *,
@@ -143,6 +144,6 @@ def test_build_rpt_config_uses_pose_convention(monkeypatch: pytest.MonkeyPatch)
build_rpt_config(scene, min_match_score=0.5, min_group_size=2) build_rpt_config(scene, min_match_score=0.5, min_group_size=2)
camera_payload = cast(list[dict[str, object]], captured["cameras"])[0] camera_payload = cast(list[rpt.Camera], captured["cameras"])[0]
assert camera_payload["R"] == camera.pose_R.tolist() np.testing.assert_allclose(camera_payload.R, camera.pose_R.tolist())
assert camera_payload["T"] == camera.pose_T.reshape(3, 1).tolist() np.testing.assert_allclose(camera_payload.T, camera.pose_T.reshape(3, 1).tolist())