What are the pros and cons of using compute_cartesian_path vs. move_group.go()? And when should one be used vs. the other?
- 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.
- 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!
What is
move_cartesian_trajectory
? I cannot find it on the page you link.Sorry, the correct method name is compute_cartesian_path
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.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?