Set maximum acceleration magnitude on end effector in MoveIt

asked 2022-03-29 15:35:07 -0500

olamarre gravatar image

Hi! I just got started using MoveIt with a virtual robot arm (in Gazebo) as implemented in the xarm_ros package. The setup is simple: move from a start pose to a goal pose while avoiding simple static obstacles. I use my own python script to generate paths, and then execute those paths using the execute_trajectory action server built into MoveIt. My understanding is that upon receiving a path, MoveIt converts it into a time-parametrized trajectory while respecting the velocity/acceleration of every joint in the robot's URDF.

Question: is there any way to impose a constraint on the magnitude of the acceleration experienced by the end-effector/payload during execution? Instead of simply uniformly scaling down the velocity of every joint, I would like the robot to move quickly when moving the payload in a straight line, and slow down when it changes direction (say, when avoiding an obstacle).

Alternatively, I see that MoveIt itself sends the time-parameterized trajectory to a control_msgs/FollowJointTrajectory action server, which then interacts with Gazebo. I guess I could compute my own jacobians, generate my own time-parametrized trajectory and then send it myself to that action server.

Any tips would be appreciated! A C++ solution is fine, but I try to stick to Python and the default topics/services/actions of my MoveIt-Gazebo setup as much as possible. I am using ROS Noetic on Ubuntu 20.04. Thanks a lot!

edit retag flag offensive close merge delete