diff --git a/.gitignore b/.gitignore index fc1280f..ea1273f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ Cargo.lock # for emacs *~ + +# JetBrains +.idea diff --git a/Cargo.toml b/Cargo.toml index e291b0f..ddb71a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,8 +19,8 @@ serde = ["nalgebra/serde-serialize", "dep:serde"] # Note: nalgebra, simba, urdf-rs, and serde are public dependencies. [dependencies] -nalgebra = "0.30" -simba = "0.7" +nalgebra = "0.33" +simba = "0.9" thiserror = "2.0" tracing = "0.1" urdf-rs = "0.9" diff --git a/benches/fk.rs b/benches/fk.rs index c407921..d38a9b5 100644 --- a/benches/fk.rs +++ b/benches/fk.rs @@ -99,7 +99,7 @@ where .iter() .map(|range| match range { Some(range) => { - (range.max.clone() - range.min.clone()) * na::convert(rand::random()) + (range.max.clone() - range.min.clone()) * na::convert(rand::random::()) + range.min.clone() } None => na::convert::(rand::random::() - 0.5) * na::convert(2.0 * PI), diff --git a/examples/interactive_ik.rs b/examples/interactive_ik.rs index ce49532..d1e204a 100644 --- a/examples/interactive_ik.rs +++ b/examples/interactive_ik.rs @@ -26,7 +26,7 @@ fn main() { use kiss3d::light::Light; use kiss3d::scene::SceneNode; use kiss3d::window::Window; - use na::{Isometry3, Point3, Translation3, UnitQuaternion, Vector3}; + use na::{Isometry3, Translation3, UnitQuaternion, Vector3}; #[derive(Debug, Parser)] struct Opt { @@ -114,9 +114,9 @@ fn main() { } let x_ind = j as f32 - 2.5; let y_ind = i as f32 - 2.5; - let trans = Isometry3::from_parts( - Translation3::new(size * x_ind, 0.0, size * y_ind), - UnitQuaternion::from_euler_angles(0.0, -1.57, -1.57), + let trans = kiss3d::nalgebra::Isometry3::from_parts( + kiss3d::nalgebra::Translation3::new(size * x_ind, 0.0, size * y_ind), + kiss3d::nalgebra::UnitQuaternion::from_euler_angles(0.0, -1.57, -1.57), ); c0.set_local_transformation(trans); panels.push(c0); @@ -145,6 +145,24 @@ fn main() { vec![c_fixed, c0, c1, c2, c3, c4, c5, c6] } + fn to_kiss3d_transform( + transform: &nalgebra::Isometry3, + ) -> kiss3d::nalgebra::Isometry3 { + let target_translation = kiss3d::nalgebra::Translation3::new( + transform.translation.x, + transform.translation.y, + transform.translation.z, + ); + let target_rotation = kiss3d::nalgebra::Quaternion::new( + transform.rotation.w, + transform.rotation.i, + transform.rotation.j, + transform.rotation.k, + ); + let target_rotation = kiss3d::nalgebra::UnitQuaternion::from_quaternion(target_rotation); + kiss3d::nalgebra::Isometry3::from_parts(target_translation, target_rotation) + } + let opt = Opt::parse(); let root = create_joint_with_link_array(); let arm = k::SerialChain::new_unchecked(k::Chain::from_root(root)); @@ -170,8 +188,8 @@ fn main() { let mut target = end.world_transform().unwrap(); let mut c_t = window.add_sphere(0.05); c_t.set_color(1.0, 0.2, 0.2); - let eye = Point3::new(0.5f32, 1.0, 2.0); - let at = Point3::new(0.0f32, 0.0, 0.0); + let eye = kiss3d::nalgebra::Point3::new(0.5f32, 1.0, 2.0); + let at = kiss3d::nalgebra::Point3::new(0.0f32, 0.0, 0.0); let mut arc_ball = ArcBall::new(eye, at); let mut solver = JacobianIkSolver::default(); //solver.set_nullspace_function(Box::new(|vec| vec.iter().map(|x| -x).collect())); @@ -216,9 +234,9 @@ fn main() { .unwrap_or_else(|err| { println!("Err: {err}"); }); - c_t.set_local_transformation(target); + c_t.set_local_transformation(to_kiss3d_transform(&target)); for (i, trans) in arm.update_transforms().iter().enumerate() { - cubes[i].set_local_transformation(*trans); + cubes[i].set_local_transformation(to_kiss3d_transform(trans)); } } } diff --git a/examples/interactive_ik_scara.rs b/examples/interactive_ik_scara.rs index f85e3de..a7dd456 100644 --- a/examples/interactive_ik_scara.rs +++ b/examples/interactive_ik_scara.rs @@ -25,7 +25,7 @@ fn main() { use kiss3d::light::Light; use kiss3d::scene::SceneNode; use kiss3d::window::Window; - use na::{Isometry3, Point3, Translation3, UnitQuaternion, Vector3}; + use na::{Isometry3, Translation3, UnitQuaternion, Vector3}; fn create_joint_with_link_array() -> k::Node { let fixed: k::Node = NodeBuilder::new() @@ -83,9 +83,9 @@ fn main() { } let x_ind = j as f32 - 2.5; let y_ind = i as f32 - 2.5; - let trans = Isometry3::from_parts( - Translation3::new(size * x_ind, 0.0, size * y_ind), - UnitQuaternion::from_euler_angles(0.0, -1.57, -1.57), + let trans = kiss3d::nalgebra::Isometry3::from_parts( + kiss3d::nalgebra::Translation3::new(size * x_ind, 0.0, size * y_ind), + kiss3d::nalgebra::UnitQuaternion::from_euler_angles(0.0, -1.57, -1.57), ); c0.set_local_transformation(trans); panels.push(c0); @@ -108,6 +108,24 @@ fn main() { vec![c_fixed, c0, c1, c2, c3] } + fn to_kiss3d_transform( + transform: &nalgebra::Isometry3, + ) -> kiss3d::nalgebra::Isometry3 { + let target_translation = kiss3d::nalgebra::Translation3::new( + transform.translation.x, + transform.translation.y, + transform.translation.z, + ); + let target_rotation = kiss3d::nalgebra::Quaternion::new( + transform.rotation.w, + transform.rotation.i, + transform.rotation.j, + transform.rotation.k, + ); + let target_rotation = kiss3d::nalgebra::UnitQuaternion::from_quaternion(target_rotation); + kiss3d::nalgebra::Isometry3::from_parts(target_translation, target_rotation) + } + let root = create_joint_with_link_array(); let arm = k::SerialChain::new_unchecked(k::Chain::from_root(root)); @@ -132,8 +150,8 @@ fn main() { let mut target = end.world_transform().unwrap(); let mut c_t = window.add_sphere(0.05); c_t.set_color(1.0, 0.2, 0.2); - let eye = Point3::new(0.5f32, 1.0, 2.0); - let at = Point3::new(0.0f32, 0.0, 0.0); + let eye = kiss3d::nalgebra::Point3::new(0.5f32, 1.0, 2.0); + let at = kiss3d::nalgebra::Point3::new(0.0f32, 0.0, 0.0); let mut arc_ball = ArcBall::new(eye, at); let solver = JacobianIkSolver::default(); @@ -192,9 +210,9 @@ fn main() { println!("Err: {err}"); }); } - c_t.set_local_transformation(target); + c_t.set_local_transformation(to_kiss3d_transform(&target)); for (i, trans) in arm.update_transforms().iter().enumerate() { - cubes[i].set_local_transformation(*trans); + cubes[i].set_local_transformation(to_kiss3d_transform(trans)); } } }