move-it : planning with following error?
Hi every one
I'm using ROS-kinetic with Ubuntu 16.04, gazebo 7.0.0 and move-it 0.9.15-Alpha.
I'm working with an AMK servo motor and I want to use move-it to plan motion, with obstacle avoidance.
Those servomotors are controlled with an internal PID which require specific hardware to be tune, and before buying a CAN/USB device, I'm trying to plan motions taking in account the dynamic behavior of the motor.
As it can seen in the next picture, the real motor present a significant following error :
Simulating the robot, the model of the joint is considered as ideal, and this following error is null. As others joint of the robots has a better behavior, planned motions are not relevant.
Is there any possibility to configure ros_control to take in account the real behavior of the motor? Or in the urdf.xacro joint definition? Do I need to switch to a VelocityJointInterface?
Thanks!
Some precision:
The joint use an PositionJointInterface, JointPositionController and a SimpleActionClient.
I've tried to add a pid definition in the ros_control config file, but I can,t see any change, even using very big/small values for gains.
controllers.yaml :
torso_guidance_revolution_joint_controller:
type: position_controllers/JointPositionController
joint: torso_guidance_revolution_joint
pid: {p: 1.0, i: 0.0, d: 4000.0}
torso_guidance_elevation_joint_controller:
type: position_controllers/JointPositionController
joint: torso_guidance_elevation_joint
torso_guidance_position_joint_trajectory_controller:
type: position_controllers/JointTrajectoryController
joints:
- torso_guidance_elevation_joint
- torso_guidance_revolution_joint
torso_joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50.0
I could be misinterpreting your question, but MoveIt (or more specifically: OMPL) does not take dynamics into account. It's pure kinematic path planning. Time parameterisation is done afterwards. "planning with following error" is a strange thing in such a context, as there is no time dimension until the path is turned into a trajectory (which is not done by the planner, but by a separate algorithm).
That's because you are using a
position_controllers/JointPositionController
which is not actually a PID controller (or any controller really). It's a utility class that forwards incoming setpoints directly to the hw (unless you're using a customised version).Thanks for your help! already learnt something ^^
So if I understand correctly, the Iterative Parabolic Time Parameterization (the default one used by moveit) will update the JointTrajectoryPoint msg from planner, calculating velocities and accelerations according to given contraints in the joint_limits.yaml file. So working on those limits values could permit to force the desired position to have a similar behavior to the real behavior of the motor (with smoother acceleration). But it won't really solve my problem : the motor will respond even slower. I suppose it could reduce the error because of a softer solicitation, but it won't guarantee a correct obstacle avoidance. Is it correct?
I'm still trying tu use the pid, switching to a velocity_controllers/JointPositionController, but without success. This could be because of the custom hardware interface I'm using?