robot_description_builder/joint/smartjointbuilder/smartparams/
calibration.rs1use crate::joint::{
2 joint_data,
3 jointbuilder::JointBuilder,
4 smartjointbuilder::{smart_joint_datatraits, SmartJointBuilder},
5};
6
7pub trait CalibrationAllowed {}
9
10#[derive(Debug, Default, Clone)]
12pub struct NoCalibration;
13impl smart_joint_datatraits::CalibrationDataType for NoCalibration {}
14
15#[derive(Debug, Default, Clone)]
16pub struct WithCalibration {
17 rising: Option<f32>,
18 falling: Option<f32>,
19}
20
21impl From<WithCalibration> for joint_data::CalibrationData {
22 fn from(value: WithCalibration) -> Self {
23 Self {
24 rising: value.rising,
25 falling: value.falling,
26 }
27 }
28}
29
30impl smart_joint_datatraits::CalibrationDataType for WithCalibration {
31 fn simplify(&self, joint_builder: &mut JointBuilder) {
32 joint_builder.with_calibration_data(self.clone().into());
33 }
34}
35
36impl<Type, Axis, Dynamics, Limit, Mimic, SafetyController>
37 SmartJointBuilder<Type, Axis, NoCalibration, Dynamics, Limit, Mimic, SafetyController>
38where
39 Type: CalibrationAllowed,
40 Axis: smart_joint_datatraits::AxisDataType,
41 Dynamics: smart_joint_datatraits::DynamicsDataType,
42 Limit: smart_joint_datatraits::LimitDataType,
43 Mimic: smart_joint_datatraits::MimicDataType,
44 SafetyController: smart_joint_datatraits::SafetyControllerDataType,
45{
46 pub fn with_calibration(
47 self,
48 ) -> SmartJointBuilder<Type, Axis, WithCalibration, Dynamics, Limit, Mimic, SafetyController> {
49 SmartJointBuilder {
50 name: self.name,
51 joint_type: self.joint_type,
52 transform: self.transform,
53 axis: self.axis,
54 calibration: WithCalibration::default(),
55 dynamics: self.dynamics,
56 limit: self.limit,
57 mimic: self.mimic,
58 safety_controller: self.safety_controller,
59 }
60 }
61}
62
63impl<Type, Axis, Dynamics, Limit, Mimic, SafetyController>
64 SmartJointBuilder<Type, Axis, WithCalibration, Dynamics, Limit, Mimic, SafetyController>
65where
66 Type: CalibrationAllowed,
67 Axis: smart_joint_datatraits::AxisDataType,
68 Dynamics: smart_joint_datatraits::DynamicsDataType,
69 Limit: smart_joint_datatraits::LimitDataType,
70 Mimic: smart_joint_datatraits::MimicDataType,
71 SafetyController: smart_joint_datatraits::SafetyControllerDataType,
72{
73 pub fn set_rising_calibration(mut self, rising: f32) -> Self {
74 self.calibration.rising = Some(rising);
75 self
76 }
77
78 pub fn rising_calibration(&self) -> Option<f32> {
79 self.calibration.rising
80 }
81
82 pub fn set_falling_calibration(mut self, falling: f32) -> Self {
83 self.calibration.falling = Some(falling);
84 self
85 }
86
87 pub fn falling_calibration(&self) -> Option<f32> {
88 self.calibration.falling
89 }
90}