# [Moveit] compute_cartesian_path vs move_group.go()

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 close merge delete

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

( 2021-05-05 08:08:32 -0600 )edit

Sorry, the correct method name is compute_cartesian_path

( 2021-05-05 09:22:52 -0600 )edit
3

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.

( 2021-05-05 12:15:43 -0600 )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?

( 2021-05-05 16:46:29 -0600 )edit

Sort by ยป oldest newest most voted

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.

Thanks!

more