项目作者: SinaMirrazavi

项目描述 :
Quadratic program based Inverse kinematic solver for mutli-robotic arms with respect to the kinematic and self-collision avoidance constraints
高级语言: C++
项目地址: git://github.com/SinaMirrazavi/QP_IK_solver.git
创建时间: 2017-01-30T12:13:36Z
项目社区:https://github.com/SinaMirrazavi/QP_IK_solver

开源协议:GNU Lesser General Public License v3.0

下载


QP_IK_solver

This repository includes the packages and instructions to solve the centralized inverse kinematic problem, formulated as a quadratic program (QP) and solved in real-time. You can find the paper here:

and the corresponding video here:

Dependencies

Eigen http://eigen.tuxfamily.org/index.php?title=Main_Page

Svm_grad https://github.com/nbfigueroa/SVMGrad.git

Sg_differentiation https://github.com/epfl-lasa/sg_differentiation.git

Nlopt http://ab-initio.mit.edu/wiki/index.php/NLopt

CVXGEN http://cvxgen.com/docs/index.html (Due to the license, I needed to remove CVxgen, please follow the steps in the mentioned webpage to get the CVxgen files.)

VERY Very important NOTE: This package will not work without CVXGEN! You must the files and put them in a folder named cvxgen.

Features:

  • Handling the kinematic constraints of the robots.
  • Inequity constraint (We used it for considering the self-collision avoidance (SCA) constraints).
  • This package provides three options for solving the inverse kinematic:

How to run

Initialization:

1-Initialize the IK solver:
1-1 If You don’t want to use the SCA constraint

  1. Initialize(Number of robots ,Time sample ,Solver_type={Numerical=0,Dynamical},Solver_level={Velocity_level=0,Acceleration_level},Super_constraint={True, False})

1-2 If You want to use the SCA constraint

  1. Initialize(Number of robots ,Time sample ,Solver_type={Numerical=0,Dynamical},Solver_level={Velocity_level=0,Acceleration_level},Super_constraint={True, False},svm_filename)

The Dynamical solver uses the LVI-based primal-dual Dynamical system solver and the default Numerical solver is CVXGEN. If you want to change it to Nlopt you need to modify qp_ik_solver.h. svm_filename is a path to the learned SVR collision configurations.
2- Initialize each robot:

  1. Initialize_robot(index of the robot,Number of links,Number of end-effector constraints,W,Upper bound of joints' position, Lower bound of joints' position,Upper bound of joints' velocity,Lower bound of joints' velocity, Upper bound of joints' acceleration, Lower bound of joints' acceleration)

3- Finalize initialization

  1. Finalize_Initialization()

In the loop:

4- In the loop:

  1. set_jacobian(index of the robot,Jacobian of the end-effector)
  2. set_jacobian_links(index of the robot,Jacobian and Cartesian position of all the links)
  3. set_state(index of the rooot,current joint position,current joint velocity);
  4. set_desired(index of the robot,Desired end-effector state);
  5. Solve();
  6. get_state(index of the robot, desired joint velocity);

Please cite these papers if you are using this toolbox:
@article{mirrazavi2018unified,
title={A unified framework for coordinated multi-arm motion planning},
author={Mirrazavi Salehian, Seyed Sina and Figueroa, Nadia and Billard, Aude},
journal={The International Journal of Robotics Research},
pages={0278364918765952},
publisher={SAGE Publications Sage UK: London, England}
}

For more information contact Sina Mirrazavi.