#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use super::core::{ErrorStatistics, DriftMetrics, RealTimePerformanceMetrics};
use crate::error::Result;
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct SlamMetrics {
pub localization_metrics: LocalizationAccuracyMetrics,
pub mapping_metrics: MappingQualityMetrics,
pub loop_closure_metrics: LoopClosureMetrics,
pub computational_metrics: SlamComputationalMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalizationAccuracyMetrics {
pub absolute_trajectory_error: f64,
pub relative_pose_error: f64,
pub translation_error: ErrorStatistics,
pub rotation_error: ErrorStatistics,
pub drift_metrics: DriftMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MappingQualityMetrics {
pub completeness: f64,
pub map_accuracy: f64,
pub feature_detection_rate: f64,
pub consistency_metrics: MapConsistencyMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapConsistencyMetrics {
pub feature_consistency: f64,
pub geometric_consistency: f64,
pub temporal_consistency: f64,
pub global_consistency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoopClosureMetrics {
pub detection_rate: f64,
pub false_positive_rate: f64,
pub closure_accuracy: f64,
pub detection_time: Duration,
pub optimization_convergence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SlamComputationalMetrics {
pub real_time_performance: RealTimePerformanceMetrics,
pub map_memory_usage: f64,
pub keyframe_processing_time: Duration,
pub optimization_time: Duration,
}
impl SlamMetrics {
pub fn new() -> Self {
Self {
localization_metrics: LocalizationAccuracyMetrics::default(),
mapping_metrics: MappingQualityMetrics::default(),
loop_closure_metrics: LoopClosureMetrics::default(),
computational_metrics: SlamComputationalMetrics::default(),
}
}
}
impl Default for LocalizationAccuracyMetrics {
fn default() -> Self {
Self {
absolute_trajectory_error: 0.0,
relative_pose_error: 0.0,
translation_error: ErrorStatistics::default(),
rotation_error: ErrorStatistics::default(),
drift_metrics: DriftMetrics::default(),
}
}
}
impl Default for MappingQualityMetrics {
fn default() -> Self {
Self {
completeness: 1.0,
map_accuracy: 1.0,
feature_detection_rate: 1.0,
consistency_metrics: MapConsistencyMetrics::default(),
}
}
}
impl Default for MapConsistencyMetrics {
fn default() -> Self {
Self {
feature_consistency: 1.0,
geometric_consistency: 1.0,
temporal_consistency: 1.0,
global_consistency: 1.0,
}
}
}
impl Default for LoopClosureMetrics {
fn default() -> Self {
Self {
detection_rate: 1.0,
false_positive_rate: 0.0,
closure_accuracy: 1.0,
detection_time: Duration::from_millis(0),
optimization_convergence: 1.0,
}
}
}
impl Default for SlamComputationalMetrics {
fn default() -> Self {
Self {
real_time_performance: RealTimePerformanceMetrics::default(),
map_memory_usage: 0.0,
keyframe_processing_time: Duration::from_millis(0),
optimization_time: Duration::from_millis(0),
}
}
}