#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use super::core::{TrajectoryPoint, Pose, BoundingBox};
use crate::error::Result;
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct NavigationMetrics {
pub path_planning: PathPlanningMetrics,
pub obstacle_avoidance: ObstacleAvoidanceMetrics,
pub goal_reaching: GoalReachingMetrics,
pub dynamic_adaptation: DynamicAdaptationMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PathPlanningMetrics {
pub success_rate: f64,
pub planning_time: Duration,
pub path_optimality: f64,
pub smoothness: f64,
pub computational_efficiency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ObstacleAvoidanceMetrics {
pub collision_avoidance_rate: f64,
pub min_clearance: f64,
pub avg_clearance: f64,
pub reaction_time: Duration,
pub path_deviation: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GoalReachingMetrics {
pub success_rate: f64,
pub position_accuracy: f64,
pub orientation_accuracy: f64,
pub completion_time: Duration,
pub energy_efficiency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicAdaptationMetrics {
pub adaptation_time: Duration,
pub replanning_frequency: f64,
pub adaptation_success_rate: f64,
pub disturbance_robustness: f64,
}
impl NavigationMetrics {
pub fn new() -> Self {
Self {
path_planning: PathPlanningMetrics::default(),
obstacle_avoidance: ObstacleAvoidanceMetrics::default(),
goal_reaching: GoalReachingMetrics::default(),
dynamic_adaptation: DynamicAdaptationMetrics::default(),
}
}
}
impl Default for PathPlanningMetrics {
fn default() -> Self {
Self {
success_rate: 1.0,
planning_time: Duration::from_millis(0),
path_optimality: 1.0,
smoothness: 1.0,
computational_efficiency: 1.0,
}
}
}
impl Default for ObstacleAvoidanceMetrics {
fn default() -> Self {
Self {
collision_avoidance_rate: 1.0,
min_clearance: 0.0,
avg_clearance: 0.0,
reaction_time: Duration::from_millis(0),
path_deviation: 0.0,
}
}
}
impl Default for GoalReachingMetrics {
fn default() -> Self {
Self {
success_rate: 1.0,
position_accuracy: 0.0,
orientation_accuracy: 0.0,
completion_time: Duration::from_secs(0),
energy_efficiency: 1.0,
}
}
}
impl Default for DynamicAdaptationMetrics {
fn default() -> Self {
Self {
adaptation_time: Duration::from_millis(0),
replanning_frequency: 0.0,
adaptation_success_rate: 1.0,
disturbance_robustness: 1.0,
}
}
}