Resolving redundancy

In contrast to joint space motion, cartesian motion specifications may be ambiguous in some cases: a goal Frame can be approached in several different ways by a Cartesian PTP instruction, due to the kinematic redundancy of most robots. The robot control will in this case choose an axis configuration that minimizes the total motion of all axes. This behavior may not be desired in many practical applications. To resolve this, the Robotics API provides users with the possibility to specify a set of so called hint joints. This set of joints is given as an argument to methods of e.g. PtpInterface, in addition to the Frame specifying the actual motion goal. The robot executing the motion will choose the kinematic solution at the goal position that has minimal difference to the hint joints instead of the current robot joint positions. Note that for determining this, the hint joint parameter must contain hint values for all axes of the robot. All of those values are considered when determining the best kinematic solution. In cases where a robot should approach a point that is equal or close to a point the robot has reached before, the teaching methods presented in Section 2.3.6 can be used instead of explicitely providing hint joints.

When performing path motions (e.g. linear and spline motion), the behavior of traditional six-axis robots is usually deterministic and free of ambiguities: As the cartesian path is clearly fixed between start and end point, there is no freedom to decide for other than one axis configuration at any point without leaving the specified path. However, in case of the Light Weight Robot even path motions do not fix kinematic redundancy, as the LWR’s 7th axis allows for a so-called nullspace motion at any point in its working space. The nullspace motion can best be thought of as ”‘elbow movement”’, which is not possible with six-axis robots.

To make use of this additional redundancy, and to fix ambiguities where necessary, the kinematic parameter Alpha was introduced. Alpha specifies the rotation of the LWR’s elbow relative to its upright position. In the Robotics API, Alpha can be specified for any LWR motion by supplying an AlphaParameter to the method creating the motion Activity.

The following code shows the usage of AlphaParameter. Figure 2.4 demonstrates the resulting robot poses.

// lwr is a robot of type LWR 
PtpInterface motion = lwr.use(PtpInterface.class); 
// goal frame 
Frame goal = lwr.getBase().plus(0, 0.5, 0.5, 0, 0, Math.PI); 
// approach goal with Alpha value of 0 (i.e. upright elbow) 
motion.ptp(goal, new AlphaParameter(0)).execute(); 
// approach same goal with different Alpha value 
motion.ptp(goal, new AlphaParameter(1)).execute();

Figure 2.4: Same Frame approached with two different Alpha parameters: 0 (left) and 1 (right).