ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

[Moveit] compute_cartesian_path vs move_group.go()

asked 2021-05-05 07:57:17 -0500

lorepieri gravatar image

updated 2021-05-05 09:26:14 -0500

What are the pros and cons of using compute_cartesian_path vs move_group.go()? And when one should be used vs the other? Assume a situation in which we are only interested in moving the end effector from pose A to pose B, specifying the cartesian coordinates (instead of joint values) and without intermediate points.

My observation so far is that compute_cartesian_path is more reliable in finding a solution, especially if provided with intermediate waypoints from A to B. But in principle .go() should be faster, since it is not limited to cartesian trajectories.

See the docs for more info on the two methods (Planning to a Pose Goal and Cartesian Paths).

edit retag flag offensive close merge delete


What is move_cartesian_trajectory? I cannot find it on the page you link.

gvdhoorn gravatar image gvdhoorn  ( 2021-05-05 08:08:32 -0500 )edit

Sorry, the correct method name is compute_cartesian_path

lorepieri gravatar image lorepieri  ( 2021-05-05 09:22:52 -0500 )edit

Quick comment: computeCartesianPath does not plan. It only interpolates between a nr of poses. move_group::go() plans (ie: it actively tries to avoid collisions between robot and scene). The two cannot really be compared in the way you do here I believe.

gvdhoorn gravatar image gvdhoorn  ( 2021-05-05 12:15:43 -0500 )edit

Thanks for the clarification. So if obstacles are present it is clear that .go needs to be used. What about a situation with no obstacles? Are the two methods equivalent or they differ in reliability/speed?

lorepieri gravatar image lorepieri  ( 2021-05-05 16:46:29 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2021-05-05 10:19:23 -0500

Ranjit Kathiriya gravatar image

updated 2021-05-05 10:20:23 -0500

What are the pros and cons of using compute_cartesian_path vs. move_group.go()? And when should one be used vs. the other?

  1. Planning to a Pose Goal: When you know the full position(x,y,z) and orientation(x,y,z,w) at that time you have to use this planning to a pose goal. For example, in the world you want your robot to go at a fixed position at that time you can use this.

It is just like telling your robot to go at this axis, but there is a quaternion position over here. You can use this as a hardcoding that means the robot has to go there.

pose_goal.position.x = 0.4
pose_goal.position.y = 0.1
pose_goal.position.z = 0.4
pose_goal.orientation.x =0
pose_goal.orientation.y = 0
pose_goal.orientation.z = 0
pose_goal.orientation.w = 0

Here, these three x,y,z positions you have to give from the robot base_link. Another one is orientation on that location; how the robot orientation should stand how the gripper will be pointing towards the position(X, Y, Z) location.

  1. Cartesian Paths: Example: Let's say I am using a 3d camera, and I got my quaternion from my current_robot_pose; at that time, I have to adjust my robot into x,y,z position to reach the particular location. At that time, I will use Cartesian Paths. Note in place of 3d camera; you can get data from any other sensor also.

In short:

Planning to a Pose Goal- 1. Planning is done from the robot base position. 2. Location should be known.

Cartesian Paths- 1. Planning is done from the robot's current position. 2. Location is unknown.

I hope this helps you. I have tried my best to answer this question, but if you feel wrong or any issue with any point, please! feel free to comment.


edit flag offensive delete link more

Question Tools



Asked: 2021-05-05 07:57:17 -0500

Seen: 551 times

Last updated: May 05 '21