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::JointContainer;
use k::KinematicChain;
use k::ChainContainer;
use k::urdf::FromUrdf;
fn main() {
let robot = k::LinkTree::from_urdf_file::<f32, _>("urdf/sample.urdf").unwrap();
let mut arm = robot.new_chain("l_wrist2").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
);
}