forked from pz4kybsvg/Conception
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.6 KiB
103 lines
3.6 KiB
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include "drake/common/drake_copyable.h"
|
|
#include "drake/planning/robot_diagram.h"
|
|
|
|
namespace drake {
|
|
namespace planning {
|
|
|
|
/** This class represents the data necessary for CollisionChecker to operate
|
|
safely across multiple threads in its `const` API. Instances of this class
|
|
are owned and managed by a particular CollisionChecker.
|
|
|
|
If using OMP to perform parallel const queries on a CollisionChecker, it will
|
|
never be necessary to interact with %CollisionCheckerContext instances. Only if
|
|
using some other threading paradigm will it be necessary to work with "stand
|
|
alone" instances. See CollisionChecker's documentation for more details.
|
|
|
|
In all cases, modifying context should happen through
|
|
CollisionChecker::PerformOperationAgainstAllModelContexts(). Modifying the
|
|
contained Drake Contexts directly is generally erroneous.
|
|
|
|
@ingroup planning_collision_checker */
|
|
class CollisionCheckerContext {
|
|
public:
|
|
/** \name Does not allow copy, move, or assignment generally.
|
|
|
|
Protected copy construction is enabled for sub-classes to use in their
|
|
implementation of DoClone(). */
|
|
//@{
|
|
CollisionCheckerContext& operator=(const CollisionCheckerContext&) = delete;
|
|
CollisionCheckerContext(CollisionCheckerContext&&) = delete;
|
|
CollisionCheckerContext& operator=(CollisionCheckerContext&&) = delete;
|
|
//@}
|
|
|
|
/** The resulting object stores an alias to `model`; the passed model should
|
|
have a lifetime greater than the constructed object.
|
|
@pre model is not null. */
|
|
explicit CollisionCheckerContext(const RobotDiagram<double>* model);
|
|
|
|
virtual ~CollisionCheckerContext();
|
|
|
|
std::unique_ptr<CollisionCheckerContext> Clone() const { return DoClone(); }
|
|
|
|
/** Gets the contained model context. */
|
|
const systems::Context<double>& model_context() const {
|
|
return *model_context_;
|
|
}
|
|
|
|
/** Gets the contained plant context. */
|
|
const systems::Context<double>& plant_context() const {
|
|
return *plant_context_;
|
|
}
|
|
|
|
/** Gets the contained scene graph context. */
|
|
const systems::Context<double>& scene_graph_context() const {
|
|
return *scene_graph_context_;
|
|
}
|
|
|
|
/** Gets the scene graph geometry query object. */
|
|
const geometry::QueryObject<double>& GetQueryObject() const;
|
|
|
|
// TODO(SeanCurtis-TRI) Eliminate these public members that provide access to
|
|
// mutable sub-contexts.
|
|
|
|
/* (Internal use only) Gets the contained model context. */
|
|
systems::Context<double>& mutable_model_context() { return *model_context_; }
|
|
|
|
/* (Internal use only) Gets the contained plant context. */
|
|
systems::Context<double>& mutable_plant_context() { return *plant_context_; }
|
|
|
|
/* (Internal use only) Gets the contained scene graph context. */
|
|
systems::Context<double>& mutable_scene_graph_context() {
|
|
return *scene_graph_context_;
|
|
}
|
|
|
|
protected:
|
|
/** Derived classes can use this copy constructor to help implement their own
|
|
DoClone() methods. */
|
|
CollisionCheckerContext(const CollisionCheckerContext& other);
|
|
|
|
/** Allow derived context types to implement additional clone behavior. */
|
|
virtual std::unique_ptr<CollisionCheckerContext> DoClone() const;
|
|
|
|
private:
|
|
/* The resulting object stores an alias to `model`; the passed model should
|
|
have a lifetime greater than the constructed object. */
|
|
CollisionCheckerContext(
|
|
const RobotDiagram<double>* model,
|
|
std::unique_ptr<systems::Context<double>> model_context);
|
|
|
|
const RobotDiagram<double>& model_;
|
|
|
|
std::unique_ptr<systems::Context<double>> model_context_;
|
|
/* These are aliases into model_context_. */
|
|
systems::Context<double>* const plant_context_;
|
|
systems::Context<double>* const scene_graph_context_;
|
|
};
|
|
|
|
} // namespace planning
|
|
} // namespace drake
|