From 6623274b52ea50ce7d4ce46530a3aa2ced77a71e Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Tue, 5 Nov 2024 11:16:39 +0100 Subject: [PATCH 1/7] Add urdf-visualization for rerun --- examples/piper/dataflow.yml | 33 ++++++++ node-hub/dora-rerun/Cargo.toml | 1 + node-hub/dora-rerun/src/main.rs | 134 ++++++++++++++++++++++++++++++-- 3 files changed, 162 insertions(+), 6 deletions(-) create mode 100644 examples/piper/dataflow.yml diff --git a/examples/piper/dataflow.yml b/examples/piper/dataflow.yml new file mode 100644 index 000000000..1863a53ae --- /dev/null +++ b/examples/piper/dataflow.yml @@ -0,0 +1,33 @@ +nodes: + - id: piper_left + path: /home/agilex/1ms.ai/piper_sdk/dora_piper.py + _unstable_deploy: + machine: piper + inputs: + tick: dora/timer/millis/20 + outputs: + - jointstate + env: + CAN_BUS: can_left + + - id: piper_right + path: /home/agilex/1ms.ai/piper_sdk/dora_piper.py + _unstable_deploy: + machine: piper + inputs: + tick: dora/timer/millis/20 + outputs: + - jointstate + env: + CAN_BUS: can_right + + - id: rerun + path: dora-rerun + inputs: + jointstate_piper_left: piper_left/jointstate + jointstate_piper_right: piper_right/jointstate + env: + piper_left.urdf: /home/peter/Documents/work/dora/node-hub/dora-rerun/assets/piper_left.urdf + piper_right.urdf: /home/peter/Documents/work/dora/node-hub/dora-rerun/assets/piper_right.urdf + piper_left.transform: 0 0.2 0 + piper_right.transform: 0 -0.2 0 diff --git a/node-hub/dora-rerun/Cargo.toml b/node-hub/dora-rerun/Cargo.toml index fc87ed757..dd3c78206 100644 --- a/node-hub/dora-rerun/Cargo.toml +++ b/node-hub/dora-rerun/Cargo.toml @@ -15,3 +15,4 @@ eyre = "0.6.8" tokio = { version = "1.24.2", features = ["rt"] } rerun = { version = "0.18.2", features = ["web_viewer", "image"] } ndarray = "0.15.6" +k = "0.32" diff --git a/node-hub/dora-rerun/src/main.rs b/node-hub/dora-rerun/src/main.rs index c0c2cc048..df1d29969 100644 --- a/node-hub/dora-rerun/src/main.rs +++ b/node-hub/dora-rerun/src/main.rs @@ -1,18 +1,69 @@ //! Demonstrates the most barebone usage of the Rerun SDK. -use std::env::VarError; +use std::{collections::HashMap, env::VarError}; use dora_node_api::{ arrow::{ - array::{AsArray, StringArray, StructArray, UInt8Array}, + array::{AsArray, Float32Array, StringArray, StructArray, UInt8Array}, datatypes::Float32Type, }, DoraNode, Event, Parameter, }; use eyre::{eyre, Context, ContextCompat, Result}; use rerun::{ - components::ImageBuffer, external::re_types::ArrowBuffer, ImageFormat, SpawnOptions, Text, + components::{ImageBuffer, RotationAxisAngle}, + external::re_types::ArrowBuffer, + Angle, ImageFormat, Rotation3D, SpawnOptions, Text, Vec3D, }; +pub struct MyIntersperse { + iterator: I, + sep: T, + nxt: Option, +} + +pub trait MyIntersperseExt: Iterator { + fn my_intersperse(self, sep: T) -> MyIntersperse; +} + +impl> MyIntersperseExt for I { + fn my_intersperse(mut self, sep: T) -> MyIntersperse { + let next = self.next(); + MyIntersperse { + iterator: self, + sep: sep.clone(), + nxt: next, + } + } +} + +impl> Iterator for MyIntersperse { + type Item = T; + fn next(&mut self) -> Option { + if let Some(item) = self.nxt.take() { + Some(item) + } else { + self.nxt = self.iterator.next(); + if self.nxt.is_some() { + Some(self.sep.clone()) + } else { + None + } + } + } +} + +fn get_entity_path(link: &k::Node, urdf_path: &str) -> String { + let mut ancestors: Vec<_> = link + .iter_ancestors() + .map(|node| node.link().as_ref().unwrap().name.clone()) + .collect(); + ancestors.push(String::from(urdf_path)); + ancestors + .into_iter() + .rev() + .my_intersperse(String::from("/")) + .collect() +} fn main() -> Result<()> { // rerun `serve()` requires to have a running Tokio runtime in the current context. @@ -21,9 +72,6 @@ fn main() -> Result<()> { .expect("Failed to create tokio runtime"); let _guard = rt.enter(); - let (_node, mut events) = - DoraNode::init_from_env().context("Could not initialize dora node")?; - // Limit memory usage let mut options = SpawnOptions::default(); @@ -43,6 +91,40 @@ fn main() -> Result<()> { .spawn_opts(&options, None) .context("Could not spawn rerun visualization")?; + // Get all env variable that start with URDF_ + let urdfs = std::env::vars() + .filter(|(key, _)| key.ends_with(".urdf")) + .collect::>(); + let mut chains = HashMap::new(); + for (key, urdf_path) in urdfs { + let chain = k::Chain::::from_urdf_file(&urdf_path).unwrap(); + + let transform = key.replace(".urdf", ".transform"); + rec.log_file_from_path(&urdf_path, None, false).unwrap(); + // Get transform by replacing URDF_ with TRANSFORM_ + if let Ok(transform) = std::env::var(transform) { + let transform = transform + .split(' ') + .map(|x| x.parse::().unwrap()) + .collect::>(); + rec.log( + key.clone(), + &rerun::Transform3D::from_translation_rotation( + [transform[0], transform[1], transform[2]], + Rotation3D::AxisAngle(RotationAxisAngle::new( + [0., 0., 0.], + Angle::from_degrees(0.0), + )), + ), + ) + .unwrap(); + println!("{}: {}", key, urdf_path); + chains.insert(key, chain); + } + } + let (_node, mut events) = + DoraNode::init_from_env().context("Could not initialize dora node")?; + match std::env::var("README") { Ok(readme) => { readme @@ -199,6 +281,46 @@ fn main() -> Result<()> { &rerun::Boxes2D::from_centers_and_sizes(centers, sizes).with_labels(labels), ) .wrap_err("Could not log Boxes2D")?; + } else if id.as_str().contains("jointstate") { + let buffer: &Float32Array = data.as_any().downcast_ref().unwrap(); + let mut positions: Vec = buffer.values().to_vec(); + positions.push(0.); + positions.push(0.); + + // Set position 1 between 0 and pi + let mut id = id.as_str().replace("jointstate_", ""); + id.push_str(".urdf"); + if let Some(chain) = &chains.get(&id) { + chain.set_joint_positions_clamped(&positions); + + chain.update_transforms(); + chain.update_link_transforms(); + + for link_name in chain.iter_links().map(|link| link.name.clone()) { + let link = chain.find_link(&link_name).unwrap(); + let entity_path = get_entity_path(&link, &id); + let link_to_world = link.world_transform().unwrap(); + let link_to_parent = if link_name != "base_link" { + let parent = link.parent().unwrap(); + parent.world_transform().unwrap().inv_mul(&link_to_world) + } else { + link_to_world + }; + let link_to_parent_mat = link_to_parent.to_matrix(); + + let trans = link_to_parent_mat.column(3); + let trans = trans.as_slice(); + let quat = link_to_parent.rotation.quaternion(); + rec.log( + entity_path, + &rerun::Transform3D::from_translation_rotation( + Vec3D::new(trans[0], trans[1], trans[2]), + rerun::Quaternion::from([quat.i, quat.j, quat.k, quat.w]), + ), + ) + .unwrap(); + } + } } } } From da044e9d1c2ce6e7ea798ffd07cfab4ef6f34d66 Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Wed, 6 Nov 2024 08:04:43 +0100 Subject: [PATCH 2/7] Bump rerun to version 0.19 --- node-hub/dora-rerun/Cargo.toml | 2 +- node-hub/dora-rerun/src/main.rs | 103 ++++++++++++++++++++------------ 2 files changed, 65 insertions(+), 40 deletions(-) diff --git a/node-hub/dora-rerun/Cargo.toml b/node-hub/dora-rerun/Cargo.toml index dd3c78206..fe4f2391b 100644 --- a/node-hub/dora-rerun/Cargo.toml +++ b/node-hub/dora-rerun/Cargo.toml @@ -13,6 +13,6 @@ repository.workspace = true dora-node-api = { workspace = true, features = ["tracing"] } eyre = "0.6.8" tokio = { version = "1.24.2", features = ["rt"] } -rerun = { version = "0.18.2", features = ["web_viewer", "image"] } +rerun = { version = "0.19.0", features = ["web_viewer", "image"] } ndarray = "0.15.6" k = "0.32" diff --git a/node-hub/dora-rerun/src/main.rs b/node-hub/dora-rerun/src/main.rs index df1d29969..2ef4e82ed 100644 --- a/node-hub/dora-rerun/src/main.rs +++ b/node-hub/dora-rerun/src/main.rs @@ -10,10 +10,11 @@ use dora_node_api::{ DoraNode, Event, Parameter, }; use eyre::{eyre, Context, ContextCompat, Result}; +use k::Chain; use rerun::{ components::{ImageBuffer, RotationAxisAngle}, external::re_types::ArrowBuffer, - Angle, ImageFormat, Rotation3D, SpawnOptions, Text, Vec3D, + Angle, ImageFormat, RecordingStream, Rotation3D, SpawnOptions, Text, Vec3D, }; pub struct MyIntersperse { iterator: I, @@ -65,6 +66,46 @@ fn get_entity_path(link: &k::Node, urdf_path: &str) -> String { .collect() } +fn update_visualization( + chain: &Chain, + rec: &RecordingStream, + id: &str, + positions: &[f32], +) -> Result<()> { + chain.set_joint_positions_clamped(&positions); + + chain.update_transforms(); + chain.update_link_transforms(); + + for link_name in chain.iter_links().map(|link| link.name.clone()) { + let link = chain.find_link(&link_name).unwrap(); + let entity_path = get_entity_path(&link, &id); + let link_to_world = link + .world_transform() + .context("Could not get world transform")?; + let link_to_parent = if link_name != "base_link" { + let parent = link.parent().unwrap(); + parent.world_transform().unwrap().inv_mul(&link_to_world) + } else { + link_to_world + }; + let link_to_parent_mat = link_to_parent.to_matrix(); + + let trans = link_to_parent_mat.column(3); + let trans = trans.as_slice(); + let quat = link_to_parent.rotation.quaternion(); + rec.log( + entity_path, + &rerun::Transform3D::from_translation_rotation( + Vec3D::new(trans[0], trans[1], trans[2]), + rerun::Quaternion::from([quat.i, quat.j, quat.k, quat.w]), + ), + ) + .context("Could not log transform")?; + } + Ok(()) +} + fn main() -> Result<()> { // rerun `serve()` requires to have a running Tokio runtime in the current context. let rt = tokio::runtime::Builder::new_current_thread() @@ -93,13 +134,14 @@ fn main() -> Result<()> { // Get all env variable that start with URDF_ let urdfs = std::env::vars() - .filter(|(key, _)| key.ends_with(".urdf")) + .filter(|(key, _)| key.ends_with("_urdf")) .collect::>(); let mut chains = HashMap::new(); for (key, urdf_path) in urdfs { + let path = key.replace("_urdf", ".urdf"); let chain = k::Chain::::from_urdf_file(&urdf_path).unwrap(); - let transform = key.replace(".urdf", ".transform"); + let transform = key.replace("_urdf", "_transform"); rec.log_file_from_path(&urdf_path, None, false).unwrap(); // Get transform by replacing URDF_ with TRANSFORM_ if let Ok(transform) = std::env::var(transform) { @@ -108,7 +150,7 @@ fn main() -> Result<()> { .map(|x| x.parse::().unwrap()) .collect::>(); rec.log( - key.clone(), + path.clone(), &rerun::Transform3D::from_translation_rotation( [transform[0], transform[1], transform[2]], Rotation3D::AxisAngle(RotationAxisAngle::new( @@ -118,8 +160,7 @@ fn main() -> Result<()> { ), ) .unwrap(); - println!("{}: {}", key, urdf_path); - chains.insert(key, chain); + chains.insert(path, chain); } } let (_node, mut events) = @@ -282,45 +323,29 @@ fn main() -> Result<()> { ) .wrap_err("Could not log Boxes2D")?; } else if id.as_str().contains("jointstate") { - let buffer: &Float32Array = data.as_any().downcast_ref().unwrap(); + let buffer: &Float32Array = data + .as_any() + .downcast_ref() + .context("data is not float32")?; let mut positions: Vec = buffer.values().to_vec(); - positions.push(0.); - positions.push(0.); - // Set position 1 between 0 and pi + // Match file name let mut id = id.as_str().replace("jointstate_", ""); id.push_str(".urdf"); - if let Some(chain) = &chains.get(&id) { - chain.set_joint_positions_clamped(&positions); - - chain.update_transforms(); - chain.update_link_transforms(); - - for link_name in chain.iter_links().map(|link| link.name.clone()) { - let link = chain.find_link(&link_name).unwrap(); - let entity_path = get_entity_path(&link, &id); - let link_to_world = link.world_transform().unwrap(); - let link_to_parent = if link_name != "base_link" { - let parent = link.parent().unwrap(); - parent.world_transform().unwrap().inv_mul(&link_to_world) - } else { - link_to_world - }; - let link_to_parent_mat = link_to_parent.to_matrix(); - - let trans = link_to_parent_mat.column(3); - let trans = trans.as_slice(); - let quat = link_to_parent.rotation.quaternion(); - rec.log( - entity_path, - &rerun::Transform3D::from_translation_rotation( - Vec3D::new(trans[0], trans[1], trans[2]), - rerun::Quaternion::from([quat.i, quat.j, quat.k, quat.w]), - ), - ) - .unwrap(); + + let chain = chains.get(&id).unwrap(); + let dof = chain.dof(); + + // Truncate or pad positions to match the chain's dof + if dof < positions.len() { + positions.truncate(dof); + } else { + for _ in 0..(dof - positions.len()) { + positions.push(0.); } } + + update_visualization(&chain, &rec, &id, &positions)?; } } } From ab5bde256bf6045f11253edbf65812a442ce16d9 Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Thu, 7 Nov 2024 13:20:40 +0100 Subject: [PATCH 3/7] Make dora rerun easier to read --- node-hub/dora-rerun/README.md | 22 +++++++ node-hub/dora-rerun/pyproject.toml | 4 ++ node-hub/dora-rerun/src/main.rs | 95 +----------------------------- node-hub/dora-rerun/src/urdf.rs | 95 ++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 92 deletions(-) create mode 100644 node-hub/dora-rerun/src/urdf.rs diff --git a/node-hub/dora-rerun/README.md b/node-hub/dora-rerun/README.md index 83c736e73..7e3305e6d 100644 --- a/node-hub/dora-rerun/README.md +++ b/node-hub/dora-rerun/README.md @@ -33,6 +33,28 @@ cargo install --git https://github.com/dora-rs/dora dora-rerun - image: UInt8Array + metadata { "width": int, "height": int, "encoding": str } - boxes2D: StructArray + metadata { "format": str } - text: StringArray +- jointstate: Float32Array + +## (Experimental) For plotting 3D URDF + +```bash +pip install git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git +``` + +Make sure to name the dataflow as follows: + +```yaml +- id: rerun + path: dora-rerun + inputs: + jointstate_: /jointstate + env: + _urdf: /path/to/.urdf + _transform: 0 0.3 0 +``` + +> [!IMPORTANT] +> Make sure that the urdf file name correspond to your dataflow object name otherwise, it will not be able to link to the corresponding entity. ## Configurations diff --git a/node-hub/dora-rerun/pyproject.toml b/node-hub/dora-rerun/pyproject.toml index c0f314b2a..52e313479 100644 --- a/node-hub/dora-rerun/pyproject.toml +++ b/node-hub/dora-rerun/pyproject.toml @@ -4,3 +4,7 @@ build-backend = "maturin" [project] name = "dora-rerun" +dependencies = [ + 'rerun_sdk==0.19.1', + "git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git", +] diff --git a/node-hub/dora-rerun/src/main.rs b/node-hub/dora-rerun/src/main.rs index 2ef4e82ed..d1a1ef8b7 100644 --- a/node-hub/dora-rerun/src/main.rs +++ b/node-hub/dora-rerun/src/main.rs @@ -1,6 +1,7 @@ //! Demonstrates the most barebone usage of the Rerun SDK. use std::{collections::HashMap, env::VarError}; +pub mod urdf; use dora_node_api::{ arrow::{ @@ -10,101 +11,11 @@ use dora_node_api::{ DoraNode, Event, Parameter, }; use eyre::{eyre, Context, ContextCompat, Result}; -use k::Chain; use rerun::{ components::{ImageBuffer, RotationAxisAngle}, external::re_types::ArrowBuffer, - Angle, ImageFormat, RecordingStream, Rotation3D, SpawnOptions, Text, Vec3D, + Angle, ImageFormat, Rotation3D, SpawnOptions, Text, }; -pub struct MyIntersperse { - iterator: I, - sep: T, - nxt: Option, -} - -pub trait MyIntersperseExt: Iterator { - fn my_intersperse(self, sep: T) -> MyIntersperse; -} - -impl> MyIntersperseExt for I { - fn my_intersperse(mut self, sep: T) -> MyIntersperse { - let next = self.next(); - MyIntersperse { - iterator: self, - sep: sep.clone(), - nxt: next, - } - } -} - -impl> Iterator for MyIntersperse { - type Item = T; - fn next(&mut self) -> Option { - if let Some(item) = self.nxt.take() { - Some(item) - } else { - self.nxt = self.iterator.next(); - if self.nxt.is_some() { - Some(self.sep.clone()) - } else { - None - } - } - } -} - -fn get_entity_path(link: &k::Node, urdf_path: &str) -> String { - let mut ancestors: Vec<_> = link - .iter_ancestors() - .map(|node| node.link().as_ref().unwrap().name.clone()) - .collect(); - ancestors.push(String::from(urdf_path)); - ancestors - .into_iter() - .rev() - .my_intersperse(String::from("/")) - .collect() -} - -fn update_visualization( - chain: &Chain, - rec: &RecordingStream, - id: &str, - positions: &[f32], -) -> Result<()> { - chain.set_joint_positions_clamped(&positions); - - chain.update_transforms(); - chain.update_link_transforms(); - - for link_name in chain.iter_links().map(|link| link.name.clone()) { - let link = chain.find_link(&link_name).unwrap(); - let entity_path = get_entity_path(&link, &id); - let link_to_world = link - .world_transform() - .context("Could not get world transform")?; - let link_to_parent = if link_name != "base_link" { - let parent = link.parent().unwrap(); - parent.world_transform().unwrap().inv_mul(&link_to_world) - } else { - link_to_world - }; - let link_to_parent_mat = link_to_parent.to_matrix(); - - let trans = link_to_parent_mat.column(3); - let trans = trans.as_slice(); - let quat = link_to_parent.rotation.quaternion(); - rec.log( - entity_path, - &rerun::Transform3D::from_translation_rotation( - Vec3D::new(trans[0], trans[1], trans[2]), - rerun::Quaternion::from([quat.i, quat.j, quat.k, quat.w]), - ), - ) - .context("Could not log transform")?; - } - Ok(()) -} fn main() -> Result<()> { // rerun `serve()` requires to have a running Tokio runtime in the current context. @@ -345,7 +256,7 @@ fn main() -> Result<()> { } } - update_visualization(&chain, &rec, &id, &positions)?; + urdf::update_visualization(&chain, &rec, &id, &positions)?; } } } diff --git a/node-hub/dora-rerun/src/urdf.rs b/node-hub/dora-rerun/src/urdf.rs new file mode 100644 index 000000000..5aa71a6c2 --- /dev/null +++ b/node-hub/dora-rerun/src/urdf.rs @@ -0,0 +1,95 @@ +use eyre::{Context, ContextCompat, Result}; +use k::Chain; +use rerun::{RecordingStream, Vec3D}; +pub struct MyIntersperse { + iterator: I, + sep: T, + nxt: Option, +} + +pub trait MyIntersperseExt: Iterator { + fn my_intersperse(self, sep: T) -> MyIntersperse; +} + +impl> MyIntersperseExt for I { + fn my_intersperse(mut self, sep: T) -> MyIntersperse { + let next = self.next(); + MyIntersperse { + iterator: self, + sep: sep.clone(), + nxt: next, + } + } +} + +impl> Iterator for MyIntersperse { + type Item = T; + fn next(&mut self) -> Option { + if let Some(item) = self.nxt.take() { + Some(item) + } else { + self.nxt = self.iterator.next(); + if self.nxt.is_some() { + Some(self.sep.clone()) + } else { + None + } + } + } +} + +fn get_entity_path(link: &k::Node, urdf_path: &str) -> String { + let mut ancestors: Vec<_> = link + .iter_ancestors() + .map(|node| node.link().as_ref().unwrap().name.clone()) + .collect(); + ancestors.push(String::from(urdf_path)); + ancestors + .into_iter() + .rev() + .my_intersperse(String::from("/")) + .collect() +} + +pub fn update_visualization( + chain: &Chain, + rec: &RecordingStream, + id: &str, + positions: &[f32], +) -> Result<()> { + chain.set_joint_positions_clamped(&positions); + + chain.update_transforms(); + chain.update_link_transforms(); + + for link_name in chain.iter_links().map(|link| link.name.clone()) { + let link = chain.find_link(&link_name).context("Could not find link")?; + let entity_path = get_entity_path(&link, &id); + let link_to_world = link + .world_transform() + .context("Could not get world transform")?; + let link_to_parent = if link_name != "base_link" { + let parent = link.parent().context("could not get parent")?; + parent + .world_transform() + .context("Could not get world transform")? + .inv_mul(&link_to_world) + } else { + link_to_world + }; + let link_to_parent_mat = link_to_parent.to_matrix(); + + let trans = link_to_parent_mat.column(3); + let trans = trans.as_slice(); + let quat = link_to_parent.rotation.quaternion(); + rec.log( + entity_path, + &rerun::Transform3D::from_translation_rotation( + Vec3D::new(trans[0], trans[1], trans[2]), + rerun::Quaternion::from([quat.i, quat.j, quat.k, quat.w]), + ), + ) + .context("Could not log transform")?; + } + Ok(()) +} From 3dfcbabf5bf394a622ba1e797c474d6e098a782a Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Thu, 7 Nov 2024 13:29:15 +0100 Subject: [PATCH 4/7] Add piper rerun example --- examples/piper/assets/piper_left.urdf | 568 ++++++++++++++++++++ examples/piper/assets/piper_left_pred.urdf | 568 ++++++++++++++++++++ examples/piper/assets/piper_right.urdf | 568 ++++++++++++++++++++ examples/piper/assets/piper_right_pred.urdf | 568 ++++++++++++++++++++ examples/piper/piper_inference.py | 229 ++++++++ examples/piper/play_inference.yml | 22 + 6 files changed, 2523 insertions(+) create mode 100644 examples/piper/assets/piper_left.urdf create mode 100644 examples/piper/assets/piper_left_pred.urdf create mode 100644 examples/piper/assets/piper_right.urdf create mode 100644 examples/piper/assets/piper_right_pred.urdf create mode 100644 examples/piper/piper_inference.py create mode 100644 examples/piper/play_inference.yml diff --git a/examples/piper/assets/piper_left.urdf b/examples/piper/assets/piper_left.urdf new file mode 100644 index 000000000..99fde57d9 --- /dev/null +++ b/examples/piper/assets/piper_left.urdf @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/piper/assets/piper_left_pred.urdf b/examples/piper/assets/piper_left_pred.urdf new file mode 100644 index 000000000..a74ed6c3c --- /dev/null +++ b/examples/piper/assets/piper_left_pred.urdf @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/piper/assets/piper_right.urdf b/examples/piper/assets/piper_right.urdf new file mode 100644 index 000000000..99fde57d9 --- /dev/null +++ b/examples/piper/assets/piper_right.urdf @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/piper/assets/piper_right_pred.urdf b/examples/piper/assets/piper_right_pred.urdf new file mode 100644 index 000000000..2541f63f1 --- /dev/null +++ b/examples/piper/assets/piper_right_pred.urdf @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/piper/piper_inference.py b/examples/piper/piper_inference.py new file mode 100644 index 000000000..0a970c97a --- /dev/null +++ b/examples/piper/piper_inference.py @@ -0,0 +1,229 @@ +from dora import Node + +node = Node() + +import numpy as np + +pred = np.array( + [ + [ + [ + -0.0737, + -0.0447, + 0.2695, + -0.0054, + -0.0461, + -0.0258, + 0.1357, + 0.1943, + 0.0625, + 0.1270, + -0.0259, + -0.0195, + 0.0981, + 0.1021, + ], + [ + -0.0757, + -0.0332, + 0.2793, + -0.0156, + -0.0374, + -0.0193, + 0.1924, + 0.2119, + 0.0654, + 0.1377, + 0.0020, + -0.0076, + 0.0884, + 0.1143, + ], + [ + -0.0771, + -0.0282, + 0.2832, + -0.0225, + -0.0378, + -0.0156, + 0.1992, + 0.2324, + 0.0674, + 0.1416, + 0.0088, + -0.0056, + 0.0918, + 0.1191, + ], + [ + -0.0825, + -0.0325, + 0.2832, + -0.0210, + -0.0420, + -0.0204, + 0.1904, + 0.2256, + 0.0610, + 0.1475, + 0.0068, + -0.0071, + 0.0879, + 0.1172, + ], + [ + -0.0825, + -0.0344, + 0.2852, + -0.0208, + -0.0405, + -0.0167, + 0.1777, + 0.2109, + 0.0518, + 0.1621, + 0.0059, + -0.0017, + 0.0854, + 0.1182, + ], + [ + -0.0840, + -0.0332, + 0.2871, + -0.0226, + -0.0417, + -0.0159, + 0.1748, + 0.2080, + 0.0476, + 0.1641, + 0.0000, + 0.0010, + 0.0864, + 0.1196, + ], + [ + -0.0879, + -0.0234, + 0.2969, + -0.0305, + -0.0396, + -0.0132, + 0.1904, + 0.2275, + 0.0474, + 0.1758, + 0.0137, + 0.0020, + 0.0874, + 0.1245, + ], + [ + -0.0884, + -0.0225, + 0.3008, + -0.0339, + -0.0386, + -0.0118, + 0.1904, + 0.2275, + 0.0469, + 0.1855, + 0.0186, + -0.0017, + 0.0879, + 0.1270, + ], + [ + -0.0918, + -0.0081, + 0.3066, + -0.0449, + -0.0325, + -0.0074, + 0.2021, + 0.2363, + 0.0454, + 0.1953, + 0.0332, + 0.0015, + 0.0942, + 0.1348, + ], + [ + -0.0938, + -0.0249, + 0.3027, + -0.0366, + -0.0396, + -0.0125, + 0.1777, + 0.2207, + 0.0376, + 0.1953, + 0.0146, + -0.0017, + 0.0884, + 0.1279, + ], + [ + -0.0938, + -0.0229, + 0.3047, + -0.0393, + -0.0386, + -0.0121, + 0.1680, + 0.2256, + 0.0330, + 0.2002, + 0.0127, + 0.0015, + 0.0913, + 0.1260, + ], + [ + -0.0977, + -0.0206, + 0.3105, + -0.0405, + -0.0359, + -0.0161, + 0.1680, + 0.2178, + 0.0295, + 0.2129, + 0.0146, + -0.0085, + 0.0923, + 0.1309, + ], + [ + -0.0938, + -0.0311, + 0.3027, + -0.0334, + -0.0386, + -0.0188, + 0.1377, + 0.2139, + 0.0227, + 0.2031, + 0.0039, + -0.0020, + 0.0913, + 0.1221, + ], + ] + ] +) + +import time +import pyarrow as pa + +data = pred[0] +for joint in data: + node.send_output("jointstate_left", pa.array(joint[:7], type=pa.float32())) + node.send_output("jointstate_right", pa.array(joint[7:], type=pa.float32())) + time.sleep(0.1) diff --git a/examples/piper/play_inference.yml b/examples/piper/play_inference.yml new file mode 100644 index 000000000..48b1cee3f --- /dev/null +++ b/examples/piper/play_inference.yml @@ -0,0 +1,22 @@ +nodes: + - id: piper + path: piper_inference.py + inputs: + tick: dora/timer/millis/20 + outputs: + - jointstate_left + - jointstate_right + env: + CAN_BUS: can_left + + - id: rerun + build: wget + path: dora-rerun + inputs: + jointstate_piper_left: piper/jointstate_left + jointstate_piper_right: piper/jointstate_right + env: + piper_left_urdf: assets/piper_left.urdf # Make sure to download assets/meshes from https://github.com/agilexrobotics/Piper_ros/tree/4f22c61f96b8fb3ef3f937b99b63edb697caadf0/src/piper_description/meshes and put them in the assets folder + piper_right_urdf: assets/piper_right.urdf # Make sure to download assets/meshes from https://github.com/agilexrobotics/Piper_ros/tree/4f22c61f96b8fb3ef3f937b99b63edb697caadf0/src/piper_description/meshes and put them in the assets folder + piper_left_transform: 0 0.2 0 + piper_right_transform: 0 -0.2 0 From 6475a3fe68885983c80e2292c00d548238cd8a5e Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Thu, 7 Nov 2024 16:15:18 +0100 Subject: [PATCH 5/7] Make dora-rerun pip installable and python-abi3 --- node-hub/dora-rerun/Cargo.toml | 14 ++ node-hub/dora-rerun/pyproject.toml | 7 +- node-hub/dora-rerun/src/lib.rs | 261 ++++++++++++++++++++++++++++ node-hub/dora-rerun/src/main.rs | 266 +---------------------------- node-hub/dora-rerun/src/urdf.rs | 46 ++++- 5 files changed, 328 insertions(+), 266 deletions(-) create mode 100644 node-hub/dora-rerun/src/lib.rs diff --git a/node-hub/dora-rerun/Cargo.toml b/node-hub/dora-rerun/Cargo.toml index fe4f2391b..8cdf24249 100644 --- a/node-hub/dora-rerun/Cargo.toml +++ b/node-hub/dora-rerun/Cargo.toml @@ -9,6 +9,10 @@ repository.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = [] +python = ["pyo3"] + [dependencies] dora-node-api = { workspace = true, features = ["tracing"] } eyre = "0.6.8" @@ -16,3 +20,13 @@ tokio = { version = "1.24.2", features = ["rt"] } rerun = { version = "0.19.0", features = ["web_viewer", "image"] } ndarray = "0.15.6" k = "0.32" +pyo3 = { workspace = true, features = [ + "extension-module", + "abi3", +], optional = true } + + +[lib] +name = "dora_rerun" +path = "src/lib.rs" +crate-type = ["rlib", "cdylib"] diff --git a/node-hub/dora-rerun/pyproject.toml b/node-hub/dora-rerun/pyproject.toml index 52e313479..432362263 100644 --- a/node-hub/dora-rerun/pyproject.toml +++ b/node-hub/dora-rerun/pyproject.toml @@ -6,5 +6,10 @@ build-backend = "maturin" name = "dora-rerun" dependencies = [ 'rerun_sdk==0.19.1', - "git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git", + # "rerun-loader-urdf @ git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git", ] + +scripts = { "dora-rerun" = "dora_rerun:py_main" } + +[tool.maturin] +features = ["pyo3/extension-module"] diff --git a/node-hub/dora-rerun/src/lib.rs b/node-hub/dora-rerun/src/lib.rs new file mode 100644 index 000000000..f1f210cbd --- /dev/null +++ b/node-hub/dora-rerun/src/lib.rs @@ -0,0 +1,261 @@ +//! Demonstrates the most barebone usage of the Rerun SDK. + +use std::env::VarError; + +use dora_node_api::{ + arrow::{ + array::{AsArray, Float32Array, StringArray, StructArray, UInt8Array}, + datatypes::Float32Type, + }, + DoraNode, Event, Parameter, +}; +use eyre::{eyre, Context, ContextCompat, Result}; + +use rerun::{ + components::ImageBuffer, external::re_types::ArrowBuffer, ImageFormat, SpawnOptions, Text, +}; +pub mod urdf; +use urdf::{init_urdf, update_visualization}; + +pub fn lib_main() -> Result<()> { + // rerun `serve()` requires to have a running Tokio runtime in the current context. + let rt = tokio::runtime::Builder::new_current_thread() + .build() + .expect("Failed to create tokio runtime"); + let _guard = rt.enter(); + + // Limit memory usage + let mut options = SpawnOptions::default(); + + let memory_limit = match std::env::var("RERUN_MEMORY_LIMIT") { + Ok(memory_limit) => memory_limit + .parse::() + .context("Could not parse RERUN_MEMORY_LIMIT value")?, + Err(VarError::NotUnicode(_)) => { + return Err(eyre!("RERUN_MEMORY_LIMIT env variable is not unicode")); + } + Err(VarError::NotPresent) => "25%".to_string(), + }; + + options.memory_limit = memory_limit; + + let rec = rerun::RecordingStreamBuilder::new("dora-rerun") + .spawn_opts(&options, None) + .context("Could not spawn rerun visualization")?; + + let chains = init_urdf(&rec).context("Could not load urdf")?; + + let (_node, mut events) = + DoraNode::init_from_env().context("Could not initialize dora node")?; + + match std::env::var("README") { + Ok(readme) => { + readme + .parse::() + .context("Could not parse readme value")?; + rec.log("README", &rerun::TextDocument::new(readme)) + .wrap_err("Could not log text")?; + } + Err(VarError::NotUnicode(_)) => { + return Err(eyre!("readme env variable is not unicode")); + } + Err(VarError::NotPresent) => (), + }; + + while let Some(event) = events.recv() { + if let Event::Input { id, data, metadata } = event { + if id.as_str().contains("image") { + let height = + if let Some(Parameter::Integer(height)) = metadata.parameters.get("height") { + height + } else { + &480 + }; + let width = + if let Some(Parameter::Integer(width)) = metadata.parameters.get("width") { + width + } else { + &640 + }; + let encoding = if let Some(Parameter::String(encoding)) = + metadata.parameters.get("encoding") + { + encoding + } else { + "bgr8" + }; + + if encoding == "bgr8" { + let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); + let buffer: &[u8] = buffer.values(); + + // Transpose values from BGR to RGB + let buffer: Vec = + buffer.chunks(3).flat_map(|x| [x[2], x[1], x[0]]).collect(); + let buffer = ArrowBuffer::from(buffer); + let image_buffer = ImageBuffer::try_from(buffer) + .context("Could not convert buffer to image buffer")?; + // let tensordata = ImageBuffer(buffer); + + let image = rerun::Image::new( + image_buffer, + ImageFormat::rgb8([*width as u32, *height as u32]), + ); + rec.log(id.as_str(), &image) + .context("could not log image")?; + } else if encoding == "rgb8" { + let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); + let buffer: &[u8] = buffer.values(); + let buffer = ArrowBuffer::from(buffer); + let image_buffer = ImageBuffer::try_from(buffer) + .context("Could not convert buffer to image buffer")?; + + let image = rerun::Image::new( + image_buffer, + ImageFormat::rgb8([*width as u32, *height as u32]), + ); + rec.log(id.as_str(), &image) + .context("could not log image")?; + } else if ["jpeg", "png"].contains(&encoding) { + let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); + let buffer: &[u8] = buffer.values(); + + let image = rerun::EncodedImage::from_file_contents(buffer.to_vec()); + rec.log(id.as_str(), &image) + .context("could not log image")?; + }; + } else if id.as_str().contains("text") { + let buffer: StringArray = data.to_data().into(); + buffer.iter().try_for_each(|string| -> Result<()> { + if let Some(str) = string { + rec.log(id.as_str(), &rerun::TextLog::new(str)) + .wrap_err("Could not log text") + } else { + Ok(()) + } + })?; + } else if id.as_str().contains("boxes2d") { + let bbox_struct: StructArray = data.to_data().into(); + let format = + if let Some(Parameter::String(format)) = metadata.parameters.get("format") { + format + } else { + "xyxy" + }; + + // Cast Bbox + let bbox_buffer = bbox_struct + .column_by_name("bbox") + .context("Did not find labels field within bbox struct")?; + let bbox = bbox_buffer + .as_list_opt::() + .context("Could not deserialize bbox as list")? + .values(); + let bbox = bbox + .as_primitive_opt::() + .context("Could not get bbox value as list")? + .values(); + + // Cast Labels + let labels_buffer = bbox_struct + .column_by_name("labels") + .context("Did not find labels field within bbox struct")?; + let labels = labels_buffer + .as_list_opt::() + .context("Could not deserialize labels as list")? + .values(); + let labels = labels + .as_string_opt::() + .context("Could not deserialize labels as string")?; + let labels: Vec = labels.iter().map(|x| Text::from(x.unwrap())).collect(); + + // Cast confidence + let conf_buffer = bbox_struct + .column_by_name("conf") + .context("Did not find conf field within bbox struct")?; + let conf = conf_buffer + .as_list_opt::() + .context("Could not deserialize conf as list")? + .values(); + let _conf = conf + .as_primitive_opt::() + .context("Could not deserialize conf as string")?; + + let mut centers = vec![]; + let mut sizes = vec![]; + + if format == "xywh" { + bbox.chunks(4).for_each(|block| { + if let [x, y, w, h] = block { + centers.push((*x, *y)); + sizes.push((*w, *h)); + } + }); + } else if format == "xyxy" { + bbox.chunks(4).for_each(|block| { + if let [min_x, min_y, max_x, max_y] = block { + centers.push(((max_x + min_x) / 2., (max_y + min_y) / 2.)); + sizes.push(((max_x - min_x), (max_y - min_y))); + } + }); + } + rec.log( + id.as_str(), + &rerun::Boxes2D::from_centers_and_sizes(centers, sizes).with_labels(labels), + ) + .wrap_err("Could not log Boxes2D")?; + } else if id.as_str().contains("jointstate") { + let buffer: &Float32Array = data + .as_any() + .downcast_ref() + .context("jointstate is not float32")?; + let mut positions: Vec = buffer.values().to_vec(); + + // Match file name + let mut id = id.as_str().replace("jointstate_", ""); + id.push_str(".urdf"); + + if let Some(chain) = chains.get(&id) { + let dof = chain.dof(); + + // Truncate or pad positions to match the chain's dof + if dof < positions.len() { + positions.truncate(dof); + } else { + for _ in 0..(dof - positions.len()) { + positions.push(0.); + } + } + + update_visualization(&chain, &rec, &id, &positions)?; + } else { + println!("Could not find chain for {}", id); + } + } + } + } + + Ok(()) +} + +#[cfg(feature = "python")] +use pyo3::{ + pyfunction, pymodule, + types::{PyModule, PyModuleMethods}, + wrap_pyfunction, Bound, PyResult, Python, +}; + +#[cfg(feature = "python")] +#[pyfunction] +fn py_main(_py: Python) -> PyResult<()> { + pyo3::prepare_freethreaded_python(); + lib_main().map_err(|e| pyo3::exceptions::PyException::new_err(e.to_string())) +} + +/// A Python module implemented in Rust. +#[cfg(feature = "python")] +#[pymodule] +fn dora_rerun(_py: Python, m: Bound<'_, PyModule>) -> PyResult<()> { + m.add_function(wrap_pyfunction!(py_main, &m)?)?; + Ok(()) +} diff --git a/node-hub/dora-rerun/src/main.rs b/node-hub/dora-rerun/src/main.rs index d1a1ef8b7..40c80d9c3 100644 --- a/node-hub/dora-rerun/src/main.rs +++ b/node-hub/dora-rerun/src/main.rs @@ -1,265 +1,3 @@ -//! Demonstrates the most barebone usage of the Rerun SDK. - -use std::{collections::HashMap, env::VarError}; -pub mod urdf; - -use dora_node_api::{ - arrow::{ - array::{AsArray, Float32Array, StringArray, StructArray, UInt8Array}, - datatypes::Float32Type, - }, - DoraNode, Event, Parameter, -}; -use eyre::{eyre, Context, ContextCompat, Result}; -use rerun::{ - components::{ImageBuffer, RotationAxisAngle}, - external::re_types::ArrowBuffer, - Angle, ImageFormat, Rotation3D, SpawnOptions, Text, -}; - -fn main() -> Result<()> { - // rerun `serve()` requires to have a running Tokio runtime in the current context. - let rt = tokio::runtime::Builder::new_current_thread() - .build() - .expect("Failed to create tokio runtime"); - let _guard = rt.enter(); - - // Limit memory usage - let mut options = SpawnOptions::default(); - - let memory_limit = match std::env::var("RERUN_MEMORY_LIMIT") { - Ok(memory_limit) => memory_limit - .parse::() - .context("Could not parse RERUN_MEMORY_LIMIT value")?, - Err(VarError::NotUnicode(_)) => { - return Err(eyre!("RERUN_MEMORY_LIMIT env variable is not unicode")); - } - Err(VarError::NotPresent) => "25%".to_string(), - }; - - options.memory_limit = memory_limit; - - let rec = rerun::RecordingStreamBuilder::new("dora-rerun") - .spawn_opts(&options, None) - .context("Could not spawn rerun visualization")?; - - // Get all env variable that start with URDF_ - let urdfs = std::env::vars() - .filter(|(key, _)| key.ends_with("_urdf")) - .collect::>(); - let mut chains = HashMap::new(); - for (key, urdf_path) in urdfs { - let path = key.replace("_urdf", ".urdf"); - let chain = k::Chain::::from_urdf_file(&urdf_path).unwrap(); - - let transform = key.replace("_urdf", "_transform"); - rec.log_file_from_path(&urdf_path, None, false).unwrap(); - // Get transform by replacing URDF_ with TRANSFORM_ - if let Ok(transform) = std::env::var(transform) { - let transform = transform - .split(' ') - .map(|x| x.parse::().unwrap()) - .collect::>(); - rec.log( - path.clone(), - &rerun::Transform3D::from_translation_rotation( - [transform[0], transform[1], transform[2]], - Rotation3D::AxisAngle(RotationAxisAngle::new( - [0., 0., 0.], - Angle::from_degrees(0.0), - )), - ), - ) - .unwrap(); - chains.insert(path, chain); - } - } - let (_node, mut events) = - DoraNode::init_from_env().context("Could not initialize dora node")?; - - match std::env::var("README") { - Ok(readme) => { - readme - .parse::() - .context("Could not parse readme value")?; - rec.log("README", &rerun::TextDocument::new(readme)) - .wrap_err("Could not log text")?; - } - Err(VarError::NotUnicode(_)) => { - return Err(eyre!("readme env variable is not unicode")); - } - Err(VarError::NotPresent) => (), - }; - - while let Some(event) = events.recv() { - if let Event::Input { id, data, metadata } = event { - if id.as_str().contains("image") { - let height = - if let Some(Parameter::Integer(height)) = metadata.parameters.get("height") { - height - } else { - &480 - }; - let width = - if let Some(Parameter::Integer(width)) = metadata.parameters.get("width") { - width - } else { - &640 - }; - let encoding = if let Some(Parameter::String(encoding)) = - metadata.parameters.get("encoding") - { - encoding - } else { - "bgr8" - }; - - if encoding == "bgr8" { - let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); - let buffer: &[u8] = buffer.values(); - - // Transpose values from BGR to RGB - let buffer: Vec = - buffer.chunks(3).flat_map(|x| [x[2], x[1], x[0]]).collect(); - let buffer = ArrowBuffer::from(buffer); - let image_buffer = ImageBuffer::try_from(buffer) - .context("Could not convert buffer to image buffer")?; - // let tensordata = ImageBuffer(buffer); - - let image = rerun::Image::new( - image_buffer, - ImageFormat::rgb8([*width as u32, *height as u32]), - ); - rec.log(id.as_str(), &image) - .context("could not log image")?; - } else if encoding == "rgb8" { - let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); - let buffer: &[u8] = buffer.values(); - let buffer = ArrowBuffer::from(buffer); - let image_buffer = ImageBuffer::try_from(buffer) - .context("Could not convert buffer to image buffer")?; - - let image = rerun::Image::new( - image_buffer, - ImageFormat::rgb8([*width as u32, *height as u32]), - ); - rec.log(id.as_str(), &image) - .context("could not log image")?; - } else if ["jpeg", "png"].contains(&encoding) { - let buffer: &UInt8Array = data.as_any().downcast_ref().unwrap(); - let buffer: &[u8] = buffer.values(); - - let image = rerun::EncodedImage::from_file_contents(buffer.to_vec()); - rec.log(id.as_str(), &image) - .context("could not log image")?; - }; - } else if id.as_str().contains("text") { - let buffer: StringArray = data.to_data().into(); - buffer.iter().try_for_each(|string| -> Result<()> { - if let Some(str) = string { - rec.log(id.as_str(), &rerun::TextLog::new(str)) - .wrap_err("Could not log text") - } else { - Ok(()) - } - })?; - } else if id.as_str().contains("boxes2d") { - let bbox_struct: StructArray = data.to_data().into(); - let format = - if let Some(Parameter::String(format)) = metadata.parameters.get("format") { - format - } else { - "xyxy" - }; - - // Cast Bbox - let bbox_buffer = bbox_struct - .column_by_name("bbox") - .context("Did not find labels field within bbox struct")?; - let bbox = bbox_buffer - .as_list_opt::() - .context("Could not deserialize bbox as list")? - .values(); - let bbox = bbox - .as_primitive_opt::() - .context("Could not get bbox value as list")? - .values(); - - // Cast Labels - let labels_buffer = bbox_struct - .column_by_name("labels") - .context("Did not find labels field within bbox struct")?; - let labels = labels_buffer - .as_list_opt::() - .context("Could not deserialize labels as list")? - .values(); - let labels = labels - .as_string_opt::() - .context("Could not deserialize labels as string")?; - let labels: Vec = labels.iter().map(|x| Text::from(x.unwrap())).collect(); - - // Cast confidence - let conf_buffer = bbox_struct - .column_by_name("conf") - .context("Did not find conf field within bbox struct")?; - let conf = conf_buffer - .as_list_opt::() - .context("Could not deserialize conf as list")? - .values(); - let _conf = conf - .as_primitive_opt::() - .context("Could not deserialize conf as string")?; - - let mut centers = vec![]; - let mut sizes = vec![]; - - if format == "xywh" { - bbox.chunks(4).for_each(|block| { - if let [x, y, w, h] = block { - centers.push((*x, *y)); - sizes.push((*w, *h)); - } - }); - } else if format == "xyxy" { - bbox.chunks(4).for_each(|block| { - if let [min_x, min_y, max_x, max_y] = block { - centers.push(((max_x + min_x) / 2., (max_y + min_y) / 2.)); - sizes.push(((max_x - min_x), (max_y - min_y))); - } - }); - } - rec.log( - id.as_str(), - &rerun::Boxes2D::from_centers_and_sizes(centers, sizes).with_labels(labels), - ) - .wrap_err("Could not log Boxes2D")?; - } else if id.as_str().contains("jointstate") { - let buffer: &Float32Array = data - .as_any() - .downcast_ref() - .context("data is not float32")?; - let mut positions: Vec = buffer.values().to_vec(); - - // Match file name - let mut id = id.as_str().replace("jointstate_", ""); - id.push_str(".urdf"); - - let chain = chains.get(&id).unwrap(); - let dof = chain.dof(); - - // Truncate or pad positions to match the chain's dof - if dof < positions.len() { - positions.truncate(dof); - } else { - for _ in 0..(dof - positions.len()) { - positions.push(0.); - } - } - - urdf::update_visualization(&chain, &rec, &id, &positions)?; - } - } - } - - Ok(()) +fn main() -> Result<(), eyre::Error> { + dora_rerun::lib_main() } diff --git a/node-hub/dora-rerun/src/urdf.rs b/node-hub/dora-rerun/src/urdf.rs index 5aa71a6c2..e4bc79883 100644 --- a/node-hub/dora-rerun/src/urdf.rs +++ b/node-hub/dora-rerun/src/urdf.rs @@ -1,6 +1,8 @@ +use std::collections::HashMap; + use eyre::{Context, ContextCompat, Result}; use k::Chain; -use rerun::{RecordingStream, Vec3D}; +use rerun::{components::RotationAxisAngle, Angle, RecordingStream, Rotation3D, Vec3D}; pub struct MyIntersperse { iterator: I, sep: T, @@ -51,6 +53,48 @@ fn get_entity_path(link: &k::Node, urdf_path: &str) -> String { .collect() } +pub fn init_urdf(rec: &RecordingStream) -> Result>> { + // Get all env variable that end with urdf + let urdfs = std::env::vars() + .filter(|(key, _)| key.ends_with("_urdf")) + .collect::>(); + let mut chains = HashMap::new(); + for (key, urdf_path) in urdfs { + let path = key.replace("_urdf", ".urdf"); + let chain = k::Chain::::from_urdf_file(&urdf_path).context("Could not load URDF")?; + + let transform = key.replace("_urdf", "_transform"); + if let Err(err) = rec.log_file_from_path(&urdf_path, None, false) { + println!("Could not log file: {}. Errored with {}", urdf_path, err); + println!("Make sure to install urdf loader with:"); + println!( + "pip install git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git" + ) + }; + // Get transform by replacing URDF_ with TRANSFORM_ + if let Ok(transform) = std::env::var(transform) { + let transform = transform + .split(' ') + .map(|x| x.parse::().unwrap()) + .collect::>(); + rec.log( + path.clone(), + &rerun::Transform3D::from_translation_rotation( + [transform[0], transform[1], transform[2]], + Rotation3D::AxisAngle(RotationAxisAngle::new( + [0., 0., 0.], + Angle::from_degrees(0.0), + )), + ), + ) + .unwrap(); + chains.insert(path, chain); + } + } + + Ok(chains) +} + pub fn update_visualization( chain: &Chain, rec: &RecordingStream, From 6cb643fb5b450bfed6b8b9ca3c45a09f54c90503 Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Fri, 8 Nov 2024 06:50:28 +0100 Subject: [PATCH 6/7] Small fix --- Cargo.lock | 1492 ++++++++++++++++++++++---------- node-hub/dora-rerun/Cargo.toml | 2 +- node-hub/dora-rerun/README.md | 8 + 3 files changed, 1021 insertions(+), 481 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cd665ba41..11bd2fed1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "RustyXML" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b5ace29ee3216de37c0546865ad08edef58b0f9e76838ed8959a84a990e58c5" + [[package]] name = "ab_glyph" version = "0.2.26" @@ -20,76 +26,95 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.12.3" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" +checksum = "99b76d84ee70e30a4a7e39ab9018e2b17a6a09e31084176cc7c0b2dec036ba45" dependencies = [ "enumn", "serde", ] +[[package]] +name = "accesskit_atspi_common" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5393c75d4666f580f4cac0a968bc97c36076bb536a129f28210dac54ee127ed" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "thiserror", + "zvariant 4.2.0", +] + [[package]] name = "accesskit_consumer" -version = "0.16.1" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +checksum = "7a12dc159d52233c43d9fe5415969433cbdd52c3d6e0df51bda7d447427b9986" dependencies = [ "accesskit", + "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.10.1" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +checksum = "bfc6c1ecd82053d127961ad80a8beaa6004fb851a3a5b96506d7a6bd462403f6" dependencies = [ "accesskit", "accesskit_consumer", - "objc2 0.3.0-beta.3.patch-leaks.3", + "objc2", + "objc2-app-kit", + "objc2-foundation", "once_cell", ] [[package]] name = "accesskit_unix" -version = "0.6.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" +checksum = "be7f5cf6165be10a54b2655fa2e0e12b2509f38ed6fc43e11c31fdb7ee6230bb" dependencies = [ "accesskit", - "accesskit_consumer", + "accesskit_atspi_common", "async-channel 2.3.1", - "async-once-cell", + "async-executor", + "async-task", "atspi", - "futures-lite 1.13.0", - "once_cell", + "futures-lite 2.3.0", + "futures-util", "serde", - "zbus", + "zbus 4.4.0", ] [[package]] name = "accesskit_windows" -version = "0.15.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +checksum = "974e96c347384d9133427167fb8a58c340cb0496988dacceebdc1ed27071023b" dependencies = [ "accesskit", "accesskit_consumer", - "once_cell", "paste", "static_assertions", - "windows 0.48.0", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "accesskit_winit" -version = "0.16.1" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5284218aca17d9e150164428a0ebc7b955f70e3a9a78b4c20894513aabf98a67" +checksum = "aea3522719f1c44564d03e9469a8e2f3a98b3a8a880bd66d0789c6b9c4a669dd" dependencies = [ "accesskit", "accesskit_macos", "accesskit_unix", "accesskit_windows", + "raw-window-handle 0.6.2", "winit", ] @@ -175,9 +200,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-activity" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", "bitflags 2.6.0", @@ -189,7 +214,7 @@ dependencies = [ "log", "ndk", "ndk-context", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "thiserror", ] @@ -279,6 +304,15 @@ version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arboard" version = "3.4.0" @@ -289,7 +323,7 @@ dependencies = [ "core-graphics", "image", "log", - "objc2 0.5.2", + "objc2", "objc2-app-kit", "objc2-foundation", "parking_lot", @@ -558,11 +592,11 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "ash" -version = "0.37.3+1.3.251" +version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading 0.7.4", + "libloading 0.8.4", ] [[package]] @@ -581,9 +615,15 @@ dependencies = [ "serde", "serde_repr", "url", - "zbus", + "zbus 3.15.2", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + [[package]] name = "async-attributes" version = "1.1.2" @@ -604,6 +644,18 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-channel" version = "1.9.0" @@ -749,12 +801,6 @@ dependencies = [ "futures-lite 2.3.0", ] -[[package]] -name = "async-once-cell" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" - [[package]] name = "async-process" version = "1.8.1" @@ -772,6 +818,25 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.3.3", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if 1.0.0", + "event-listener 5.3.1", + "futures-lite 2.3.0", + "rustix 0.38.34", + "tracing", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -823,7 +888,7 @@ dependencies = [ "async-global-executor", "async-io 1.13.0", "async-lock 2.8.0", - "async-process", + "async-process 1.8.1", "crossbeam-utils", "futures-channel", "futures-core", @@ -894,11 +959,31 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomig" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3eff224f34d90a14c90d2adedfbabcc9f92e4a823c74364fcbae5f07f28389" +dependencies = [ + "atomig-macro", +] + +[[package]] +name = "atomig-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a10c8c98ca4c65e4bdd6f1506beb768671f8dce3f5df4dd7d14632b6ecc6f43" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "atspi" -version = "0.19.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" dependencies = [ "atspi-common", "atspi-connection", @@ -907,39 +992,42 @@ dependencies = [ [[package]] name = "atspi-common" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" dependencies = [ "enumflags2", "serde", "static_assertions", - "zbus", - "zbus_names", - "zvariant", + "zbus 4.4.0", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names 3.0.0", + "zvariant 4.2.0", ] [[package]] name = "atspi-connection" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" +checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" dependencies = [ "atspi-common", "atspi-proxies", - "futures-lite 1.13.0", - "zbus", + "futures-lite 2.3.0", + "zbus 4.4.0", ] [[package]] name = "atspi-proxies" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" dependencies = [ "atspi-common", "serde", - "zbus", + "zbus 4.4.0", + "zvariant 4.2.0", ] [[package]] @@ -959,6 +1047,20 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "av-data" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "124ae24335161b3d2226594640a67903da0866e2591312591fc8ddad64c1b38c" +dependencies = [ + "byte-slice-cast", + "bytes", + "num-derive", + "num-rational", + "num-traits", + "thiserror", +] + [[package]] name = "axum" version = "0.6.20" @@ -1120,11 +1222,11 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" dependencies = [ - "bit-vec", + "bit-vec 0.7.0", ] [[package]] @@ -1133,6 +1235,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" + [[package]] name = "bitflags" version = "1.3.2" @@ -1176,51 +1284,13 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-sys" -version = "0.1.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" -dependencies = [ - "objc-sys 0.2.0-beta.2", -] - -[[package]] -name = "block-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" -dependencies = [ - "objc-sys 0.3.5", -] - -[[package]] -name = "block2" -version = "0.2.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" -dependencies = [ - "block-sys 0.1.0-beta.1", - "objc2-encode 2.0.0-pre.2", -] - -[[package]] -name = "block2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" -dependencies = [ - "block-sys 0.2.1", - "objc2 0.4.1", -] - [[package]] name = "block2" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2 0.5.2", + "objc2", ] [[package]] @@ -1296,6 +1366,12 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + [[package]] name = "bytecount" version = "0.6.8" @@ -1349,20 +1425,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "981520c98f422fcc584dc1a95c334e6953900b9106bc47a9839b81790009eb21" -[[package]] -name = "calloop" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" -dependencies = [ - "bitflags 2.6.0", - "log", - "polling 3.7.2", - "rustix 0.38.34", - "slab", - "thiserror", -] - [[package]] name = "calloop" version = "0.13.0" @@ -1377,25 +1439,13 @@ dependencies = [ "thiserror", ] -[[package]] -name = "calloop-wayland-source" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" -dependencies = [ - "calloop 0.12.4", - "rustix 0.38.34", - "wayland-backend", - "wayland-client", -] - [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop 0.13.0", + "calloop", "rustix 0.38.34", "wayland-backend", "wayland-client", @@ -2622,7 +2672,9 @@ version = "0.3.6" dependencies = [ "dora-node-api", "eyre", - "ndarray", + "k", + "ndarray 0.15.6", + "pyo3", "rerun", "tokio", ] @@ -2727,6 +2779,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" + [[package]] name = "dunce" version = "1.0.5" @@ -2755,33 +2813,39 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecolor" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e6b451ff1143f6de0f33fc7f1b68fecfd2c7de06e104de96c4514de3f5396f8" +checksum = "775cfde491852059e386c4e1deb4aef381c617dc364184c6f6afee99b87c402b" dependencies = [ "bytemuck", "emath", "serde", ] +[[package]] +name = "econtext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18aade80d5e09429040243ce1143ddc08a92d7a22820ac512610410a4dd5214f" + [[package]] name = "eframe" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6490ef800b2e41ee129b1f32f9ac15f713233fe3bc18e241a1afe1e4fb6811e0" +checksum = "8ac2645a9bf4826eb4e91488b1f17b8eaddeef09396706b2f14066461338e24f" dependencies = [ "ahash", "bytemuck", - "directories", "document-features", "egui", "egui-wgpu", "egui-winit", "egui_glow", + "home", "image", "js-sys", "log", - "objc2 0.5.2", + "objc2", "objc2-app-kit", "objc2-foundation", "parking_lot", @@ -2798,14 +2862,15 @@ dependencies = [ "web-time", "wgpu", "winapi 0.3.9", + "windows-sys 0.52.0", "winit", ] [[package]] name = "egui" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c97e70a2768de630f161bb5392cbd3874fcf72868f14df0e002e82e06cb798" +checksum = "53eafabcce0cb2325a59a98736efe0bf060585b437763f8c476957fb274bb974" dependencies = [ "accesskit", "ahash", @@ -2821,9 +2886,9 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c7a7c707877c3362a321ebb4f32be811c0b91f7aebf345fb162405c0218b4c" +checksum = "d00fd5d06d8405397e64a928fa0ef3934b3c30273ea7603e3dc4627b1f7a1a82" dependencies = [ "ahash", "bytemuck", @@ -2841,9 +2906,9 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4e066af341bf92559f60dbdf2020b2a03c963415349af5f3f8d79ff7a4926" +checksum = "0a9c430f4f816340e8e8c1b20eec274186b1be6bc4c7dfc467ed50d57abc36c6" dependencies = [ "accesskit_winit", "ahash", @@ -2861,32 +2926,32 @@ dependencies = [ [[package]] name = "egui_commonmark" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88871b75bd43c52a2b44ce5b53160506e7976e239112c56728496d019cc60d" +checksum = "6f169228b94d1c8eb9330b7ea1b5f65b1193b6bea95159c87f574ed4aff8c172" dependencies = [ "egui", "egui_commonmark_backend", "egui_extras", - "pulldown-cmark 0.11.3", + "pulldown-cmark 0.12.2", ] [[package]] name = "egui_commonmark_backend" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "148edd9546feba319b16d5a5e551cda46095031ec1e6665e5871eef9ee692967" +checksum = "dcd08f95abeb137e59c9bfdd0880d362bff74a83afe13805fde7a2d014ef773d" dependencies = [ "egui", "egui_extras", - "pulldown-cmark 0.11.3", + "pulldown-cmark 0.12.2", ] [[package]] name = "egui_extras" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb783d9fa348f69ed5c340aa25af78b5472043090e8b809040e30960cc2a746" +checksum = "bf3c1f5cd8dfe2ade470a218696c66cf556fcfd701e7830fa2e9f4428292a2a1" dependencies = [ "ahash", "egui", @@ -2901,15 +2966,15 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2bdc8b38cfa17cc712c4ae079e30c71c00cd4c2763c9e16dc7860a02769103" +checksum = "0e39bccc683cd43adab530d8f21a13eb91e80de10bcc38c3f1c16601b6f62b26" dependencies = [ "ahash", "bytemuck", "egui", "egui-winit", - "glow", + "glow 0.14.2", "log", "memoffset 0.9.1", "puffin", @@ -2920,20 +2985,31 @@ dependencies = [ [[package]] name = "egui_plot" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7acc4fe778c41b91d57e04c1a2cf5765b3dc977f9f8384d2bb2eb4254855365" +checksum = "d8dca4871c15d51aadb79534dcf51a8189e5de3426ee7b465eb7db9a0a81ea67" dependencies = [ "ahash", "egui", "emath", ] +[[package]] +name = "egui_table" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef148ce13d97a23376b92d3c5d0dddedd98c28b17053ceb326b31b92ea45d07" +dependencies = [ + "egui", + "serde", + "vec1", +] + [[package]] name = "egui_tiles" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec2e18c8665b7aaccfb560e383d08bfbce9cb905e055417f6bb0ecd63056561" +checksum = "e95b957b2db66175ea36f73cb09a1c40e5f2455692347ccfbe79fd3c84907b5b" dependencies = [ "ahash", "egui", @@ -2966,9 +3042,9 @@ checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "emath" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6a21708405ea88f63d8309650b4d77431f4bc28fb9d8e6f77d3963b51249e6" +checksum = "b1fe0049ce51d0fb414d029e668dd72eb30bc2b739bf34296ed97bd33df544f3" dependencies = [ "bytemuck", "serde", @@ -2989,6 +3065,12 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + [[package]] name = "enum-map" version = "2.7.3" @@ -3101,15 +3183,16 @@ dependencies = [ [[package]] name = "epaint" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0dcc0a0771e7500e94cd1cb797bd13c9f23b9409bdc3c824e2cbc562b7fa01" +checksum = "a32af8da821bd4f43f2c137e295459ee2e1661d87ca8779dfa0eaf45d870e20f" dependencies = [ "ab_glyph", "ahash", "bytemuck", "ecolor", "emath", + "epaint_default_fonts", "log", "nohash-hasher", "parking_lot", @@ -3118,6 +3201,12 @@ dependencies = [ "serde", ] +[[package]] +name = "epaint_default_fonts" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "483440db0b7993cf77a20314f08311dbe95675092405518c0677aa08c151a3ea" + [[package]] name = "equivalent" version = "1.0.1" @@ -3739,6 +3828,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "glow" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "gltf" version = "1.4.1" @@ -3780,9 +3881,9 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" dependencies = [ "gl_generator", ] @@ -3808,9 +3909,9 @@ dependencies = [ [[package]] name = "gpu-allocator" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" dependencies = [ "log", "presser", @@ -4187,7 +4288,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -4199,17 +4300,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icrate" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" -dependencies = [ - "block2 0.3.0", - "dispatch", - "objc2 0.4.1", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -4251,6 +4341,15 @@ dependencies = [ "zune-jpeg", ] +[[package]] +name = "immutable-chunkmap" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +dependencies = [ + "arrayvec", +] + [[package]] name = "indent" version = "0.1.1" @@ -4520,9 +4619,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -4538,6 +4637,19 @@ dependencies = [ "serde", ] +[[package]] +name = "k" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dce11312d00e40c13f5c5fac13056a134f77944ab87086460ef386eed68ca08" +dependencies = [ + "nalgebra", + "simba", + "thiserror", + "tracing", + "urdf-rs", +] + [[package]] name = "keccak" version = "0.1.5" @@ -4959,9 +5071,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ "bitflags 2.6.0", "block", @@ -5109,18 +5221,18 @@ dependencies = [ [[package]] name = "naga" -version = "0.20.0" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231" +checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" dependencies = [ "arrayvec", "bit-set", "bitflags 2.6.0", + "cfg_aliases 0.1.1", "codespan-reporting", "hexf-parse", "indexmap 2.6.0", "log", - "num-traits", "rustc-hash", "spirv", "termcolor", @@ -5128,6 +5240,33 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "nalgebra" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb2d0de08694bed883320212c18ee3008576bfe8c306f4c3c4a58b4876998be" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "names" version = "0.14.0" @@ -5147,6 +5286,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "nasm-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12fcfa1bd49e0342ec1d07ed2be83b59963e7acbeb9310e1bb2c07b69dadd959" +dependencies = [ + "jobserver", +] + [[package]] name = "natord" version = "1.0.9" @@ -5166,16 +5314,31 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "ndarray" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + [[package]] name = "ndk" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ "bitflags 2.6.0", "jni-sys", "log", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "raw-window-handle 0.6.2", "thiserror", @@ -5196,6 +5359,15 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + [[package]] name = "neli" version = "0.6.4" @@ -5283,6 +5455,7 @@ dependencies = [ "cfg-if 1.0.0", "cfg_aliases 0.2.1", "libc", + "memoffset 0.9.1", ] [[package]] @@ -5468,6 +5641,7 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", + "serde", ] [[package]] @@ -5505,7 +5679,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 2.0.86", @@ -5563,12 +5737,6 @@ dependencies = [ "objc_id", ] -[[package]] -name = "objc-sys" -version = "0.2.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" - [[package]] name = "objc-sys" version = "0.3.5" @@ -5577,49 +5745,52 @@ checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ - "block2 0.2.0-alpha.6", - "objc-sys 0.2.0-beta.2", - "objc2-encode 2.0.0-pre.2", + "objc-sys", + "objc2-encode", ] [[package]] -name = "objc2" -version = "0.4.1" +name = "objc2-app-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "objc-sys 0.3.5", - "objc2-encode 3.0.0", + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", ] [[package]] -name = "objc2" -version = "0.5.2" +name = "objc2-cloud-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "objc-sys 0.3.5", - "objc2-encode 4.0.3", + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", ] [[package]] -name = "objc2-app-kit" +name = "objc2-contacts" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "bitflags 2.6.0", - "block2 0.5.1", - "libc", - "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", + "block2", + "objc2", "objc2-foundation", - "objc2-quartz-core", ] [[package]] @@ -5629,8 +5800,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.6.0", - "block2 0.5.1", - "objc2 0.5.2", + "block2", + "objc2", "objc2-foundation", ] @@ -5640,27 +5811,24 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", + "block2", + "objc2", "objc2-foundation", "objc2-metal", ] [[package]] -name = "objc2-encode" -version = "2.0.0-pre.2" +name = "objc2-core-location" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "objc-sys 0.2.0-beta.2", + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", ] -[[package]] -name = "objc2-encode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" - [[package]] name = "objc2-encode" version = "4.0.3" @@ -5674,9 +5842,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.6.0", - "block2 0.5.1", + "block2", + "dispatch", "libc", - "objc2 0.5.2", + "objc2", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] @@ -5686,8 +5867,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.6.0", - "block2 0.5.1", - "objc2 0.5.2", + "block2", + "objc2", "objc2-foundation", ] @@ -5698,12 +5879,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.6.0", - "block2 0.5.1", - "objc2 0.5.2", + "block2", + "objc2", "objc2-foundation", "objc2-metal", ] +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + [[package]] name = "objc_id" version = "0.1.1" @@ -6445,6 +6681,15 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +[[package]] +name = "portable-atomic-util" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -6621,9 +6866,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.11.3" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "679341d22c78c6c649893cbd6c3278dcbe9fc4faa62fea3a9296ae2b50c14625" +checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14" dependencies = [ "bitflags 2.6.0", "memchr", @@ -6729,6 +6974,16 @@ dependencies = [ "serde", ] +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -6745,6 +7000,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" dependencies = [ "memchr", + "serde", ] [[package]] @@ -6911,6 +7167,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "raw-cpuid" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -6964,9 +7229,9 @@ dependencies = [ [[package]] name = "re_analytics" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb73df988e201d1910ada87369d8222f7242f76d75d869ffdeabbfdbce354925" +checksum = "f1dd0159bc848d36bc43693606bf31ebf15b24816cf95c4e96be5f548616bfca" dependencies = [ "crossbeam", "directories", @@ -7009,9 +7274,9 @@ dependencies = [ [[package]] name = "re_blueprint_tree" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952c4a15a5c6a397a7d639045c253426a4cd371e10c387fadcb37fe432395f3c" +checksum = "4a2a59168e7d8825e6d7295b431bc9958a6dfd11ef50a4f0db2435e0abbcc79a" dependencies = [ "egui", "itertools 0.13.0", @@ -7030,18 +7295,18 @@ dependencies = [ [[package]] name = "re_build_info" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb89ca2a069a90b152610c5d4771b7a831ed9d15b054548a08dfe7b41710d53c" +checksum = "dd39f5cc762cb2189de8340d998b67bd96c42b50cc13d09ffed4a6c91946d64f" dependencies = [ "serde", ] [[package]] name = "re_build_tools" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b66fc95fed87eba938856c49d029b2525d1d90a1fd8f45c419fd75f57e09afc" +checksum = "bbaeb7bd5db56a4eb9b323eabf9acb3f0552b9f999ce8224d9b5b08547f417e3" dependencies = [ "anyhow", "cargo_metadata 0.18.1", @@ -7054,18 +7319,18 @@ dependencies = [ [[package]] name = "re_case" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "752ce7308c890cd44d7c4072ef5fb9ec1131a78535ff2cc8058cf93120bcfee2" +checksum = "25c05e42afb6ad68408ab44bb20ae9207dab8162fd6f6d0aacb46064d5ad36aa" dependencies = [ "convert_case", ] [[package]] name = "re_chunk" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a9e622debb4ebe8de81714b47d48c89eba7c38c57213b9d15fe0080ac1c67" +checksum = "835c0008466c91d037d9bed4cc22ac282217bdb2e3e8cfcee2f6eef790550304" dependencies = [ "ahash", "anyhow", @@ -7091,11 +7356,12 @@ dependencies = [ [[package]] name = "re_chunk_store" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428c6c5ef2bdc0c8d9afee239d8d1ba51dc60559e60a302a361d7fe62727009a" +checksum = "9f38aad1c54fb8c93bf0dc982f891552efdbf704f29080cfcd477fe5d25ea9d0" dependencies = [ "ahash", + "anyhow", "document-features", "indent", "itertools 0.13.0", @@ -7106,6 +7372,7 @@ dependencies = [ "re_chunk", "re_format", "re_log", + "re_log_encoding", "re_log_types", "re_tracing", "re_types_core", @@ -7113,11 +7380,28 @@ dependencies = [ "web-time", ] +[[package]] +name = "re_chunk_store_ui" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f336853da55b39e0d1160cd94163a612e49553cebba47f853a75ae86d7a828b3" +dependencies = [ + "egui", + "egui_extras", + "itertools 0.13.0", + "re_chunk_store", + "re_format", + "re_log_types", + "re_types", + "re_ui", + "re_viewer_context", +] + [[package]] name = "re_component_ui" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17a90e34d6e9acfc92526fad011403b339b848ada732ce912a7851f4c37443d5" +checksum = "2212a4e18038d2f1f85f051e38c1b39f34b01b5c56b6c4ce0a63fc60dd68c587" dependencies = [ "egui", "egui_extras", @@ -7134,9 +7418,9 @@ dependencies = [ [[package]] name = "re_context_menu" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3360dc91b69b9b51db929574f1e22cccbb664da6ecfd757994fa069e1388d4" +checksum = "a72388ae914780ed15ae1b964d49627265d785c59bd8e43dc2766dfd1ec974b2" dependencies = [ "egui", "egui_tiles", @@ -7157,11 +7441,12 @@ dependencies = [ [[package]] name = "re_crash_handler" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a27eaac446e4cb6e151560d3215dceee779a1fd0e7c3cde81b4a6708c26d29d" +checksum = "317af2231c34496ff40d9bb40875f1856381c7f4ffcdb6e60e4f9a32f6ff9298" dependencies = [ "backtrace", + "econtext", "itertools 0.13.0", "libc", "parking_lot", @@ -7171,16 +7456,18 @@ dependencies = [ [[package]] name = "re_data_loader" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9058deb42c26214e88812664bffa6f4ea786ed558f3d7cf5c5374de27acc95" +checksum = "ed855b356ce9b8d57ee85b5bef0b3f77681d80d624e4cbb91bba0254c074766c" dependencies = [ "ahash", "anyhow", "image", + "notify 6.1.1", "once_cell", "parking_lot", "rayon", + "re_arrow2", "re_build_info", "re_build_tools", "re_chunk", @@ -7196,9 +7483,9 @@ dependencies = [ [[package]] name = "re_data_source" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3d714d35a7cbd160a57708c212b8b0e5cca986aa9e9a420380cf68a128cf2c" +checksum = "7e5d43d9884884ab584e7926a5e260bcd389a7e9cf91d5de5bbfef447e0a4930" dependencies = [ "anyhow", "itertools 0.13.0", @@ -7215,9 +7502,9 @@ dependencies = [ [[package]] name = "re_data_ui" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a9d87c7f9a3c3386fb165ae62ab438e1c4d17a75a9cbbe154791a562571d13" +checksum = "e09332ccde501b354a095d38316e13b614f2724faf3238bc2c4d991126e0d965" dependencies = [ "ahash", "anyhow", @@ -7237,18 +7524,37 @@ dependencies = [ "re_smart_channel", "re_tracing", "re_types", - "re_types_blueprint", "re_types_core", "re_ui", + "re_video", "re_viewer_context", "unindent", ] +[[package]] +name = "re_dataframe" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbdd427394ab73e870beb592bd24d14d43ef5fc99f1f75e282ab414d88250b6" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "nohash-hasher", + "re_arrow2", + "re_chunk", + "re_chunk_store", + "re_log", + "re_log_types", + "re_query", + "re_tracing", + "re_types_core", +] + [[package]] name = "re_entity_db" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b2485d7d304ab4a569e6cffa1ab9e9574fe412bb2dd81dad15a5a98f914924" +checksum = "9b34166585a6d17a61662fbc8433816f9a16632208311f9db0303f0a53133f1a" dependencies = [ "ahash", "document-features", @@ -7259,6 +7565,7 @@ dependencies = [ "re_build_info", "re_chunk", "re_chunk_store", + "re_dataframe", "re_format", "re_int_histogram", "re_log", @@ -7275,24 +7582,24 @@ dependencies = [ [[package]] name = "re_error" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33aefcf4ba9f02854105067dba72b30ead0b94beadd26d242d188d2cad855890" +checksum = "fb97bdbd6c379c82cb8f77f01bf4543bee5699cefe1ea78932338530f7669bd0" [[package]] name = "re_format" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f4d2734843d2e4403c0378ac7ee1721511a5ddcbaf48d8bfe3208be38b2750" +checksum = "9f0676202e29d77150df3f1e7e010b5a0d9af6f0f8d430903288832748b7df57" dependencies = [ "num-traits", ] [[package]] name = "re_format_arrow" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e093b8c9ca524367f65f63e7bef27510eea05a2e0dca75ead7cfcf778f55f0e9" +checksum = "ce2a885e055eb557923f56e52a1249c026a6d06fa4399dbc356308fed4e98058" dependencies = [ "comfy-table", "re_arrow2", @@ -7302,9 +7609,9 @@ dependencies = [ [[package]] name = "re_int_histogram" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952d88f59e10f3b5f20c1f672a416a2f38d193a356d37e654ea8514fb7d069f3" +checksum = "bfd863353fcb744faf308e85a70a2e88c539bbaff4f2d32918ec495b5667bba0" dependencies = [ "smallvec", "static_assertions", @@ -7312,9 +7619,9 @@ dependencies = [ [[package]] name = "re_log" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44cc0f4eb4a82fa7b2d16605c103256594e07262e1117b56472886f7e309fa9" +checksum = "249e38adcb1a2c69e7a09dbdcced3370c36583471d81773cdedd74df038493b4" dependencies = [ "env_logger 0.10.2", "js-sys", @@ -7327,9 +7634,9 @@ dependencies = [ [[package]] name = "re_log_encoding" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff50fa788bfe385f63b8e8dbdb4a5f97f312dcd0a4b752dfdd8f11e970f7bd2" +checksum = "b12929caca153106cc41904cf3a74583b070f628a05ec888f59ce25c74609513" dependencies = [ "ehttp", "js-sys", @@ -7351,9 +7658,9 @@ dependencies = [ [[package]] name = "re_log_types" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c953bc26e15d4bda28585a434df4bcfeaa0fc1f1174bd99a78c6347b529f8860" +checksum = "99280e77603a8a7b04e2f6149a6773d6ef50079637d763d131839ad78ce16932" dependencies = [ "ahash", "anyhow", @@ -7400,9 +7707,9 @@ dependencies = [ [[package]] name = "re_memory" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d456b886bc5aea51abc720a0ead28bf2593c7dfc87c12f6d088030e30c28018" +checksum = "bc0ea7c80b0dc8f42598086d926dd6b749c14c4e53ee975e4915e4022caf2cca" dependencies = [ "ahash", "backtrace", @@ -7421,11 +7728,26 @@ dependencies = [ "web-time", ] +[[package]] +name = "re_mp4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1e30657b1ae7f0dd3428a59dc8140732b74a22cc07763606c9ec4054138731" +dependencies = [ + "byteorder", + "bytes", + "log", + "num-rational", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "re_query" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04bdaca11104426f316fdf94a59bc6333f2f0f062bc61d8dfbcf7f5f7929d99d" +checksum = "88d428f95fc875a717186fcf84d3e59f99c4ff76dce7100a89bc440b9ffc7fa9" dependencies = [ "ahash", "anyhow", @@ -7448,11 +7770,34 @@ dependencies = [ "thiserror", ] +[[package]] +name = "re_rav1d" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5eb64c43c68024d96d99d52ef0525030d17bdcc6a6b4ddba048ec8f713c91fc" +dependencies = [ + "assert_matches", + "atomig", + "av-data", + "bitflags 2.6.0", + "cc", + "cfg-if 1.0.0", + "libc", + "nasm-rs", + "parking_lot", + "paste", + "raw-cpuid", + "static_assertions", + "strum", + "to_method", + "zerocopy", +] + [[package]] name = "re_renderer" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6fadede6d7f670c17e105878390a0d329d4f23f2b37322d8f1b2d17ed1fa40" +checksum = "3ae006108cae3c3adf0064594f4cca0b6da10751a6522c1c0aca4b0894eb2d5d" dependencies = [ "ahash", "anyhow", @@ -7470,6 +7815,7 @@ dependencies = [ "gltf", "half", "itertools 0.13.0", + "js-sys", "never", "notify 6.1.1", "ordered-float 4.2.0", @@ -7482,6 +7828,7 @@ dependencies = [ "re_log", "re_math", "re_tracing", + "re_video", "serde", "slotmap", "smallvec", @@ -7491,19 +7838,22 @@ dependencies = [ "tobj", "type-map", "walkdir", + "wasm-bindgen", "wasm-bindgen-futures", + "web-sys", + "web-time", "wgpu", "wgpu-core", + "wgpu-types", ] [[package]] name = "re_sdk" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4120478d467a8cc9cbcb97746aae9042f3a8ffa2abcd3e17ce7f81f64e390209" +checksum = "da99da0c9129033de969e91f3ce1d8d6b98ef53321e3760a7fc66aab00cc6a4b" dependencies = [ "ahash", - "anyhow", "crossbeam", "document-features", "itertools 0.13.0", @@ -7530,9 +7880,9 @@ dependencies = [ [[package]] name = "re_sdk_comms" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1463c37abe42f636738a6f6d7206cefb89d410058fb4ce974f397c8ef77600" +checksum = "daced7adbfd36d957d53adbd91d365715cdb361f071d7f87e09f7df8945e926c" dependencies = [ "ahash", "crossbeam", @@ -7548,9 +7898,9 @@ dependencies = [ [[package]] name = "re_selection_panel" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369c2d8a64f3c45b9b294936e41f07662b8e58b6fc0e1bee136a2cb8c902d2ff" +checksum = "ccb90395428b8ffc4360cec7fc50f3c9b2d3b31d0a6178ca5bc40fd9557b5923" dependencies = [ "egui", "egui_tiles", @@ -7580,9 +7930,9 @@ dependencies = [ [[package]] name = "re_smart_channel" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a20571dc97dc22a89ffb34ed46f16dc917eb428e5676210161d9a8d04f92547" +checksum = "9f81a0042da6ca0acd4da2c1cbb24c3a91ed426844bacb661a86db1fa9f507d8" dependencies = [ "crossbeam", "parking_lot", @@ -7593,9 +7943,9 @@ dependencies = [ [[package]] name = "re_space_view" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e924ca2112559738dd89f87dfdc5096467357581bf40547715bec13e2d8feb" +checksum = "26660a39091d737c83cb0a78123c4b8dee73e73e033dc17b5c87fd1d31436e26" dependencies = [ "bytemuck", "egui", @@ -7615,9 +7965,9 @@ dependencies = [ [[package]] name = "re_space_view_bar_chart" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef27fe36bb26103d880b03fd899c99555f5ff4b87260869a895abdf836a2b9" +checksum = "dc2f0aa9d80e76e93004590d23750cb8e0080fb51eca597bfeee4e6a35127dbd" dependencies = [ "egui", "egui_plot", @@ -7635,32 +7985,34 @@ dependencies = [ [[package]] name = "re_space_view_dataframe" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2e067b1b6d9b3cb37190a07ea70f1459bc4b60bbda9a3f0ae9d70d4f55d0ea" +checksum = "de830f945e068304d2ca240873ad9031c2f7348818df3e430065fa8720f0c8b8" dependencies = [ + "anyhow", "egui", - "egui_extras", + "egui_table", + "itertools 0.13.0", "re_chunk_store", - "re_data_ui", - "re_entity_db", + "re_dataframe", + "re_format", "re_log", "re_log_types", "re_renderer", - "re_space_view", "re_tracing", "re_types", "re_types_core", "re_ui", "re_viewer_context", "re_viewport_blueprint", + "thiserror", ] [[package]] name = "re_space_view_spatial" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317a97cfaf7da38312f228a4025e66ab980e5157d759570466104b9986a6adc9" +checksum = "ceb9bc09708e6368be456d9c17852d8c201e4cdc8c5c8106acf1e79f73764bca" dependencies = [ "ahash", "anyhow", @@ -7669,6 +8021,7 @@ dependencies = [ "egui", "glam", "hexasphere", + "image", "itertools 0.13.0", "nohash-hasher", "once_cell", @@ -7696,18 +8049,19 @@ dependencies = [ [[package]] name = "re_space_view_tensor" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63f900c1e3c20a73c19829b35331f1faeda9b850ba98ae45ed8b11e6de6e058" +checksum = "d224f4c2768142e59a21947f8d63e4ce0c0a722b82a983d9a66de74b671a304d" dependencies = [ "anyhow", "bytemuck", "egui", "half", - "ndarray", + "ndarray 0.16.1", "re_chunk_store", "re_data_ui", "re_log_types", + "re_query", "re_renderer", "re_space_view", "re_tracing", @@ -7721,9 +8075,9 @@ dependencies = [ [[package]] name = "re_space_view_text_document" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2ccd8d3e4db454a18f583211f5330b271d3ce0e2df48f7c7574fa3311fa902" +checksum = "9fe09dff5e20965966b92c5b207aafecae6610737b9cc5053705d509cc5e5201" dependencies = [ "egui", "egui_commonmark", @@ -7738,9 +8092,9 @@ dependencies = [ [[package]] name = "re_space_view_text_log" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290a0d3ce68f7de2c2d35b098ef4b4e596a9bf0d2597529ac5087fe6fcd84b46" +checksum = "4a08e858c9d704325f3a64f998106578eaf77a8bdd8107bbf38b949a1872ca76" dependencies = [ "egui", "egui_extras", @@ -7760,9 +8114,9 @@ dependencies = [ [[package]] name = "re_space_view_time_series" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e6f6b8c948c6b165f80ee12678a2eddd1419f685b6090d9299c5a487c5dc5b" +checksum = "c8fc6ded1d0e9ad5c7351f359bca84b0ee35f2b5435e9ca44c4f6a295f3792f4" dependencies = [ "egui", "egui_plot", @@ -7784,9 +8138,9 @@ dependencies = [ [[package]] name = "re_string_interner" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57858c98a25ce888815957cfd725115b51c848512334cbf432547289a3259c42" +checksum = "aae7352fe6b1d0dc69a72880a78b0b6c3d165aeff14a7d91102c7b992e23911c" dependencies = [ "ahash", "nohash-hasher", @@ -7798,9 +8152,9 @@ dependencies = [ [[package]] name = "re_time_panel" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c37d342c332b56bb796f27cef9df9481922db4d6bc6b7ab72fb8b70923562d0" +checksum = "c6f8dbbdc031cc7f48a2c363dd916f093c213b4b845582bce7b1562dd6ec5850" dependencies = [ "egui", "itertools 0.13.0", @@ -7822,9 +8176,9 @@ dependencies = [ [[package]] name = "re_tracing" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9414e648bf8b9d64db949c3cf87d1ef742cc96687d2ef982c6b6c68f386a1401" +checksum = "515173071739470a870b960674da3b01190e90c5fd11363552934163320c57c7" dependencies = [ "puffin", "puffin_http", @@ -7834,9 +8188,9 @@ dependencies = [ [[package]] name = "re_tuid" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e45f11127f1052a784a71227e4064d695ba0275f9a9d5fe5cb595bb69e645e" +checksum = "533a55427c77321336c7c7fc58e00d0e975e6a8769f3cd586e4f630ac00cdacd" dependencies = [ "document-features", "getrandom", @@ -7847,9 +8201,9 @@ dependencies = [ [[package]] name = "re_types" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a5181eb21eb0a2efb6129b1f3b10c485dfff0b3a795077630edf609d65dc0b" +checksum = "f9808ff5fe6e2d585e51fd772bc7bf2320bfe3a38090fc3d088c1b3297c4fe8c" dependencies = [ "anyhow", "array-init", @@ -7865,7 +8219,7 @@ dependencies = [ "itertools 0.13.0", "linked-hash-map", "mime_guess2", - "ndarray", + "ndarray 0.16.1", "nohash-hasher", "once_cell", "ply-rs", @@ -7878,6 +8232,7 @@ dependencies = [ "re_tracing", "re_types_builder", "re_types_core", + "re_video", "smallvec", "thiserror", "uuid", @@ -7885,9 +8240,9 @@ dependencies = [ [[package]] name = "re_types_blueprint" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6655a40463bcd8b0b7d41f990891959a58d138a0e9a5f6928e975a6b3a03901a" +checksum = "c74036a415d781c119640fb38cd56a3e3c03f6a986769a8d81a05fb1f147b0ee" dependencies = [ "once_cell", "re_arrow2", @@ -7898,9 +8253,9 @@ dependencies = [ [[package]] name = "re_types_builder" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7222c14159d0792b728489db0eb18c09f643faee8f120e14dbee045455edd413" +checksum = "1acbe0cabc9fb933d273604660df9a264f81f2c90938077bfb089765eaeaf1e1" dependencies = [ "anyhow", "camino", @@ -7927,9 +8282,9 @@ dependencies = [ [[package]] name = "re_types_core" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aa5181a363c04196046dca82575550d5d04f2ad52d8ebdc6d36adc79a94851d" +checksum = "3d7508a5209bddc61f48f2af34e372521a568deb53d1b71faf4d17a2e6c24196" dependencies = [ "anyhow", "backtrace", @@ -7951,9 +8306,9 @@ dependencies = [ [[package]] name = "re_ui" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da743da292208320c92afe504193225709217423ef81e5dea83b223768f36fee" +checksum = "1843a36b9e7f0b4fcc9ccee3be325131b1561903b8e04fae7aff35371626b7b4" dependencies = [ "eframe", "egui", @@ -7975,11 +8330,29 @@ dependencies = [ "sublime_fuzzy", ] +[[package]] +name = "re_video" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13777ccfc3a7fc873dc20af62ca9ae56ac2d7205f5aceb7eb944199aa9f126e8" +dependencies = [ + "cfg_aliases 0.2.1", + "crossbeam", + "econtext", + "itertools 0.13.0", + "parking_lot", + "re_log", + "re_mp4", + "re_rav1d", + "re_tracing", + "thiserror", +] + [[package]] name = "re_viewer" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba13fb574b077cfb9199488393735f677d4f9716dd213b20c7294687805917c7" +checksum = "d794e124ee9dac7b01527f3da5fd4f1308c37b504b0faabf5a3b16a710a88aaa" dependencies = [ "ahash", "anyhow", @@ -8001,6 +8374,7 @@ dependencies = [ "re_build_tools", "re_chunk", "re_chunk_store", + "re_chunk_store_ui", "re_component_ui", "re_data_loader", "re_data_source", @@ -8042,7 +8416,6 @@ dependencies = [ "strum", "strum_macros", "thiserror", - "time", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -8052,14 +8425,14 @@ dependencies = [ [[package]] name = "re_viewer_context" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf37e71676137c59cc28e35ec6794b6930ecc7b236642bbdda2876b4f1637b27" +checksum = "0bf5d042c6c795264bc92c4b9a2eb8017a1e41d9aec3b1cadf195f877aee7e98" dependencies = [ "ahash", "anyhow", "arboard", - "bit-vec", + "bit-vec 0.7.0", "bitflags 2.6.0", "bytemuck", "egui", @@ -8073,7 +8446,7 @@ dependencies = [ "indexmap 2.6.0", "itertools 0.13.0", "linked-hash-map", - "ndarray", + "ndarray 0.16.1", "nohash-hasher", "once_cell", "parking_lot", @@ -8097,6 +8470,7 @@ dependencies = [ "serde", "slotmap", "smallvec", + "strum_macros", "thiserror", "uuid", "wasm-bindgen-futures", @@ -8105,9 +8479,9 @@ dependencies = [ [[package]] name = "re_viewport" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2c49597b57bce96727ce13383f7078952c6550b5b5f183e488b5e2f3a1b684" +checksum = "72496e0a1e19f68f0e488849f766da469c5779405ee4d937f4019bce1afc9a26" dependencies = [ "ahash", "egui", @@ -8133,9 +8507,9 @@ dependencies = [ [[package]] name = "re_viewport_blueprint" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd38c66cca34aca1036ea9ab0df82f5644deb7630d33393e6ff8fd2dd95827e8" +checksum = "67debc4600f205fd658d26496923e92254e2586034db3c0cf4a87baef8b80fb2" dependencies = [ "ahash", "egui", @@ -8162,9 +8536,9 @@ dependencies = [ [[package]] name = "re_web_viewer_server" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e60f63c9d651739f76ca4da19ebc5418ab43172b44b023497b4c12130d4fdb14" +checksum = "c508ab094b491bd3b8ac0c7f2bbe093483a61b6022fd1ac46560930ae2237e7f" dependencies = [ "document-features", "re_analytics", @@ -8175,9 +8549,9 @@ dependencies = [ [[package]] name = "re_ws_comms" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2071d18e2ee8a61dbda86b4f529940612ac52b2967500e16332ad388c4610e1" +checksum = "4775692897a25c8bb3687adea63f89069493e7c774661a7e94600cf8c74b91c7" dependencies = [ "anyhow", "bincode", @@ -8195,15 +8569,6 @@ dependencies = [ "tungstenite 0.20.1", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -8327,9 +8692,9 @@ dependencies = [ [[package]] name = "rerun" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e6473101c2440d9dcad8d96aef558e38f0b8bb65b3f64f050d3b37b8316ccf" +checksum = "b6ce4d70680b035fe98b076e5e2025ae015dc9ac3a08080dd87d3faa4b4653d6" dependencies = [ "anyhow", "document-features", @@ -8343,6 +8708,7 @@ dependencies = [ "re_build_tools", "re_chunk", "re_crash_handler", + "re_dataframe", "re_entity_db", "re_error", "re_format", @@ -8354,6 +8720,7 @@ dependencies = [ "re_smart_channel", "re_tracing", "re_types", + "re_video", "re_viewer", "re_web_viewer_server", "similar-asserts", @@ -8613,7 +8980,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d7e52bbc8b96db37e61a54e3f7fe3397ab109de64c772822a308cd7ac456858" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", "byteorder", "bytes", "cdr-encoding", @@ -8769,6 +9136,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "safe_arch" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" +dependencies = [ + "bytemuck", +] + [[package]] name = "safer-ffi" version = "0.1.13" @@ -8948,6 +9324,18 @@ dependencies = [ "shellexpand 2.1.2", ] +[[package]] +name = "serde-xml-rs" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782" +dependencies = [ + "log", + "serde", + "thiserror", + "xml-rs", +] + [[package]] name = "serde_assert" version = "0.7.1" @@ -9190,6 +9578,19 @@ dependencies = [ "rand_core", ] +[[package]] +name = "simba" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -9265,31 +9666,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smithay-client-toolkit" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" -dependencies = [ - "bitflags 2.6.0", - "calloop 0.12.4", - "calloop-wayland-source 0.2.0", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 0.38.34", - "thiserror", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols 0.31.2", - "wayland-protocols-wlr 0.2.0", - "wayland-scanner", - "xkeysym", -] - [[package]] name = "smithay-client-toolkit" version = "0.19.2" @@ -9297,8 +9673,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.6.0", - "calloop 0.13.0", - "calloop-wayland-source 0.3.0", + "calloop", + "calloop-wayland-source", "cursor-icon", "libc", "log", @@ -9309,8 +9685,8 @@ dependencies = [ "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols 0.32.5", - "wayland-protocols-wlr 0.3.5", + "wayland-protocols", + "wayland-protocols-wlr", "wayland-scanner", "xkeysym", ] @@ -9322,7 +9698,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "wayland-backend", ] @@ -9456,7 +9832,7 @@ version = "36.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43cf89a0cc9131279235baf8599b0e073fbcb096419204de0cc5d1a48ae73f74" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "rand", @@ -9851,6 +10227,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "to_method" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" + [[package]] name = "tobj" version = "4.0.2" @@ -10313,6 +10695,20 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "urdf-rs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074515a3e6dc230bbbdcf35830fd71b67b55ae2ac22bc4ff69d89412fc84b830" +dependencies = [ + "RustyXML", + "quick-xml 0.36.2", + "regex", + "serde", + "serde-xml-rs", + "thiserror", +] + [[package]] name = "ureq" version = "2.9.7" @@ -10480,19 +10876,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if 1.0.0", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", @@ -10517,9 +10914,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10527,9 +10924,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", @@ -10540,9 +10937,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -10605,18 +11002,6 @@ dependencies = [ "xcursor", ] -[[package]] -name = "wayland-protocols" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" -dependencies = [ - "bitflags 2.6.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - [[package]] name = "wayland-protocols" version = "0.32.5" @@ -10631,27 +11016,14 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" -dependencies = [ - "bitflags 2.6.0", - "wayland-backend", - "wayland-client", - "wayland-protocols 0.31.2", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.2.0" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd" dependencies = [ "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols 0.31.2", + "wayland-protocols", "wayland-scanner", ] @@ -10664,7 +11036,7 @@ dependencies = [ "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols 0.32.5", + "wayland-protocols", "wayland-scanner", ] @@ -10693,9 +11065,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -10703,9 +11075,9 @@ dependencies = [ [[package]] name = "web-time" -version = "0.2.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -10734,13 +11106,13 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e" dependencies = [ - "block2 0.5.1", + "block2", "core-foundation", "home", "jni", "log", "ndk-context", - "objc2 0.5.2", + "objc2", "objc2-foundation", "url", "web-sys", @@ -10782,12 +11154,11 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" -version = "0.20.1" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e37c7b9921b75dfd26dd973fdcbce36f13dfa6e2dc82aece584e0ed48c355c" +checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" dependencies = [ "arrayvec", - "cfg-if 1.0.0", "cfg_aliases 0.1.1", "document-features", "js-sys", @@ -10808,15 +11179,14 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.21.1" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39" +checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" dependencies = [ "arrayvec", - "bit-vec", + "bit-vec 0.7.0", "bitflags 2.6.0", "cfg_aliases 0.1.1", - "codespan-reporting", "document-features", "indexmap 2.6.0", "log", @@ -10828,16 +11198,15 @@ dependencies = [ "rustc-hash", "smallvec", "thiserror", - "web-sys", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "0.21.1" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172e490a87295564f3fcc0f165798d87386f6231b04d4548bca458cbbfd63222" +checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" dependencies = [ "android_system_properties", "arrayvec", @@ -10846,7 +11215,7 @@ dependencies = [ "block", "cfg_aliases 0.1.1", "core-graphics-types", - "glow", + "glow 0.13.1", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", @@ -10859,7 +11228,7 @@ dependencies = [ "log", "metal", "naga", - "ndk-sys", + "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", "parking_lot", @@ -10877,9 +11246,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.20.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef" +checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" dependencies = [ "bitflags 2.6.0", "js-sys", @@ -10899,6 +11268,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wide" +version = "0.7.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "1.1.0" @@ -10981,22 +11360,21 @@ dependencies = [ [[package]] name = "windows" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.48.5", + "windows-core 0.52.0", + "windows-targets 0.52.6", ] [[package]] name = "windows" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core", + "windows-core 0.58.0", "windows-targets 0.52.6", ] @@ -11009,26 +11387,39 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-implement" -version = "0.48.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.86", ] [[package]] name = "windows-interface" -version = "0.48.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.86", ] [[package]] @@ -11322,46 +11713,50 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.29.15" +version = "0.30.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +checksum = "0be9e76a1f1077e04a411f0b989cbd3c93339e1771cb41e71ac4aee95bfd2c67" dependencies = [ "ahash", "android-activity", "atomic-waker", "bitflags 2.6.0", + "block2", "bytemuck", - "calloop 0.12.4", - "cfg_aliases 0.1.1", + "calloop", + "cfg_aliases 0.2.1", + "concurrent-queue", "core-foundation", "core-graphics", "cursor-icon", - "icrate", + "dpi", "js-sys", "libc", - "log", "memmap2", "ndk", - "ndk-sys", - "objc2 0.4.1", - "once_cell", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", "orbclient", "percent-encoding", + "pin-project", "raw-window-handle 0.6.2", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix 0.38.34", - "smithay-client-toolkit 0.18.1", + "smithay-client-toolkit", "smol_str", + "tracing", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols 0.31.2", + "wayland-protocols", "wayland-protocols-plasma", "web-sys", "web-time", - "windows-sys 0.48.0", + "windows-sys 0.52.0", "x11-dl", "x11rb", "xkbcommon-dl", @@ -11539,12 +11934,12 @@ version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ - "async-broadcast", + "async-broadcast 0.5.1", "async-executor", "async-fs 1.6.0", "async-io 1.13.0", "async-lock 2.8.0", - "async-process", + "async-process 1.8.1", "async-recursion", "async-task", "async-trait", @@ -11569,9 +11964,71 @@ dependencies = [ "uds_windows", "winapi 0.3.9", "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", + "zbus_macros 3.15.2", + "zbus_names 2.6.1", + "zvariant 3.15.2", +] + +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast 0.7.1", + "async-executor", + "async-fs 2.1.2", + "async-io 2.3.3", + "async-lock 3.4.0", + "async-process 2.3.0", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener 5.3.1", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.29.0", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros 4.4.0", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus-lockstep" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +dependencies = [ + "zbus_xml", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.86", + "zbus-lockstep", + "zbus_xml", + "zvariant 4.2.0", ] [[package]] @@ -11585,7 +12042,20 @@ dependencies = [ "quote", "regex", "syn 1.0.109", - "zvariant_utils", + "zvariant_utils 1.0.1", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.86", + "zvariant_utils 2.1.0", ] [[package]] @@ -11596,7 +12066,31 @@ checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" dependencies = [ "serde", "static_assertions", - "zvariant", + "zvariant 3.15.2", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus_xml" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" +dependencies = [ + "quick-xml 0.30.0", + "serde", + "static_assertions", + "zbus_names 3.0.0", + "zvariant 4.2.0", ] [[package]] @@ -11994,6 +12488,7 @@ version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -12069,7 +12564,20 @@ dependencies = [ "serde", "static_assertions", "url", - "zvariant_derive", + "zvariant_derive 3.15.2", +] + +[[package]] +name = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive 4.2.0", ] [[package]] @@ -12082,7 +12590,20 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "zvariant_utils", + "zvariant_utils 1.0.1", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.86", + "zvariant_utils 2.1.0", ] [[package]] @@ -12095,3 +12616,14 @@ dependencies = [ "quote", "syn 1.0.109", ] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.86", +] diff --git a/node-hub/dora-rerun/Cargo.toml b/node-hub/dora-rerun/Cargo.toml index 8cdf24249..930d5d702 100644 --- a/node-hub/dora-rerun/Cargo.toml +++ b/node-hub/dora-rerun/Cargo.toml @@ -29,4 +29,4 @@ pyo3 = { workspace = true, features = [ [lib] name = "dora_rerun" path = "src/lib.rs" -crate-type = ["rlib", "cdylib"] +crate-type = ["lib", "cdylib"] diff --git a/node-hub/dora-rerun/README.md b/node-hub/dora-rerun/README.md index 7e3305e6d..5a6ee21ff 100644 --- a/node-hub/dora-rerun/README.md +++ b/node-hub/dora-rerun/README.md @@ -56,6 +56,14 @@ Make sure to name the dataflow as follows: > [!IMPORTANT] > Make sure that the urdf file name correspond to your dataflow object name otherwise, it will not be able to link to the corresponding entity. +> [!WARNING] +> Please make sure to review the following gotchas: +> +> - Filename included in URDF are going to be relative to your dataflow working directory instead of the URDF path: https://github.com/rerun-io/rerun-loader-python-example-urdf/issues/13 +> - URDF loader is not on pip and so you need to install it yourself https://github.com/rerun-io/rerun-loader-python-example-urdf/issues/12 +> - There is no warning if a file is not logged properly. https://github.com/rerun-io/rerun-loader-python-example-urdf/pull/14 +> - There is no transparent color in rerun. https://github.com/rerun-io/rerun/issues/1611 + ## Configurations - RERUN_MEMORY_LIMIT: Rerun memory limit From aa63796079402b870a67029b78778bc48a36a183 Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Mon, 11 Nov 2024 04:40:35 +0100 Subject: [PATCH 7/7] Make dataflow name more explicit --- examples/piper/dataflow.yml | 33 ------------------- ...{piper_inference.py => dummy_inference.py} | 0 ...inference.yml => play_dummy_inference.yml} | 2 +- 3 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 examples/piper/dataflow.yml rename examples/piper/{piper_inference.py => dummy_inference.py} (100%) rename examples/piper/{play_inference.yml => play_dummy_inference.yml} (96%) diff --git a/examples/piper/dataflow.yml b/examples/piper/dataflow.yml deleted file mode 100644 index 1863a53ae..000000000 --- a/examples/piper/dataflow.yml +++ /dev/null @@ -1,33 +0,0 @@ -nodes: - - id: piper_left - path: /home/agilex/1ms.ai/piper_sdk/dora_piper.py - _unstable_deploy: - machine: piper - inputs: - tick: dora/timer/millis/20 - outputs: - - jointstate - env: - CAN_BUS: can_left - - - id: piper_right - path: /home/agilex/1ms.ai/piper_sdk/dora_piper.py - _unstable_deploy: - machine: piper - inputs: - tick: dora/timer/millis/20 - outputs: - - jointstate - env: - CAN_BUS: can_right - - - id: rerun - path: dora-rerun - inputs: - jointstate_piper_left: piper_left/jointstate - jointstate_piper_right: piper_right/jointstate - env: - piper_left.urdf: /home/peter/Documents/work/dora/node-hub/dora-rerun/assets/piper_left.urdf - piper_right.urdf: /home/peter/Documents/work/dora/node-hub/dora-rerun/assets/piper_right.urdf - piper_left.transform: 0 0.2 0 - piper_right.transform: 0 -0.2 0 diff --git a/examples/piper/piper_inference.py b/examples/piper/dummy_inference.py similarity index 100% rename from examples/piper/piper_inference.py rename to examples/piper/dummy_inference.py diff --git a/examples/piper/play_inference.yml b/examples/piper/play_dummy_inference.yml similarity index 96% rename from examples/piper/play_inference.yml rename to examples/piper/play_dummy_inference.yml index 48b1cee3f..6169f51d5 100644 --- a/examples/piper/play_inference.yml +++ b/examples/piper/play_dummy_inference.yml @@ -1,6 +1,6 @@ nodes: - id: piper - path: piper_inference.py + path: dummy_inference.py inputs: tick: dora/timer/millis/20 outputs: