#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use super::core::{ErrorStatistics, Force, BoundingBox};
use crate::error::Result;
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct ManipulationMetrics {
pub grasping_metrics: GraspingMetrics,
pub manipulation_accuracy: ManipulationAccuracyMetrics,
pub task_completion: TaskCompletionMetrics,
pub force_metrics: ForceContactMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraspingMetrics {
pub success_rate: f64,
pub stability_score: f64,
pub force_closure_quality: f64,
pub approach_quality: f64,
pub planning_time: Duration,
pub damage_rate: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManipulationAccuracyMetrics {
pub position_accuracy: ErrorStatistics,
pub orientation_accuracy: ErrorStatistics,
pub trajectory_accuracy: f64,
pub repeatability: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskCompletionMetrics {
pub success_rate: f64,
pub completion_time: Duration,
pub efficiency_score: f64,
pub error_recovery_rate: f64,
pub result_quality: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForceContactMetrics {
pub force_accuracy: ErrorStatistics,
pub contact_stability: f64,
pub force_overshoot: f64,
pub contact_detection_accuracy: f64,
pub compliance_quality: f64,
}
impl ManipulationMetrics {
pub fn new() -> Self {
Self {
grasping_metrics: GraspingMetrics::default(),
manipulation_accuracy: ManipulationAccuracyMetrics::default(),
task_completion: TaskCompletionMetrics::default(),
force_metrics: ForceContactMetrics::default(),
}
}
}
impl Default for GraspingMetrics {
fn default() -> Self {
Self {
success_rate: 1.0,
stability_score: 1.0,
force_closure_quality: 1.0,
approach_quality: 1.0,
planning_time: Duration::from_millis(0),
damage_rate: 0.0,
}
}
}
impl Default for ManipulationAccuracyMetrics {
fn default() -> Self {
Self {
position_accuracy: ErrorStatistics::default(),
orientation_accuracy: ErrorStatistics::default(),
trajectory_accuracy: 1.0,
repeatability: 1.0,
}
}
}
impl Default for TaskCompletionMetrics {
fn default() -> Self {
Self {
success_rate: 1.0,
completion_time: Duration::from_secs(0),
efficiency_score: 1.0,
error_recovery_rate: 1.0,
result_quality: 1.0,
}
}
}
impl Default for ForceContactMetrics {
fn default() -> Self {
Self {
force_accuracy: ErrorStatistics::default(),
contact_stability: 1.0,
force_overshoot: 0.0,
contact_detection_accuracy: 1.0,
compliance_quality: 1.0,
}
}
}