/HIRO_Panda_TRAC_IK

Inverse Kinematics Engine for the Franka Emika Panda for Cartesian Pose Control.

Primary LanguageJupyter NotebookGNU Lesser General Public License v2.1LGPL-2.1

Franka Panda TracIK Solver

A Cartesian pose controller in the form of a ROS package, developed at the HIRO Lab at CU Boulder.

Details

This package uses Trac_IK, an IK solver with a solve rate of 99.88% for the Panda. From there, the user can specify the trajectory method in which the robot moves from one pose to another.

There's an accompanying Jupyter Notebook (here) for Catmull-Rom Splines, which is the best (smoothest) trajectory method for the Panda in this repo. A short document about these Splines can be found here.

Note: This package has been soley tested for the real robot, and doesn't work in simulation. However, a possible future extension of this work would be for simulation!

Installation, Building, and Usage

Requires

  • trac_ik: The inverse kinematics package compatible with Franka Panda (and a variety of other robot arms)
  • libfranka and franka_ros: These libraries are needed to get started on the real Panda. For detailed instructions how to install, check out this link here for installation.

Steps

# create a new catkin workspace...

mkdir -p catkin_ws/src
cd catkin_ws/src
git clone https://bitbucket.org/traclabs/trac_ik.git
git clone https://github.com/HIRO-group/HIRO_Panda_TRAC_IK

cd ..

catkin build

source devel/setup.bash

User Information

In order to run through the IK:

source devel/setup.bash

roslaunch hiro_panda_ik hiro_panda_ik_controller.launch robot_ip:=<robot-url> trajectory_method:=<1,2,3 or 4>
  • The trajectory method is the method which is used to move the arm after the inverse kinematics are calculated. The options are:

    • 1: Constant velocity to each point (default option when trajectory_method is not provided)
    • 2: Increase velocity at a constant rate, then maintain max rate, then decrease at constant rate once near end of trajectory ('trapezoid' method)
    • 3: Catmull-Rom splines where velocity is calculated as a function of position (smoothest and best method)
  • To publish to the topic:

rostopic pub -1 /hiro_panda/goto_pose geometry_msgs/Pose "{position:{ x: 0.4, y: 0.4, z: 0.5}, orientation:{ x: 0.0, y: 0.0, z: 0.0, w: 1.0}}"
  • The above example will not changed the orientation of the arm; it will move it to the desired 3-d coordinates. Make sure that the orientation (quaternion) normalizes to 1.