MoveIt acceleration scaling factor violated
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;
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!
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?