ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Set end effector position of Baxter Robot using 3D cartesian Data

asked 2017-04-06 04:44:26 -0500

Glass_Eater gravatar image

updated 2017-04-11 16:15:52 -0500

I want to ask if it is possible to set the arm position of a Baxter robot by stating the 3D Cartesian coordinate position of the end effector instead of using joint angle of each joint.If it is possible to do this or if you have any ideas they are all welcome.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2017-04-11 18:05:36 -0500

updated 2017-04-11 18:07:09 -0500

Fundamentally, that is a problem that requires "inverse kinematics" (often called IK). The general IK problem is to find a set of joint angles that produce a desired end-effector position (an XYZ location) and/or orientation (could be a quaternion, some set of Euler angles, or a rotation matrix). A position and orientation together is often referred to as a pose. For a robot like Baxter with 7 degrees-of-freedom in a single arm, if you choose a feasible pose (one that is actually reachable) there are actually an infinite number of solutions to this problem, and deciding which solution to choose and how to find it is not necessarily a trivial task.

Baxter's API offers no direct way of controlling the arm in Cartesian space, however, they do give you tools that would allow you to do what you want. For example, you could use Baxter's built-in IK service to solve for a joint angle solution, and then you could use something like Limb.move_to_joint_positions to command the arm to that set of joint angles.

Note that there are many other tools available that might also be useful for solving the IK problem. KDL, which is released as a ROS package, has libraries for calculating IK solutions with a variety of different constraints. These library functions are available in C++ and Python through PyKDL. There is also pykdl_utils (and baxter_pykdl) that have nice Python interfaces for calculating IK with KDL.

A properly configured MoveIt! robot offers several ways of computing an IK solution (there are services and API calls). MoveIt! uses different plugins to compute IK, but commonly people use KDL, IKFast, or trac_ik as the backend for MoveIt! IK computations.

If you would like an interface that directly moves the EE in Cartesian directions (likely while keeping the orientation fixed, based on your question), you need to learn about manipulator Jacobians. This topic is often called operational space control. I'd suggest checking out section 11.3 of Modern Robotics: Mechanics, Planning, and Control by Lynch and Park (PDF online) for a comprehensive description of using joint velocities to track desired EE poses. There are many other great resources available as well.

edit flag offensive delete link more


@jarvisschultz thanks for ur answer. When trying to move the arm using the position, the orientation of the arm is also needed. I want to ask if there is any way to move the arm without having to use the orientation or if there is a program that can automatically calculate the orientation.

Glass_Eater gravatar image Glass_Eater  ( 2017-04-12 17:12:08 -0500 )edit

You could always just use the arm's current orientation or a fixed one. It is also possible to solve IK without specifying orientation in several of the packages that I previously mentioned. Be aware however, that if you don't specify an orientation, you may end up with very unfortunate orientations

jarvisschultz gravatar image jarvisschultz  ( 2017-04-12 18:08:26 -0500 )edit

Question Tools

1 follower


Asked: 2017-04-06 04:44:10 -0500

Seen: 1,323 times

Last updated: Apr 11 '17