1use dynpick_force_torque_sensor::serialport;
2use dynpick_force_torque_sensor::{DynpickSensorBuilder, Sensitivity, Triplet};
3
4fn search_usb_sensor_path() -> Result<Option<String>, serialport::Error> {
5 let vendor_id = 0x10c4;
7 let product_id = 0xea60;
9
10 let ports = serialport::available_ports()?;
11 let path = ports
12 .into_iter()
13 .filter(move |port| match &port.port_type {
14 serialport::SerialPortType::UsbPort(usb) => {
16 usb.vid == vendor_id && usb.pid == product_id
17 }
18 _ => false,
19 })
20 .map(|sensor_port| sensor_port.port_name)
21 .next();
22
23 Ok(path)
24}
25
26fn main() {
27 println!("dynpick-force-torque-sensor demo started.");
28 println!("Make sure that the sensor is connected to the computer.");
29 println!("Make sure setting udev rule. See examples/setup_udev_rule.sh in detail.");
30
31 let path = match search_usb_sensor_path() {
33 Ok(Some(path)) => path,
34 Ok(None) => {
35 println!("No dynpick sensor is connected.");
36 return;
37 }
38 Err(e) => {
39 println!("{}", e);
40 return;
41 }
42 };
43 println!("Found a sensor. Path: {}", path);
44
45 let sensitivity = {
47 let force = Triplet::new(24.9, 24.6, 24.5);
48 let torque = Triplet::new(1664.7, 1639.7, 1638.0);
49 Sensitivity::new(force, torque)
50 };
51
52 let sensor = DynpickSensorBuilder::open(path)
54 .map(|b| b.set_sensitivity_manually(sensitivity))
55 .and_then(|b| b.build());
56 let mut sensor = match sensor {
57 Ok(s) => s,
58 Err(e) => {
59 println!("{}", e);
60 return;
61 }
62 };
63 println!("Successfully opened the sensor.");
64
65 match sensor.zeroed_next() {
67 Ok(_) => println!("Offset the sensor."),
68 Err(e) => {
69 println!("An error occurred during offset: {}", e);
70 return;
71 }
72 }
73
74 let measurement_count = 1000;
76 for i in 0..measurement_count {
77 std::thread::sleep(sensor.inner_port().timeout());
78
79 match sensor.update() {
80 Ok(w) => println!("[{}/{}] {:?}", i + 1, measurement_count, w),
81 Err(e) => println!("[{}/{}] {}", i + 1, measurement_count, e),
82 }
83 }
84
85 println!("Product info: {:?}", sensor.receive_product_info());
87
88 println!("dynpick-force-torque-sensor demo finished.");
89}