MPPI Obstacle bypass critic#6144
Conversation
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
After looking into adding break early when computing the path's arc-length Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>
Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>
Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>
|
This pull request is in conflict. Could you fix it @SteveMacenski? |
Signed-off-by: Tony Najjar <tony.najjar@dexory.com>
|
I merged main into your branch |
| resolution: 0.05 | ||
| track_unknown_space: true | ||
| plugins: ["static_layer", "obstacle_layer", "inflation_layer"] | ||
| plugins: ["static_layer", "inflation_layer"] |
There was a problem hiding this comment.
is that intended? or a test-only change?
| // Find the first blocked path point | ||
| size_t blocked_idx = 0; | ||
| for (size_t j = 0; j < occupancy_check_distance_idx; j++) { | ||
| if (!path_pts_valid[j]) {blocked_idx = j; break;} |
There was a problem hiding this comment.
you could do it together with the previous for to save on 1 loop
|
I have tried this today a bit in simulation, by adding a car perpendicular to the robot on the path (a car parallel to the path can already be overcome with my change). With only a single car, the robot can overtake the car, so it is an improvement over the I did find a case that break it, when adding a wall or another car on the side. Because only the front of the wall/car can be seen, it chooses the wrong side. Though I can see a case where this approach also fails - if the obstacle is spans a long part of the path. Since the target point is in the middle of the obstacle, it may happen that the line crosses the obstacle. Maybe you have other ideas? You can see the video: The light blue point on the bottom right is
|
Oh, I see. That is an interesting situation.
That does seems reasonable, how well did that work? Why not use
Do you think in general we should make it larger or smaller?
I agree. Do you think we should just remove it or make it parameterized? |
|
I am working on a few improvement this week, hope to come back with some nice results soon. Edit: So I tried a few variations for this issue. I will comment with more details tomorrow, but I think the best one is checking the line from the robot to a pose = (last free path pose + signed offset). I still want to try out some tuning and some more ideas (like adding an hysteresis for the sign, as it tends to jump), but my main 2 issues right now are:
Happy to hear suggestions on these two points |
|
I'm back from vacation now - did you do that testing and any other results / details (I think you mentioned later posting more details?)? I wanted to get that info before responding to your remarks and picking this back up again. |
|
So I tested quite a lot and tried multiple variations for different issues with it. (all in simulation as our robot is not available until next week). things I added;
You can see my current implementation here (WIP AI code warning 😅 ) The main issues I still have are what I wrote last time (repeat from above + extra comments):
Happy for suggestions! |
|
Update: |
|
So open questions I'm aware of to compress the discussion into one place for continuing work this week:
Cool! Do you have a patch I can test / integrate? Your branch is a bit ... AI generated and has some other items in it that make it hard for me to pull out just one thing at a time.
Is there any compelling reason to keep this on or should we just simply remove the condition?
Sounds like you make have resolved that with. Similar: can I get a patch? I also need to consider bidirectional cases to make sure this works well symmetrically, but I can do that and have Tony verify.
How often did you run into that? I tried that but found that it sometimes made commitment to bad sides due to inaccurate perception and found this to be worse off.
I think this needs some explanation :-) ^^ how many of the items above were 'testing' features vs items you think I should integrate into the final solution? Any others? |
|
Yes, I couldn't test on the robot yet, so I didn't clean up the code yet, it's a bit AI-style... The list 2 comments above are things that work well, with the following update:
-> this works quite well. It still drives close to corners, but the bypass critic remains active and it reduces the times it gets stuck by a lot. Side hysteresis: I hope to finally test it next week on the robot, then I can clean up a bit and send some patches/ |
bypass_critic.mp4
This critic is an obstacle bypass critic to actively help the optimization problem bypass an obstacle blocking a path to handle dynamic obstacles more naturally in a variety of situations.
TODO
Related: #6091