This commit is contained in:
Ayushya Chitransh 2026-04-22 16:24:18 +00:00 committed by GitHub
commit ebb76c2c14
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 27 additions and 20 deletions

1
.gitignore vendored
View file

@ -252,3 +252,4 @@ firmware/esp32-csi-node/build_firmware.batdata/
models/
demo_pointcloud.ply
demo_splats.json
.venv*

View file

@ -7979,6 +7979,7 @@ dependencies = [
"chrono",
"clap",
"futures-util",
"ruvector-mincut",
"serde",
"serde_json",
"tempfile",

View file

@ -25,7 +25,8 @@ use std::path::{Path, PathBuf};
const N_FEATURES: usize = 15;
/// Default class names for backward compatibility with old saved models.
const DEFAULT_CLASSES: &[&str] = &["absent", "present_still", "present_moving", "active"];
pub const CLASSES: &[&str] = &["absent", "present_still", "present_moving", "active"];
const DEFAULT_CLASSES: &[&str] = CLASSES;
/// Extract extended feature vector from a JSONL frame (features + raw amplitudes).
pub fn features_from_frame(frame: &serde_json::Value) -> [f64; N_FEATURES] {

View file

@ -1660,10 +1660,9 @@ async fn windows_wifi_task(state: SharedState, tick_ms: u64) {
// Populate persons from the sensing update (Kalman-smoothed via tracker).
let raw_persons = derive_pose_from_sensing(&update);
let mut last_tracker_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
);
s.last_tracker_instant = last_tracker_instant;
let mut last_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(&mut s.pose_tracker, &mut last_instant, raw_persons);
s.last_tracker_instant = last_instant;
if !tracked.is_empty() {
update.persons = Some(tracked);
}
@ -1798,10 +1797,9 @@ async fn windows_wifi_fallback_tick(state: &SharedState, seq: u32) {
let raw_persons = derive_pose_from_sensing(&update);
let mut last_tracker_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
);
s.last_tracker_instant = last_tracker_instant;
let mut last_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(&mut s.pose_tracker, &mut last_instant, raw_persons);
s.last_tracker_instant = last_instant;
if !tracked.is_empty() {
update.persons = Some(tracked);
}
@ -3615,9 +3613,12 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
};
// Feed field model calibration if active (use per-node history for ESP32).
let calib_history = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone());
if let Some(frame_history) = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone()) {
if let Some(ref mut fm) = s.field_model {
field_bridge::maybe_feed_calibration(fm, &frame_history);
if let Some(ref history) = calib_history {
field_bridge::maybe_feed_calibration(fm, history);
}
}
}
@ -3701,9 +3702,9 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
let raw_persons = derive_pose_from_sensing(&update);
let mut last_tracker_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
);
let mut last_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(&mut s.pose_tracker, &mut last_instant, raw_persons);
s.last_tracker_instant = last_instant;
s.last_tracker_instant = last_tracker_instant;
if !tracked.is_empty() {
update.persons = Some(tracked);
@ -3865,9 +3866,12 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
};
// Feed field model calibration if active (use per-node history for ESP32).
let calib_history = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone());
if let Some(frame_history) = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone()) {
if let Some(ref mut fm) = s.field_model {
field_bridge::maybe_feed_calibration(fm, &frame_history);
if let Some(ref history) = calib_history {
field_bridge::maybe_feed_calibration(fm, history);
}
}
}
@ -3913,9 +3917,9 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
let raw_persons = derive_pose_from_sensing(&update);
let mut last_tracker_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
);
let mut last_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(&mut s.pose_tracker, &mut last_instant, raw_persons);
s.last_tracker_instant = last_instant;
s.last_tracker_instant = last_tracker_instant;
if !tracked.is_empty() {
update.persons = Some(tracked);
@ -4051,9 +4055,9 @@ async fn simulated_data_task(state: SharedState, tick_ms: u64) {
// Populate persons from the sensing update (Kalman-smoothed via tracker).
let raw_persons = derive_pose_from_sensing(&update);
let mut last_tracker_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
);
let mut last_instant = s.last_tracker_instant.take();
let tracked = tracker_bridge::tracker_update(&mut s.pose_tracker, &mut last_instant, raw_persons);
s.last_tracker_instant = last_instant;
s.last_tracker_instant = last_tracker_instant;
if !tracked.is_empty() {
update.persons = Some(tracked);