迁移RTK-IMU标定到独立顶层包

This commit is contained in:
lichun.qu
2026-08-25 10:21:43 +08:00
parent d14ae74117
commit 32d8af8ed9
40 changed files with 100 additions and 88 deletions
+4 -4
View File
@@ -158,10 +158,10 @@ frozen / not run
## 代码入口 ## 代码入口
- `imu_lidar/rtk_attitude.py`GNHPR 基线语义及零 roll 数学补全。 - `rtk_imu/rtk_attitude.py`GNHPR 基线语义及零 roll 数学补全。
- `imu_lidar/rtk_io.py`RTK CSV、Q4/Q5 和 checksum 质量门禁。 - `rtk_imu/rtk_io.py`RTK CSV、Q4/Q5 和 checksum 质量门禁。
- `imu_lidar/rtk_imu_rotation.py`:时间审计、连续段、基线审计、旧式诊断和重优化 LOO。 - `rtk_imu/rtk_imu_rotation.py`:时间审计、连续段、基线审计、旧式诊断和重优化 LOO。
- `imu_lidar/rtk_imu_replay.py`:坐标定义、参考点、平移冻结和 JSON 输出。 - `rtk_imu/rtk_imu_replay.py`:坐标定义、参考点、平移冻结和 JSON 输出。
- `tools/rscap_v2/g90_rtk.py`:原始 GNHPR 解析及质量字段。 - `tools/rscap_v2/g90_rtk.py`:原始 GNHPR 解析及质量字段。
- `tools/export_g90_rtk_to_sessions.py`GNHPR 质量字段导出。 - `tools/export_g90_rtk_to_sessions.py`GNHPR 质量字段导出。
- `tools/run_rtk_imu_calibration.py`:端到端命令行入口。 - `tools/run_rtk_imu_calibration.py`:端到端命令行入口。
+1 -1
View File
@@ -170,6 +170,6 @@ R2V 与 R2G 的 SO(3) 差异为 9.3119°。R3 最终:
- tools/rscap_v2/g90_rtk.pyGGA/GNHPR/BESTNAVA/PVTSLNA 和双 checksum。 - tools/rscap_v2/g90_rtk.pyGGA/GNHPR/BESTNAVA/PVTSLNA 和双 checksum。
- tools/rscap_v2/hi13_imu.pyHI91 system_time、惯性、姿态和四元数。 - tools/rscap_v2/hi13_imu.pyHI91 system_time、惯性、姿态和四元数。
- tools/export_rtk_imu_unified.py55 组配对、原生异步导出和断点续导。 - tools/export_rtk_imu_unified.py55 组配对、原生异步导出和断点续导。
- imu_lidar/rtk_imu_multisource.pyR1b/R2V/R2G/R3。 - rtk_imu/rtk_imu_multisource.pyR1b/R2V/R2G/R3。
- tools/run_rtk_imu_multisource.py:多源旋转命令行入口。 - tools/run_rtk_imu_multisource.py:多源旋转命令行入口。
- artifacts/rtk_imu_calibration_v3/multisource_result.json:首轮 R3 结果。 - artifacts/rtk_imu_calibration_v3/multisource_result.json:首轮 R3 结果。
+2 -2
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "lidar-imu-calibration" name = "lidar-imu-calibration"
version = "0.3.0" version = "0.3.0"
description = "LiDARIMU extrinsic calibration from continuous-motion keyframes (imu_lidar)" description = "LiDAR-IMU and RTK-IMU extrinsic calibration algorithms"
requires-python = ">=3.10" requires-python = ">=3.10"
dependencies = [ dependencies = [
"numpy>=1.26", "numpy>=1.26",
@@ -21,7 +21,7 @@ requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta" build-backend = "setuptools.build_meta"
[tool.setuptools] [tool.setuptools]
packages = ["imu_lidar", "tools"] packages = ["imu_lidar", "rtk_imu", "tools"]
[tool.pytest.ini_options] [tool.pytest.ini_options]
testpaths = ["tests"] testpaths = ["tests"]
+11
View File
@@ -0,0 +1,11 @@
# RTK-IMU Calibration Package
`rtk_imu/` contains the independent RTK-IMU calibration pipeline: G90 observation I/O, antenna-baseline rotation, V1 replay, V3 multisource stages, engineering 6DoF, and the node-state factor graph.
## Boundary
This package may import only shared `imu_lidar` utilities: `contracts`, `geometry`, `geodesy`, `imu_io`, `imu_preintegration`, and the generic `rotation_handeye` initializer.
It must not import LiDAR-specific modules such as `lidar_io`, `lidar_deskew`, `registration`, `pipeline`, `phase_a`, or `joint_optimizer`. The LiDAR-IMU pipeline remains in `imu_lidar/`.
## Entrypoints
+1
View File
@@ -0,0 +1 @@
"""RTK-IMU extrinsic calibration algorithms and data interfaces."""
@@ -14,8 +14,8 @@ import numpy as np
from scipy.optimize import least_squares from scipy.optimize import least_squares
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
from .geometry import make_transform, so3_exp from imu_lidar.geometry import make_transform, so3_exp
from .imu_preintegration import apply_bias_correction_imu, preintegrate_imu from imu_lidar.imu_preintegration import apply_bias_correction_imu, preintegrate_imu
from .rtk_attitude import gnhpr_to_baseline_enu from .rtk_attitude import gnhpr_to_baseline_enu
from .rtk_imu_multisource import UnifiedSession, _f, _nearest_index, _truth from .rtk_imu_multisource import UnifiedSession, _f, _nearest_index, _truth
@@ -11,9 +11,9 @@ import numpy as np
from scipy.optimize import least_squares from scipy.optimize import least_squares
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
from .contracts import ImuSeries from imu_lidar.contracts import ImuSeries
from .geometry import so3_exp, so3_log from imu_lidar.geometry import so3_exp, so3_log
from .imu_preintegration import apply_bias_jacobian_correction, preintegrate_gyro from imu_lidar.imu_preintegration import apply_bias_jacobian_correction, preintegrate_gyro
from .rtk_attitude import gnhpr_to_baseline_enu from .rtk_attitude import gnhpr_to_baseline_enu
@@ -4,8 +4,8 @@ from dataclasses import dataclass
import numpy as np import numpy as np
from scipy.optimize import least_squares from scipy.optimize import least_squares
from scipy.sparse import lil_matrix from scipy.sparse import lil_matrix
from .geometry import so3_exp, so3_log from imu_lidar.geometry import so3_exp, so3_log
from .imu_preintegration import apply_bias_correction_imu, residual_whiten_matrix from imu_lidar.imu_preintegration import apply_bias_correction_imu, residual_whiten_matrix
from .rtk_imu_engineering import ( from .rtk_imu_engineering import (
G_ENU, HPR_DIRECT_ANGULAR_SIGMA_RAD, _Segment, _world_rtk) G_ENU, HPR_DIRECT_ANGULAR_SIGMA_RAD, _Segment, _world_rtk)
@@ -10,7 +10,7 @@ from typing import Any
import numpy as np import numpy as np
from .imu_io import load_imu_samples from imu_lidar.imu_io import load_imu_samples
from .rtk_imu_rotation import RotationCalibrationResult, RotationSession, solve_rtk_imu_rotation from .rtk_imu_rotation import RotationCalibrationResult, RotationSession, solve_rtk_imu_rotation
from .rtk_imu_translation import TranslationCalibrationResult, solve_rtk_imu_translation from .rtk_imu_translation import TranslationCalibrationResult, solve_rtk_imu_translation
from .rtk_io import load_rtk_csv from .rtk_io import load_rtk_csv
@@ -8,10 +8,10 @@ import numpy as np
from scipy.optimize import least_squares from scipy.optimize import least_squares
from scipy.sparse import lil_matrix from scipy.sparse import lil_matrix
from .contracts import ImuSeries, MotionPair from imu_lidar.contracts import ImuSeries, MotionPair
from .geometry import orthonormalize_rotation, rpy_deg_xyz, so3_exp, so3_log from imu_lidar.geometry import orthonormalize_rotation, rpy_deg_xyz, so3_exp, so3_log
from .imu_preintegration import apply_bias_jacobian_correction, preintegrate_gyro from imu_lidar.imu_preintegration import apply_bias_jacobian_correction, preintegrate_gyro
from .rotation_handeye import estimate_rotation_handeye_initial from imu_lidar.rotation_handeye import estimate_rotation_handeye_initial
from .rtk_attitude import GNHPR_CANDIDATES, GnhprConvention, gnhpr_to_rotation_enu_rtk from .rtk_attitude import GNHPR_CANDIDATES, GnhprConvention, gnhpr_to_rotation_enu_rtk
from .rtk_io import RtkSeries from .rtk_io import RtkSeries
@@ -9,7 +9,7 @@ from scipy.sparse import coo_matrix, csr_matrix, eye
from scipy.sparse.linalg import lsqr, splu from scipy.sparse.linalg import lsqr, splu
from scipy.spatial.transform import Rotation, Slerp from scipy.spatial.transform import Rotation, Slerp
from .geometry import make_transform, orthonormalize_rotation, so3_exp from imu_lidar.geometry import make_transform, orthonormalize_rotation, so3_exp
from .rtk_imu_rotation import RotationCalibrationResult, RotationSession, _attitude_rows from .rtk_imu_rotation import RotationCalibrationResult, RotationSession, _attitude_rows
+1 -1
View File
@@ -7,7 +7,7 @@ from pathlib import Path
import numpy as np import numpy as np
from .geodesy import geodetic_to_enu from imu_lidar.geodesy import geodetic_to_enu
@dataclass(frozen=True) @dataclass(frozen=True)
+3 -3
View File
@@ -7,9 +7,9 @@ import numpy as np
from imu_lidar.geodesy import geodetic_to_enu from imu_lidar.geodesy import geodetic_to_enu
from imu_lidar.geometry import so3_exp from imu_lidar.geometry import so3_exp
from imu_lidar.imu_preintegration import preintegrate_gyro, preintegrate_imu from imu_lidar.imu_preintegration import preintegrate_gyro, preintegrate_imu
from imu_lidar.rtk_attitude import gnhpr_to_baseline_enu, gnhpr_to_rotation_enu_rtk from rtk_imu.rtk_attitude import gnhpr_to_baseline_enu, gnhpr_to_rotation_enu_rtk
from imu_lidar.rtk_imu_translation import _preintegrate_translation_interval from rtk_imu.rtk_imu_translation import _preintegrate_translation_interval
from imu_lidar.rtk_io import load_rtk_csv from rtk_imu.rtk_io import load_rtk_csv
def test_geodetic_to_enu_has_expected_axis_and_scale() -> None: def test_geodetic_to_enu_has_expected_axis_and_scale() -> None:
+3 -3
View File
@@ -7,7 +7,7 @@ import pytest
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
from imu_lidar.contracts import ImuSeries from imu_lidar.contracts import ImuSeries
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
G0, G0,
HPR_DIRECT_ANGULAR_SIGMA_RAD, HPR_DIRECT_ANGULAR_SIGMA_RAD,
ResidualAudit, ResidualAudit,
@@ -23,8 +23,8 @@ from imu_lidar.rtk_imu_engineering import (
_segments, _segments,
solve_engineering_6dof, solve_engineering_6dof,
) )
from imu_lidar.rtk_imu_multisource import UnifiedSession from rtk_imu.rtk_imu_multisource import UnifiedSession
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
_additive_marginal_lever_information, _additive_marginal_lever_information,
_free_residual, _free_residual,
_free_sparsity, _free_sparsity,
+1 -1
View File
@@ -3,7 +3,7 @@ from __future__ import annotations
import numpy as np import numpy as np
from imu_lidar.contracts import ImuSeries from imu_lidar.contracts import ImuSeries
from imu_lidar.rtk_imu_multisource import R1bResult, UnifiedSession, solve_r2g from rtk_imu.rtk_imu_multisource import R1bResult, UnifiedSession, solve_r2g
def _level_session(session_id: str) -> UnifiedSession: def _level_session(session_id: str) -> UnifiedSession:
+2 -2
View File
@@ -9,14 +9,14 @@ from scipy.spatial.transform import Rotation
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT))
from imu_lidar.imu_preintegration import preintegrate_imu from imu_lidar.imu_preintegration import preintegrate_imu
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
G_ENU, MIN_SEGMENT_DURATION_S, MIN_SEGMENT_NODE_COUNT, G_ENU, MIN_SEGMENT_DURATION_S, MIN_SEGMENT_NODE_COUNT,
NUISANCE_DOF_PER_SEGMENT, _Segment, _all_hpr, _audit, NUISANCE_DOF_PER_SEGMENT, _Segment, _all_hpr, _audit,
_dense_colored_jacobian, _enu, _height_reference, _dense_colored_jacobian, _enu, _height_reference,
_hpr_factor_observation, _initial_parameters, _marginal_lever_information, _hpr_factor_observation, _initial_parameters, _marginal_lever_information,
_motion_flags, _nodes, _position_valid, _residual, _motion_flags, _nodes, _position_valid, _residual,
_segment_residual_size, _world_rtk) _segment_residual_size, _world_rtk)
from imu_lidar.rtk_imu_multisource import _f, _truth, load_unified_sessions from rtk_imu.rtk_imu_multisource import _f, _truth, load_unified_sessions
MECHANICAL_L_I_M = np.array([-0.45072, -0.25682, 0.73208]) MECHANICAL_L_I_M = np.array([-0.45072, -0.25682, 0.73208])
def _jsonable(value): def _jsonable(value):
+2 -2
View File
@@ -15,13 +15,13 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
_all_hpr, _all_hpr,
_height_reference, _height_reference,
_nodes, _nodes,
_position_valid, _position_valid,
) )
from imu_lidar.rtk_imu_multisource import _f, _nearest_index, _truth, load_unified_sessions from rtk_imu.rtk_imu_multisource import _f, _nearest_index, _truth, load_unified_sessions
def _finite_doppler(row: dict[str, str]) -> bool: def _finite_doppler(row: dict[str, str]) -> bool:
+3 -3
View File
@@ -7,9 +7,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem from rtk_imu.rtk_imu_node_graph import build_problem
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.audit_rtk_imu_innovation_noise import ( from tools.audit_rtk_imu_innovation_noise import (
_factor_report,_hpr_innovations,_interval_innovations) _factor_report,_hpr_innovations,_interval_innovations)
+3 -3
View File
@@ -9,11 +9,11 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.geometry import so3_log from imu_lidar.geometry import so3_log
from imu_lidar.imu_preintegration import apply_bias_correction_imu,preintegrate_gyro from imu_lidar.imu_preintegration import apply_bias_correction_imu,preintegrate_gyro
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
G_ENU,HPR_DIRECT_ANGULAR_SIGMA_RAD,_all_hpr,_height_reference, G_ENU,HPR_DIRECT_ANGULAR_SIGMA_RAD,_all_hpr,_height_reference,
_world_rtk) _world_rtk)
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem from rtk_imu.rtk_imu_node_graph import build_problem
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable
from tools.run_rtk_imu_node_graph_fixed_lever import _select_window from tools.run_rtk_imu_node_graph_fixed_lever import _select_window
+2 -2
View File
@@ -17,8 +17,8 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_engineering import _fit_segments, _fit_summary, _segments from rtk_imu.rtk_imu_engineering import _fit_segments, _fit_summary, _segments
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
def _jsonable(value): def _jsonable(value):
+2 -2
View File
@@ -23,7 +23,7 @@ if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.imu_audit import audit_imu from imu_lidar.imu_audit import audit_imu
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
MIN_SEGMENT_DURATION_S, MIN_SEGMENT_DURATION_S,
MIN_SEGMENT_NODE_COUNT, MIN_SEGMENT_NODE_COUNT,
_all_hpr, _all_hpr,
@@ -37,7 +37,7 @@ from imu_lidar.rtk_imu_engineering import (
_segments, _segments,
_source_nodes, _source_nodes,
) )
from imu_lidar.rtk_imu_multisource import _f, _truth, load_unified_sessions from rtk_imu.rtk_imu_multisource import _f, _truth, load_unified_sessions
RAW_GAP_S = 1.5 RAW_GAP_S = 1.5
+2 -2
View File
@@ -8,9 +8,9 @@ from scipy.spatial.transform import Rotation
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.imu_preintegration import preintegrate_imu from imu_lidar.imu_preintegration import preintegrate_imu
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
G_ENU, _all_hpr, _height_reference, _hpr_factor_observation, _world_rtk) G_ENU, _all_hpr, _height_reference, _hpr_factor_observation, _world_rtk)
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from tools.audit_rtk_imu_factor_consistency import ( from tools.audit_rtk_imu_factor_consistency import (
MECHANICAL_L_I_M, _best_arrays, _jsonable, _nearest_imu, _summary) MECHANICAL_L_I_M, _best_arrays, _jsonable, _nearest_imu, _summary)
@@ -7,9 +7,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import G0,G_ENU,_height_reference,_nodes,_world_rtk from rtk_imu.rtk_imu_engineering import G0,G_ENU,_height_reference,_nodes,_world_rtk
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem from rtk_imu.rtk_imu_node_graph import build_problem
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.audit_rtk_imu_heldout_innovation import _calibration_biases from tools.audit_rtk_imu_heldout_innovation import _calibration_biases
from tools.audit_rtk_imu_innovation_noise import _factor_report,_interval_innovations from tools.audit_rtk_imu_innovation_noise import _factor_report,_interval_innovations
@@ -7,9 +7,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem,linearized_lever_information from rtk_imu.rtk_imu_node_graph import build_problem,linearized_lever_information
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.run_rtk_imu_node_graph_free_selected import _restore_segments from tools.run_rtk_imu_node_graph_free_selected import _restore_segments
from tools.select_rtk_imu_windows_by_lever_information import ( from tools.select_rtk_imu_windows_by_lever_information import (
+3 -3
View File
@@ -8,9 +8,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
build_problem,fit_states_at_fixed_lever,summarize_fixed_state_values) build_problem,fit_states_at_fixed_lever,summarize_fixed_state_values)
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.run_rtk_imu_node_graph_free_selected import _restore_segments from tools.run_rtk_imu_node_graph_free_selected import _restore_segments
+1 -1
View File
@@ -12,7 +12,7 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_replay import ( from rtk_imu.rtk_imu_replay import (
DEFAULT_RTK_FRAME_DEFINITION, DEFAULT_RTK_FRAME_DEFINITION,
DEFAULT_RTK_REFERENCE_POINT, DEFAULT_RTK_REFERENCE_POINT,
load_inventory, load_inventory,
+2 -2
View File
@@ -17,12 +17,12 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
DEFAULT_MANUAL_L_I_M, DEFAULT_MANUAL_L_I_M,
DEFAULT_MANUAL_L_I_COVARIANCE_M2, DEFAULT_MANUAL_L_I_COVARIANCE_M2,
solve_engineering_6dof, solve_engineering_6dof,
) )
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
def _jsonable(value): def _jsonable(value):
+2 -2
View File
@@ -20,7 +20,7 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_engineering import ( from rtk_imu.rtk_imu_engineering import (
MIN_SEGMENT_DURATION_S, MIN_SEGMENT_DURATION_S,
MIN_SEGMENT_NODE_COUNT, MIN_SEGMENT_NODE_COUNT,
NUISANCE_DOF_PER_SEGMENT, NUISANCE_DOF_PER_SEGMENT,
@@ -36,7 +36,7 @@ from imu_lidar.rtk_imu_engineering import (
_world_rtk, _world_rtk,
) )
from imu_lidar.imu_preintegration import preintegrate_imu from imu_lidar.imu_preintegration import preintegrate_imu
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
MANUAL_REFERENCE_L_I_M = np.array([-0.45072, -0.25682, 0.73208], dtype=float) MANUAL_REFERENCE_L_I_M = np.array([-0.45072, -0.25682, 0.73208], dtype=float)
+3 -3
View File
@@ -9,9 +9,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
NODE_DOF,build_problem,fit_states_at_fixed_lever,solve_free_lever_many, NODE_DOF,build_problem,fit_states_at_fixed_lever,solve_free_lever_many,
summarize_fixed_state_values) summarize_fixed_state_values)
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable
@@ -9,9 +9,9 @@ from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.geometry import make_transform from imu_lidar.geometry import make_transform
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem,fit_states_at_fixed_lever,residual from rtk_imu.rtk_imu_node_graph import build_problem,fit_states_at_fixed_lever,residual
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.run_rtk_imu_node_graph_free_selected import _restore_segments from tools.run_rtk_imu_node_graph_free_selected import _restore_segments
@@ -10,9 +10,9 @@ from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.geometry import make_transform from imu_lidar.geometry import make_transform
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
build_problem,solve_free_lever_many,summarize_fixed_state_values) build_problem,solve_free_lever_many,summarize_fixed_state_values)
from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_factor_consistency import _jsonable
from tools.run_rtk_imu_node_graph_free_selected import _restore_segments from tools.run_rtk_imu_node_graph_free_selected import _restore_segments
+1 -1
View File
@@ -12,7 +12,7 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_multisource import ( from rtk_imu.rtk_imu_multisource import (
load_unified_sessions, load_unified_sessions,
result_to_jsonable, result_to_jsonable,
solve_r3, solve_r3,
+3 -3
View File
@@ -8,9 +8,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem, solve_fixed_lever from rtk_imu.rtk_imu_node_graph import build_problem, solve_fixed_lever
from tools.audit_rtk_imu_factor_consistency import ( from tools.audit_rtk_imu_factor_consistency import (
MECHANICAL_L_I_M, _build_segment, _jsonable, _qualified_runs) MECHANICAL_L_I_M, _build_segment, _jsonable, _qualified_runs)
+3 -3
View File
@@ -8,9 +8,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem,solve_free_lever from rtk_imu.rtk_imu_node_graph import build_problem,solve_free_lever
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable
from tools.run_rtk_imu_node_graph_fixed_lever import _select_window from tools.run_rtk_imu_node_graph_fixed_lever import _select_window
+3 -3
View File
@@ -8,9 +8,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem,solve_free_lever_many from rtk_imu.rtk_imu_node_graph import build_problem,solve_free_lever_many
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable
from tools.run_rtk_imu_node_graph_fixed_lever import _select_window from tools.run_rtk_imu_node_graph_fixed_lever import _select_window
@@ -9,9 +9,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
build_problem,fit_states_at_fixed_lever,solve_free_lever_many) build_problem,fit_states_at_fixed_lever,solve_free_lever_many)
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_build_segment,_jsonable,_qualified_runs from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_build_segment,_jsonable,_qualified_runs
+3 -3
View File
@@ -8,9 +8,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _height_reference from rtk_imu.rtk_imu_engineering import _height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import ( from rtk_imu.rtk_imu_node_graph import (
build_problem,solve_fixed_lever,solve_fixed_lever_many) build_problem,solve_fixed_lever,solve_fixed_lever_many)
from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable from tools.audit_rtk_imu_factor_consistency import MECHANICAL_L_I_M,_jsonable
from tools.run_rtk_imu_node_graph_fixed_lever import _select_window from tools.run_rtk_imu_node_graph_fixed_lever import _select_window
@@ -7,9 +7,9 @@ import numpy as np
from scipy.spatial.transform import Rotation from scipy.spatial.transform import Rotation
ROOT=Path(__file__).resolve().parents[1] ROOT=Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT))
from imu_lidar.rtk_imu_engineering import _all_hpr,_height_reference from rtk_imu.rtk_imu_engineering import _all_hpr,_height_reference
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
from imu_lidar.rtk_imu_node_graph import build_problem,linearized_lever_information from rtk_imu.rtk_imu_node_graph import build_problem,linearized_lever_information
from tools.audit_rtk_imu_factor_consistency import _build_segment,_jsonable,_qualified_runs from tools.audit_rtk_imu_factor_consistency import _build_segment,_jsonable,_qualified_runs
from tools.run_rtk_imu_node_graph_fixed_lever import _select_window from tools.run_rtk_imu_node_graph_fixed_lever import _select_window
+2 -2
View File
@@ -21,8 +21,8 @@ ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT)) sys.path.insert(0, str(ROOT))
from imu_lidar.rtk_imu_engineering import _all_hpr, _baseline_angle_deg, _interpolate_baseline, _world_rtk from rtk_imu.rtk_imu_engineering import _all_hpr, _baseline_angle_deg, _interpolate_baseline, _world_rtk
from imu_lidar.rtk_imu_multisource import load_unified_sessions from rtk_imu.rtk_imu_multisource import load_unified_sessions
GAPS_S = (0.2, 0.3, 0.4, 0.5, 0.6, 0.8) GAPS_S = (0.2, 0.3, 0.4, 0.5, 0.6, 0.8)
R2G_RPY_DEG = (0.4543066225, -0.0026392019, 0.0122384129) R2G_RPY_DEG = (0.4543066225, -0.0026392019, 0.0122384129)