MoveIt acceleration scaling factor violated

asked 2017-12-10 17:12:34 -0600

rmck gravatar image

I'm currently testing moveit on custom hardware using ROS Indigo. I'm finding that the acceleration scaling factor isn't being obeyed for any of my joints. My joint_limits.yaml looks like this:

joint_limits:
  pitch:
    has_velocity_limits: true
    max_velocity: 0.06
    has_acceleration_limits: true
    max_acceleration: 0.01
    has_jerk_limits: false
    max_jerk: 0.005
  slew:
    has_velocity_limits: true
    max_velocity: 0.04
    has_acceleration_limits: true
    max_acceleration: 0.01
    has_jerk_limits: false
    max_jerk: 0.005
  extension:
    has_velocity_limits: true
    max_velocity: 0.07 #0.06
    has_acceleration_limits: true
    max_acceleration: 0.05
    has_jerk_limits: false
    max_jerk: 0.025

Given an acceleration limit of 0.01 rad/s/s on the slew joint, scaled by 0.3 I'd expect to see an acceleration no higher than 0.003 rad/s/s. Here's the velocity output from rqt; image description

That's a change in velocity from 0 rad/s to 0.04 rad/s over 1.1 s or 0.0363 rad/s/s acceleration. I'm setting the scaling factor using the text box in the planning section of motion planning in RVIZ. My trajectory is just a more or less linear swing from one position to another across about 2.5m. I plan and execute the trajectory using the GUI in RVIZ and execution is successful aside from these constraint violations.

Am I fundamentally misunderstanding the purpose of the acceleration scaling factor? Surely it should force moveit to obey acceleration constraints? As far as I can tell, moveit doesn't obey my acceleration constraints at all. Velocity constraints are obeyed just fine. My next step is to test IPTP.

I've implemented a hardware controller using ros_control that's checking and enforcing joint limits (position, vel and supposedly accel) at 10Hz. As far as I can tell the hardware controller is behaving as expected.

Thanks for you help!

edit retag flag offensive close merge delete

Comments

I've reimplemented my controller using ros_control_boilerplate and this seems to have helped. However, my acceleration constraints still aren't being obeyed consistently. Are they too low? Is there some sort of divide by 0 error maybe?

rmck gravatar image rmck  ( 2018-01-02 20:22:49 -0600 )edit