Skip to main content

piper_protocol/
constants.rs

1//! 硬件相关常量定义
2//!
3//! 集中定义所有硬件相关的常量,避免在代码中散落"魔法数"。
4
5/// Gripper 位置归一化比例尺
6///
7/// 将硬件值(mm)转换为归一化值(0.0-1.0)
8pub const GRIPPER_POSITION_SCALE: f64 = 100.0;
9
10/// Gripper 力度归一化比例尺
11///
12/// 将硬件值(N·m)转换为归一化值(0.0-1.0)
13pub const GRIPPER_FORCE_SCALE: f64 = 10.0;
14
15// 重新导出 CAN ID 常量(从 ids.rs)
16pub use crate::ids::{
17    ID_CONTROL_MODE, ID_EMERGENCY_STOP, ID_GRIPPER_CONTROL, ID_JOINT_CONTROL_12,
18    ID_JOINT_CONTROL_34, ID_JOINT_CONTROL_56, ID_MIT_CONTROL_BASE, ID_MOTOR_ENABLE,
19};
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_gripper_normalization() {
27        // 验证归一化常量的正确性
28        assert_eq!(GRIPPER_POSITION_SCALE, 100.0);
29        assert_eq!(GRIPPER_FORCE_SCALE, 10.0);
30
31        // 测试归一化
32        let travel_mm = 50.0;
33        let normalized = travel_mm / GRIPPER_POSITION_SCALE;
34        assert_eq!(normalized, 0.5);
35
36        let torque_nm = 5.0;
37        let normalized = torque_nm / GRIPPER_FORCE_SCALE;
38        assert_eq!(normalized, 0.5);
39    }
40
41    #[test]
42    fn test_can_id_constants() {
43        // 验证 CAN ID 常量的正确性
44        assert_eq!(ID_MOTOR_ENABLE, 0x471);
45        assert_eq!(ID_MIT_CONTROL_BASE, 0x15A);
46        assert_eq!(ID_JOINT_CONTROL_12, 0x155);
47        assert_eq!(ID_JOINT_CONTROL_34, 0x156);
48        assert_eq!(ID_JOINT_CONTROL_56, 0x157);
49        assert_eq!(ID_CONTROL_MODE, 0x151);
50        assert_eq!(ID_EMERGENCY_STOP, 0x150);
51        assert_eq!(ID_GRIPPER_CONTROL, 0x159);
52    }
53}