se2ez
validity.cpp
Go to the documentation of this file.
1 /* Author: Zachary Kingston */
2 
3 #include <ompl/base/spaces/WrapperStateSpace.h>
4 
5 #include <se2ez/core/robot.h>
6 #include <se2ez/core/state.h>
7 #include <se2ez/core/collision.h>
9 
10 #include <se2ez/plan/space.h>
11 #include <se2ez/plan/validity.h>
12 
13 using namespace se2ez;
14 
15 ///
16 /// ValidityChecker
17 ///
18 
19 plan::ValidityChecker::ValidityChecker(const ompl::base::SpaceInformationPtr &si, CollisionManagerPtr cm)
20  : ompl::base::StateValidityChecker(si), cm_(cm)
21 {
22  specs_.clearanceComputationType = ompl::base::StateValidityCheckerSpecs::BOUNDED_APPROXIMATE;
23 }
24 
25 bool plan::ValidityChecker::isValid(const ompl::base::State *state) const
26 {
27  auto *as = const_cast<StateSpace::StateType *>(state->as<StateSpace::StateType>());
28  return !cm_->collide(as->state);
29 }
30 
31 bool plan::ValidityChecker::isValid(const ompl::base::State *state, double &dist) const
32 {
33  auto *as = const_cast<StateSpace::StateType *>(state->as<StateSpace::StateType>());
34  dist = cm_->distance(as->state).distance;
35 
36  return dist > 0;
37 }
38 
39 double plan::ValidityChecker::clearance(const ompl::base::State *state) const
40 {
41  auto *as = const_cast<StateSpace::StateType *>(state->as<StateSpace::StateType>());
42  return cm_->distance(as->state).distance;
43 }
44 
46 {
47  return cm_;
48 }
49 
50 ///
51 /// WrappedValidityChecker
52 ///
53 
54 plan::WrappedValidityChecker::WrappedValidityChecker(const ompl::base::SpaceInformationPtr &si,
56  : plan::ValidityChecker(si, cm)
57 {
58 }
59 
60 bool plan::WrappedValidityChecker::isValid(const ompl::base::State *state) const
61 {
62  auto *cs = state->as<ompl::base::WrapperStateSpace::StateType>();
63  return plan::ValidityChecker::isValid(cs->getState());
64 }
65 
66 bool plan::WrappedValidityChecker::isValid(const ompl::base::State *state, double &dist) const
67 {
68  auto *cs = state->as<ompl::base::WrapperStateSpace::StateType>();
69  return plan::ValidityChecker::isValid(cs->getState(), dist);
70 }
71 
72 double plan::WrappedValidityChecker::clearance(const ompl::base::State *state) const
73 {
74  auto *cs = state->as<ompl::base::WrapperStateSpace::StateType>();
75  return plan::ValidityChecker::clearance(cs->getState());
76 }
bool isValid(const ompl::base::State *state) const override
Definition: validity.cpp:60
ValidityChecker(const ompl::base::SpaceInformationPtr &si, CollisionManagerPtr cm)
Definition: validity.cpp:19
double clearance(const ompl::base::State *state) const override
Definition: validity.cpp:39
Definition: goals.h:10
CollisionManagerPtr cm_
Definition: validity.h:35
A shared pointer wrapper for se2ez::CollisionManager.
WrappedValidityChecker(const ompl::base::SpaceInformationPtr &si, CollisionManagerPtr cm)
Definition: validity.cpp:54
CollisionManagerPtr getCM()
Definition: validity.cpp:45
Main namespace.
Definition: collision.h:11
bool isValid(const ompl::base::State *state) const override
Definition: validity.cpp:25
double clearance(const ompl::base::State *state) const override
Definition: validity.cpp:72