From: Dan R <ni...@gm...> - 2019-01-29 17:29:29
|
Hi Mark, Thanks again. I don't want to create too much more noise on the mailing list with my specific issue. I now understand I have to research more into the controlled planners as I don't fully understand them. But I think that is my direction and I have a clue. But to answer your question on how we choose jump trajectories. We can write some code to generate the full range of possible jump trajectories (all take off angles) and try each one against the collision detector. If one of them doesn't collide then we use those parameters as a control. I suppose we could do this all within DirectedControlSampler. I see that SteeredControlSampler simply uses a combination of propagateWhileValid and steer, so its kind of what we were discussing earlier. I think I have enough to move forward thanks again for your help! Dan On Mon, Jan 28, 2019 at 11:40 PM Mark Moll <mm...@ri...> wrote: > Hi Dan, > > If you *can* provide a steering function, then typically that’s a good > idea. However, if there are multiple ways, how do you choose? Does it > matter for completeness or optimality? If so, a sampler derived from > DirectedControlSampler might be the way to go. > > It’s up to you to decide how to handle collisions. You can handle > collisions in your state validity checker and rely on propagateWhileValid > (used by some planners). But this doesn’t exploit the special structure of > your problem. > > Best, > > Mark > > > > On Jan 28, 2019, at 12:02 PM, Dan R <ni...@gm...> wrote: > > > > Thanks Mark, > > > > In this case, would I also use the ompl::control::SatePropagator::steer > method to generate the jump control? For instance, given a start state and > an end state, steer would generate the parabolic path (or paths actually > since there are multiple ways to jump between the same two points) that > connect the two states? Then propagate could test each of these paths for > collision? > > > > What should propagate do in the case of a collision? > > > > Thanks for your help, > > Dan > > > > On Mon, Jan 28, 2019 at 9:47 AM Mark Moll <mm...@ri...> wrote: > > Hi Dan, > > > > My recommendation would be to create a ompl::control::StatePropagator > whose propagate function simply ignores the duration: given a state, a > control (e.g., jump direction), it would find the first point along the > parabolic trajectory that collides with an obstacle. If you plan to use > numerical integration, you should also check out the > ompl::control::ODESolver class. You can then use any of the planners in the > ompl::control namespace (ompl::control::RRT, ompl::control::EST, > ompl::control::PDST, ompl::control::KPIECE1, ompl::control::SST, …). > > > > Look at these demos: > > Rigid body planning with controls [Python version] > > Rigid body planning with ODESolver and controls. [Python version] > > > > Best, > > > > Mark > > > > > >> On Jan 27, 2019, at 8:43 PM, Dan R <ni...@gm...> wrote: > >> > >> Hello, > >> > >> I am interested in running a PRM planner on a 3d space that consists of > various platforms which a point mass can jump between. Each edge between > states is defined as a parabolic trajectory (a jump basically). Would I > create a custom MotionValidator class which basically moves the object > along the trajectory between states and do collision detection in there? > >> > >> Also since this space is discontinuous (you can't stop in the middle of > a jump) which planners do I need to avoid? I know some algorithms attempt > to only travel some percentage of an edge and create new states along the > way. But this wouldn't be possible in a discontinuous space like this. > >> > >> Thanks, I'm a beginner. > >> > >> Dan > > > > |