Ask Your Question

what might cause the shoulder_lift_joint not to go all the way up?

asked 2011-06-18 20:58:54 -0600

liuhuanjim013 gravatar image

updated 2014-11-22 17:05:23 -0600

ngrennan gravatar image


I'm using JointTrajectoryAction to control the arm to follow a trajectory that can be executed well by openrave's controller. Most of the time, it works. But I found one case where the trajectory can be executed by openrave's controller but not JointTrajectoryActionController.

Here's a video showing the problem:

The video first shows the ideal motion of the robot following a trajectory. Then it shows the result of the trajectory being executed on the robot via JointTrajectoryAction, where the shoulder_lift_joint does not reach its goal.

Below is a script showing the problematic motion:

The problematic trajectory file:

After the motion completes, the result of /l_arm_controller/state is:

  seq: 422241
    secs: 4226
    nsecs: 27000000
  frame_id: ''
joint_names: ['l_shoulder_pan_joint', 'l_shoulder_lift_joint', 'l_upper_arm_roll_joint', 'l_elbow_flex_joint', 'l_forearm_roll_joint', 'l_wrist_flex_joint', 'l_wrist_roll_joint']
  positions: [-0.45063500000000001, -0.453629, 2.9684300000000001, -1.73685, 2.6124100000000001, -1.3944000000000001, 0.28170399999999973]
  velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
  accelerations: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    secs: 0
    nsecs: 0
  positions: [-0.4506183813835607, -0.3535970257554899, 2.9684618999661581, -1.7368655244971523, 2.6124013457752877, -1.3943968838867686, 0.28170416664188558]
  velocities: [-0.0028369264248514835, 0.0021461982864228284, 0.0030925275806860746, 0.0022533051752136402, -0.00019810275617700331, -0.0011666050558722749, 0.00023889403521337726]
  accelerations: []
    secs: 0
    nsecs: 0
  positions: [1.6618616439312284e-05, 0.1000319742445101, 3.1899966157933335e-05, -1.5524497152252792e-05, -8.6542247124121729e-06, 3.1161132314494466e-06, 1.6664188584591955e-07]
  velocities: [-0.0028369264248514835, 0.0021461982864228284, 0.0030925275806860746, 0.0022533051752136402, -0.00019810275617700331, -0.0011666050558722749, 0.00023889403521337726]
  accelerations: []
    secs: 0
    nsecs: 0

The trajectory does not contain a point that asks the shoulder_lift_joint to go beyond its soft limit defined in the urdf file which is ~ [-.52, 1.39], but the shoulder_lift_joint still stops at -.35 when it's commended to go to -.45.

This happens on both the simulated robot in Gazebo and the real robot.

I tried slowing down the trajectory as well (x10 times), but the shoulder_lift_joint still didn't go to -.45.

Below is the output of /joint_states when the motion completes. The effort for /l_shoulder_lift_joint is -0.0023171897976062093.

The arm also floats in a neutral position when it's not powered.

  seq: 10891
    secs: 117
    nsecs: 22000000
  frame_id: ''
name: ['fl_caster_rotation_joint', 'fl_caster_l_wheel_joint', 'fl_caster_r_wheel_joint', 'fr_caster_rotation_joint', 'fr_caster_l_wheel_joint', 'fr_caster_r_wheel_joint', 'bl_caster_rotation_joint', 'bl_caster_l_wheel_joint', 'bl_caster_r_wheel_joint', 'br_caster_rotation_joint', 'br_caster_l_wheel_joint', 'br_caster_r_wheel_joint', 'torso_lift_joint', 'head_pan_joint', 'head_tilt_joint', 'laser_tilt_mount_joint', 'r_upper_arm_roll_joint', 'r_shoulder_pan_joint', 'r_shoulder_lift_joint', 'r_forearm_roll_joint', 'r_elbow_flex_joint', 'r_wrist_flex_joint', 'r_wrist_roll_joint', 'r_gripper_joint', 'r_gripper_l_finger_joint', 'r_gripper_r_finger_joint', 'r_gripper_r_finger_tip_joint', 'r_gripper_l_finger_tip_joint', 'l_upper_arm_roll_joint', 'l_shoulder_pan_joint', 'l_shoulder_lift_joint', 'l_forearm_roll_joint', 'l_elbow_flex_joint', 'l_wrist_flex_joint', 'l_wrist_roll_joint', 'l_gripper_joint', 'l_gripper_l_finger_joint', 'l_gripper_r_finger_joint', 'l_gripper_r_finger_tip_joint', 'l_gripper_l_finger_tip_joint']
position: [-1.8911007431121618e-05, 0.017315724103188046, 0.018450151123038161, -4.2352233703191189e-05, 0.015518171855746665, 0.01503525977753295, 9.623874763775575e-06, 0.013270571780459761, 0.0121751864435371, -2.3722479977728028e-05, 0.0079390893900841419, 0.0078856620877401085, 0.067548587109680494, -0.0030113676917249421, 0.36397195459308573, -0.16406783417664261, -9.0504940351010532e-06, -1.5707688803932429, 1.013406538774575e-05, 6.0780678108329766e-06, -0.14997776679068586, -0.10000287454784118, 4.2789370331419718e-06, 0.0015572890254982397, 0.010626329318313282, 0.010626329318313282, 0.010626329318313282, 0.010626329318313282, 2.9684229023394977, -0.45064403278428422, -0.35359079109074809, 2.612415939749134, -1.7368340148522607, -1.3944002154008768, 0.2817094449786417, 0 ...
edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2011-06-28 07:46:07 -0600

hsu gravatar image

updated 2011-06-28 07:47:50 -0600

take shoulder lift urdf for example, you can see 'shoulder_lift_joint' limits are:

  <!-- Limits updated from Function's CAD values as of 2009_02_24 (link_data.xls) -->
  <limit lower="-0.5236" upper="1.3963"
         effort="30" velocity="${VELOCITY_LIMIT_SCALE*3.47}" /> <!-- alpha tested velocity and effort limits -->

with safety controller

  <safety_controller k_position="100" k_velocity="10"
                     soft_lower_limit="${-0.5236+0.17}" soft_upper_limit="${1.3963-0.10}" />

so safety controllers will start imposing limits before the hardware limits [-0.5236, 1.3963]. In this case, a counter force is applied in the range of [-0.3536, 1.2963] by the safety controller.


edit flag offensive delete link more


Thanks John! I thought the <limit> tag was already the soft limit. Problem solved! The dae file generated by openrave does not take into account the <safety_controller> tag.
liuhuanjim013 gravatar imageliuhuanjim013 ( 2011-06-28 07:57:28 -0600 )edit
Hi John, one more question: how do I get the soft limits? I couldn't find a ros parameter for it. Is there any way other than using the urdf API to get the soft limits?
liuhuanjim013 gravatar imageliuhuanjim013 ( 2011-06-28 13:07:27 -0600 )edit

answered 2011-06-19 10:28:25 -0600

tfoote gravatar image

Are you sending commands inside the joint safety limits?

edit flag offensive delete link more


good call tully! i'll slow down the trajectory and try it out.
liuhuanjim013 gravatar imageliuhuanjim013 ( 2011-06-19 10:49:40 -0600 )edit
Hi Tully, I just turned down the speed of the trajectory by 10 times, but the shoulder_lift_joint still didn't go all the way up.. And I saw no warning or error message in rosout. Any other way I can confirm that my trajectory doesn't violate any limit?
liuhuanjim013 gravatar imageliuhuanjim013 ( 2011-06-19 16:41:56 -0600 )edit
Hi Tully, you are right! The soft limit is indeed violated. See my comment to John's answer above. Thanks for your help!
liuhuanjim013 gravatar imageliuhuanjim013 ( 2011-06-28 08:25:05 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2011-06-18 20:58:54 -0600

Seen: 293 times

Last updated: Jun 28 '11