All Projects → openrr → K

openrr / K

Licence: apache-2.0
k: Kinematics Library for rust-lang

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to K

Rigidbodydynamics.jl
Julia implementation of various rigid body dynamics and kinematics algorithms
Stars: ✭ 184 (+178.79%)
Mutual labels:  robotics, kinematics
Robotics Toolbox Python
Robotics Toolbox for Python
Stars: ✭ 369 (+459.09%)
Mutual labels:  robotics, kinematics
Pybotics
The Python Toolbox for Robotics
Stars: ✭ 192 (+190.91%)
Mutual labels:  robotics, kinematics
Ikbt
A python package to solve robot arm inverse kinematics in symbolic form
Stars: ✭ 97 (+46.97%)
Mutual labels:  robotics, kinematics
Hexapod Robot Simulator
A hexapod robot simulator built from first principles
Stars: ✭ 577 (+774.24%)
Mutual labels:  robotics, kinematics
Kinematics
🤖 JavaScript 6DOF robot kinematics library
Stars: ✭ 187 (+183.33%)
Mutual labels:  robotics, kinematics
Handeye calib camodocal
Easy to use and accurate hand eye calibration which has been working reliably for years (2016-present) with kinect, kinectv2, rgbd cameras, optical trackers, and several robots including the ur5 and kuka iiwa.
Stars: ✭ 364 (+451.52%)
Mutual labels:  robotics, kinematics
Robopy
Robopy is a python port for Robotics Toolbox in Matlab created by Peter Corke
Stars: ✭ 186 (+181.82%)
Mutual labels:  robotics, kinematics
Pinocchio
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Stars: ✭ 432 (+554.55%)
Mutual labels:  robotics, kinematics
Rl
The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control.
Stars: ✭ 391 (+492.42%)
Mutual labels:  robotics, kinematics
Wave geometry
Manifold geometry with fast automatic derivatives and coordinate frame semantics checking
Stars: ✭ 92 (+39.39%)
Mutual labels:  robotics, kinematics
Robotics Toolbox Matlab
Robotics Toolbox for MATLAB
Stars: ✭ 601 (+810.61%)
Mutual labels:  robotics, kinematics
kinpy
Simple kinematics calculation toolkit for robotics
Stars: ✭ 48 (-27.27%)
Mutual labels:  robotics, kinematics
Hexapod
Blazing fast hexapod robot simulator for the web.
Stars: ✭ 370 (+460.61%)
Mutual labels:  robotics, kinematics
Dart
Dynamic Animation and Robotics Toolkit
Stars: ✭ 596 (+803.03%)
Mutual labels:  robotics, kinematics
Bullet3
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.
Stars: ✭ 8,714 (+13103.03%)
Mutual labels:  robotics, kinematics
Holodeck Engine
High Fidelity Simulator for Reinforcement Learning and Robotics Research.
Stars: ✭ 48 (-27.27%)
Mutual labels:  robotics
Ros2 java
Java and Android bindings for ROS2
Stars: ✭ 60 (-9.09%)
Mutual labels:  robotics
Anki.vector.sdk
Anki Vector .NET SDK
Stars: ✭ 47 (-28.79%)
Mutual labels:  robotics
Ab3dmot
(IROS 2020, ECCVW 2020) Official Python Implementation for "3D Multi-Object Tracking: A Baseline and New Evaluation Metrics"
Stars: ✭ 1,032 (+1463.64%)
Mutual labels:  robotics

k: Kinematics library for rust-lang

Build and Test crates.io codecov docs

k has below functionalities.

  1. Forward kinematics
  2. Inverse kinematics
  3. URDF Loader

k uses nalgebra as math library.

See Document and examples/ for more details.

API is unstable.

Requirements to build examples

sudo apt install g++ cmake xorg-dev libglu1-mesa-dev

IK example with GUI

cargo run --release --example interactive_ik

ik_sample

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

use k::prelude::*;

fn main() {
    // Load urdf file
    let chain = k::Chain::<f32>::from_urdf_file("urdf/sample.urdf").unwrap();
    println!("chain: {}", chain);

    // Set initial joint angles
    let angles = vec![0.2, 0.2, 0.0, -1.0, 0.0, 0.0, 0.2, 0.2, 0.0, -1.0, 0.0, 0.0];

    chain.set_joint_positions(&angles).unwrap();
    println!("initial angles={:?}", chain.joint_positions());

    let target_link = chain.find("l_wrist_pitch").unwrap();

    // Get the transform of the end of the manipulator (forward kinematics)
    chain.update_transforms();
    let mut target = target_link.world_transform().unwrap();

    println!("initial target pos = {}", target.translation);
    println!("move z: +0.1");
    target.translation.vector.z += 0.1;

    // Create IK solver with default settings
    let solver = k::JacobianIkSolver::default();

    // Create a set of joints from end joint
    let arm = k::SerialChain::from_end(target_link);
    // solve and move the manipulator angles
    solver.solve(&arm, &target).unwrap();
    println!("solved angles={:?}", chain.joint_positions());

    chain.update_transforms();
    let solved_pose = target_link.world_transform().unwrap();
    println!("solved target pos = {}", solved_pose.translation);
}

Structure of API

Top level interface is Chain struct. It contains Nodes and they have the relations between nodes (parent/children). Actual data (joint angle(position), transform between nodes) is stored in Joint object inside nodes.

ik_sample

You can get local/world transform of nodes. See below figure to understand what is the node's local_transfrom() and world_transfrom().

ik_sample

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].