1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Copyright (c) 2021 Marco Boneberger
// Licensed under the EUPL-1.2-or-later

//! Contains the franka::GripperState type.

use crate::gripper::types::GripperStateIntern;
use serde::Deserialize;
use serde::Serialize;
use std::time::Duration;

/// Describes the gripper state.
#[derive(Serialize, Deserialize, Debug, Copy, Clone)]
pub struct GripperState {
    /// Current gripper opening width. Unit: \[m\].
    pub width: f64,

    /// Maximum gripper opening width.
    /// This parameter is estimated by homing the gripper.
    /// After changing the gripper fingers, a homing needs to be done. Unit: \[m\].
    ///
    /// See [`Gripper::homing()`](`crate::Gripper::homing`)
    pub max_width: f64,

    /// Indicates whether an object is currently grasped.
    pub is_grasped: bool,

    /// Current gripper temperature. Unit: [°C].
    pub temperature: u16,

    /// Strictly monotonically increasing timestamp since robot start.
    pub time: Duration,
}

impl From<GripperStateIntern> for GripperState {
    fn from(intern: GripperStateIntern) -> Self {
        GripperState {
            width: intern.width,
            max_width: intern.max_width,
            is_grasped: intern.is_grasped,
            temperature: intern.temperature,
            time: Duration::from_millis(intern.message_id as u64),
        }
    }
}