Skip to content

Commit f975659

Browse files
committed
Fix photonvision version
1 parent 67b70ec commit f975659

File tree

2 files changed

+54
-36
lines changed

2 files changed

+54
-36
lines changed

crates/photonvision/src/lib.rs

+36-20
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,26 @@ use robotrs::time::get_time;
77
pub mod decode;
88
pub mod result;
99

10-
pub struct Camera {
11-
result: Subscriber<Vec<u8>>,
12-
driver_mode_pub: Publisher<bool>,
13-
driver_mode_sub: Subscriber<bool>,
14-
version: Subscriber<String>,
15-
save_input_img_pub: Publisher<i64>,
16-
save_output_img_pub: Publisher<i64>,
17-
save_input_img_sub: Subscriber<i64>,
18-
save_output_img_sub: Subscriber<i64>,
19-
pipeline_idx_request: Publisher<i64>,
20-
led_mode_request: Publisher<i64>,
21-
pipeline_idx_state: Subscriber<i64>,
22-
led_mode_state: Subscriber<i64>,
23-
heartbeat: Subscriber<i64>,
24-
camera_intrinsics: Subscriber<Vec<f64>>,
25-
camera_distortion: Subscriber<Vec<f64>>,
10+
pub struct Camera<'a> {
11+
result: Subscriber<'a, Vec<u8>>,
12+
driver_mode_pub: Publisher<'a, bool>,
13+
driver_mode_sub: Subscriber<'a, bool>,
14+
version: Subscriber<'a, String>,
15+
save_input_img_pub: Publisher<'a, i64>,
16+
save_output_img_pub: Publisher<'a, i64>,
17+
save_input_img_sub: Subscriber<'a, i64>,
18+
save_output_img_sub: Subscriber<'a, i64>,
19+
pipeline_idx_request: Publisher<'a, i64>,
20+
led_mode_request: Publisher<'a, i64>,
21+
pipeline_idx_state: Subscriber<'a, i64>,
22+
led_mode_state: Subscriber<'a, i64>,
23+
heartbeat: Subscriber<'a, i64>,
24+
camera_intrinsics: Subscriber<'a, Vec<f64>>,
25+
camera_distortion: Subscriber<'a, Vec<f64>>,
2626
}
2727

28-
impl Camera {
29-
pub fn new(instance: Instance, camera_name: &str) -> Self {
28+
impl<'a> Camera<'a> {
29+
pub fn new(instance: &'a Instance, camera_name: &str) -> Self {
3030
let save_input_img =
3131
instance.topic(&format!("/photonvision/{}/inputSaveImgCmd", camera_name));
3232
let save_output_img =
@@ -82,8 +82,24 @@ impl Camera {
8282
}
8383
}
8484

85-
pub fn get_result(&self) -> Result<PipelineResult, std::io::Error> {
85+
pub fn print_raw(&self) {
8686
let data = self.result.get();
87-
PipelineResult::decode(Cursor::new(data), get_time().as_micros() as i64)
87+
88+
for chunk in data.chunks(16) {
89+
for byte in chunk {
90+
print!("{:03} ", byte);
91+
}
92+
println!();
93+
}
94+
}
95+
96+
pub fn get_result(&self) -> Result<PipelineResult, std::io::Error> {
97+
let (data, time) = self.result.get_with_time();
98+
99+
let mut res = PipelineResult::decode(Cursor::new(data))?;
100+
101+
res.set_timestamp((time as f64) / 1e6 - res.latency / 1e3);
102+
103+
Ok(res)
88104
}
89105
}

crates/photonvision/src/result.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,44 @@ use std::{io::Read, time::Duration};
22

33
use nalgebra::{Quaternion, Translation3};
44

5-
use crate::decode::{decode_f32, decode_f64, decode_i16, decode_i32, decode_i64, decode_u8};
5+
use crate::decode::{decode_f64, decode_i16, decode_i32, decode_u8};
66

7+
#[derive(Debug)]
78
pub struct PipelineResult {
8-
pub capture_time: i64,
9-
pub publish_time: i64,
10-
pub receive_time: i64,
11-
pub sequence: i64,
9+
pub timestamp: f64,
10+
pub latency: f64,
1211
pub targets: Vec<Target>,
1312
pub position_estimate: PositionEstimateResult,
1413
}
1514

1615
impl PipelineResult {
17-
pub fn decode(mut reader: impl Read, receive_time: i64) -> Result<Self, std::io::Error> {
16+
pub fn decode(mut reader: impl Read) -> Result<Self, std::io::Error> {
1817
Ok(Self {
19-
sequence: decode_i64(&mut reader)?,
20-
capture_time: decode_i64(&mut reader)?,
21-
publish_time: decode_i64(&mut reader)?,
18+
latency: decode_f64(&mut reader)?,
2219
targets: (0..decode_u8(&mut reader)?)
2320
.map(|_| Target::decode(&mut reader))
2421
.collect::<Result<_, _>>()?,
2522
position_estimate: PositionEstimateResult::decode(&mut reader)?,
26-
receive_time,
23+
timestamp: 0.0,
2724
})
2825
}
2926

27+
pub(crate) fn set_timestamp(&mut self, timestamp: f64) {
28+
self.timestamp = timestamp;
29+
}
30+
3031
pub fn timestamp(&self) -> Duration {
31-
Duration::from_micros((self.receive_time - (self.publish_time - self.capture_time)) as u64)
32+
Duration::from_secs_f64(self.timestamp)
3233
}
3334
}
3435

36+
#[derive(Debug)]
3537
pub struct Target {
3638
pub yaw: f64,
3739
pub pitch: f64,
3840
pub area: f64,
3941
pub skew: f64,
4042
pub apriltag_id: i32,
41-
pub class_id: i32,
42-
pub confidence: f32,
4343
pub best_camera_to_target: Transform,
4444
pub alt_camera_to_target: Transform,
4545
pub pose_ambiguity: f64,
@@ -55,8 +55,6 @@ impl Target {
5555
area: decode_f64(&mut reader)?,
5656
skew: decode_f64(&mut reader)?,
5757
apriltag_id: decode_i32(&mut reader)?,
58-
class_id: decode_i32(&mut reader)?,
59-
confidence: decode_f32(&mut reader)?,
6058
best_camera_to_target: Transform::decode(&mut reader)?,
6159
alt_camera_to_target: Transform::decode(&mut reader)?,
6260
pose_ambiguity: decode_f64(&mut reader)?,
@@ -70,6 +68,7 @@ impl Target {
7068
}
7169
}
7270

71+
#[derive(Debug)]
7372
pub struct Corner {
7473
pub x: f64,
7574
pub y: f64,
@@ -84,6 +83,7 @@ impl Corner {
8483
}
8584
}
8685

86+
#[derive(Debug)]
8787
pub struct Transform {
8888
pub translation: Translation3<f64>,
8989
pub rotation: Quaternion<f64>,
@@ -107,11 +107,13 @@ impl Transform {
107107
}
108108
}
109109

110+
#[derive(Debug)]
110111
pub struct PositionEstimateResult {
111112
pub apriltag_ids: Vec<i16>,
112113
pub estimate: Option<PositionEstimate>,
113114
}
114115

116+
#[derive(Debug)]
115117
pub struct PositionEstimate {
116118
pub best: Transform,
117119
pub best_reprojection_err: f64,
@@ -136,7 +138,7 @@ impl PositionEstimateResult {
136138
pub fn decode(mut reader: impl Read) -> Result<Self, std::io::Error> {
137139
Ok(Self {
138140
estimate: {
139-
if decode_u8(&mut reader)? == 1 {
141+
if dbg!(decode_u8(&mut reader)?) == 1 {
140142
Some(PositionEstimate::decode(&mut reader)?)
141143
} else {
142144
None

0 commit comments

Comments
 (0)