k
: Kinematics library for rust-lang
k
has below functionalities.
- Forward kinematics
- Inverse kinematics
- URDF Loader
k
uses nalgebra as math library.
See Document and examples/ for more details.
IK example with GUI
cargo run --release --example interactive_ik
Push below keys to move the end of the manipulator.
f
: forward
b
: backward
p
: up
n
: down
l
: left
r
: right
z
: reset the manipulator state.
Create link tree from urdf and solve IK
extern crate k;
use k::InverseKinematicsSolver;
use k::HasJoints;
use k::Manipulator;
use k::urdf::FromUrdf;
fn main() {
let robot = k::LinkTree::<f32>::from_urdf_file("urdf/sample.urdf").unwrap();
let mut arm = k::Manipulator::from_link_tree("l_wrist2", &robot).unwrap();
let angles = vec![0.8, 0.2, 0.0, -1.5, 0.0, -0.3];
arm.set_joint_angles(&angles).unwrap();
println!("initial angles={:?}", arm.joint_angles());
let mut target = arm.end_transform();
println!("initial target pos = {}", target.translation);
println!("move z: +0.2");
target.translation.vector[2] += 0.2;
let solver = k::JacobianIKSolverBuilder::new().finalize();
solver.solve(&mut arm, &target).unwrap_or_else(|err| {
println!("Err: {}", err);
0.0f32
});
println!("solved angles={:?}", arm.joint_angles());
println!(
"solved target pos = {}",
arm.end_transform().translation
);
}