Clarification on the collision cost #60
-
Dear developers, I recently started to tryout your wonderful library, and while I am able to run the examples without any issue, a slight modification to the examples did not result in the expected behaviour. I wonder if you could explain the reason for that. I am trying to replicate the motion generation example available in the docs. The example itself works perfectly. I then adapt the cuboid:
table:
dims: [5.0, 5.0, 0.2] # x, y, z
pose: [0.0, 0.0, -0.1, 1, 0, 0, 0.0] # x, y, z, qx, qy, qz, qw
pole:
dims: [0.01, 0.01, 5] # x, y, z
pose: [0.1, 0.05, 0.0, 1, 0, 0, 0.0] # x, y, z, qx, qy, qz, qw My hope is to see the collision avoidance behaviour between the robot and the pole when it tries to reach the target. However, that does not happen, and it goes through the pole: franka_example_with_pole.mp4I can see in the lag in motion generation that the collision with the pole is being considered, but eventually it is not acted upon. Could you please help me understand how to create a proper example that exhibits this sort of avoidance behaviour? Thank you. |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments
-
Trying with different target configurations, I see the following behaviours: franka_example_with_pole1.mp4franka_example_with_pole2.mp4which makes the first behaviour an outlier (perhaps low cost weights?) |
Beta Was this translation helpful? Give feedback.
-
In the first example where it failed, can you give me few details:
|
Beta Was this translation helpful? Give feedback.
-
Hi @balakumar-s , Here is the information on the above test-case, and some further exploration that I did:
I just checked, and indeed the result.success is
The test case is exactly as in the example above. The start and goal pose are obtained from the retract_cfg = motion_gen.get_retract_config()
state = motion_gen.rollout_fn.compute_kinematics(JointState.from_position(retract_cfg.view(1, -1)))
retract_pose = Pose(state.ee_pos_seq.squeeze(), quaternion=state.ee_quat_seq.squeeze())
start_state = JointState.from_position(retract_cfg.view(1, -1) + 0.3)
result = motion_gen.plan_single(start_state, goal_pose = retract_pose, plan_config = MotionGenPlanConfig(max_attempts=1)) The description of the pole is as mentioned above: cuboid:
table:
dims: [5.0, 5.0, 0.2] # x, y, z
pose: [0.0, 0.0, -0.1, 1, 0, 0, 0.0] # x, y, z, qx, qy, qz, qw
pole:
dims: [0.01, 0.01, 5] # x, y, z
pose: [0.1, 0.05, 0.0, 1, 0, 0, 0.0] # x, y, z, qx, qy, qz, qw
The visualization that I show is a simple rendering using the trajectory obtained from the MotionGen solver. There is no outside engine interacting with the curobo solver in any way. After your remarks, I went back to try and increase the In [1]: result.status
Out[1]: 'IK Fail'
In [2]: result.attempts
Out[2]: 4
In [3]: result.success
Out[3]: tensor([False], device='cuda:0') Since IK has been done already successfully, I am surprised that the solver fails at the IK level after having already found a solution in previous attempts. From what I understood in the technical report, the planner stage is only after the IK stage. Am I missing something here? As another trial, I added a mesh geometry using a The solver is unable to find a path from a non-colliding initial to a non-colliding final state, even though the path exists. I have tried to increase the The result seems to be stuck in the same minima that I suppose the first test case gets stuck in. Could you please point me to the parameters I could tune to increase the chances of success? Other than the number of seeds for trajopt/IK for example? |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
We improved convergence properties in the latest release so you should see less outliers.
Here is a video that shows the performance from the latest release:
pole_test.mp4
Two things I noticed from the position of the pole:
Regarding your other questions: