重构RTK-IMU标定链路并完成机械先验工程验证
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from imu_lidar.contracts import ImuSeries
|
||||
from imu_lidar.rtk_imu_multisource import R1bResult, UnifiedSession, solve_r2g
|
||||
|
||||
|
||||
def _level_session(session_id: str) -> UnifiedSession:
|
||||
t = np.arange(0.0, 25.0, 0.01)
|
||||
return UnifiedSession(
|
||||
session_id=session_id,
|
||||
batch_id="test",
|
||||
imu=ImuSeries(
|
||||
t_s=t,
|
||||
gyro_rad_s=np.zeros((t.size, 3)),
|
||||
acc_m_s2=np.tile([0.0, 0.0, 9.80665], (t.size, 1)),
|
||||
),
|
||||
imu_rpy_deg=np.zeros((t.size, 3)),
|
||||
imu_quaternion_wxyz=np.tile([1.0, 0.0, 0.0, 0.0], (t.size, 1)),
|
||||
imu_host_receive_utc_s=t,
|
||||
rtk_by_type={},
|
||||
)
|
||||
|
||||
|
||||
def test_r2g_baseline_plus_level_gravity_completes_identity() -> None:
|
||||
r1b = R1bResult(
|
||||
baseline_axis_imu=np.array([1.0, 0.0, 0.0]),
|
||||
tilt_yz_deg=np.zeros(2),
|
||||
pair_count=100,
|
||||
residual_rms_deg=0.1,
|
||||
residual_p95_deg=0.2,
|
||||
covariance_deg2=np.eye(2) * 0.01,
|
||||
std_deg=np.ones(2) * 0.1,
|
||||
information_singular_values=np.ones(2),
|
||||
per_session_rms_deg={},
|
||||
gyro_bias_by_session_rad_s={},
|
||||
ok=True,
|
||||
notes=(),
|
||||
)
|
||||
sessions = [_level_session("a"), _level_session("b")]
|
||||
result = solve_r2g(sessions, r1b, level_static_session_ids={"a", "b"})
|
||||
assert result.R_RTK_IMU is not None
|
||||
assert np.allclose(result.R_RTK_IMU, np.eye(3), atol=1e-12)
|
||||
assert result.sample_count == 6
|
||||
assert result.session_count == 2
|
||||
Reference in New Issue
Block a user