7 #ifndef _CONSTRAINT_SIMULATOR_H
8 #define _CONSTRAINT_SIMULATOR_H
11 #include <Ravelin/sorted_pair>
12 #include <Moby/Simulator.h>
13 #include <Moby/ImpactConstraintHandler.h>
14 #include <Moby/PenaltyConstraintHandler.h>
15 #include <Moby/SustainedUnilateralConstraintHandler.h>
16 #include <Moby/PairwiseDistInfo.h>
18 #include <Moby/UnilateralConstraint.h>
19 #include <Moby/ConstraintStabilization.h>
24 class ContactParameters;
25 class CollisionDetection;
26 class CollisionGeometry;
36 virtual void load_from_xml(boost::shared_ptr<const XMLTree> node, std::map<std::string, BasePtr>& id_map);
37 virtual void save_to_xml(
XMLTreePtr node, std::list<boost::shared_ptr<const Base> >& shared_objects)
const;
39 const std::vector<PairwiseDistInfo>& get_pairwise_distances()
const {
return _pairwise_distances; }
48 std::vector<std::pair<ControlledBodyPtr, Ravelin::VectorNd> >
_x0, _x1;
80 std::map<Ravelin::sorted_pair<BasePtr>, boost::shared_ptr<ContactParameters> >
contact_params;
112 double calc_CA_step();
113 double calc_next_CA_Euler_step(
double contact_dist_thresh)
const;
122 boost::shared_ptr<CollisionDetection>
_coldet;
std::vector< std::pair< ControlledBodyPtr, Ravelin::VectorNd > > _x0
Vectors set and passed to collision detection.
Definition: ConstraintSimulator.h:48
ConstraintStabilization cstab
The constraint stabilization mechanism.
Definition: ConstraintSimulator.h:42
Defines an abstract collision detection mechanism.
Definition: CollisionDetection.h:38
std::vector< UnilateralConstraint > _rigid_constraints
The vector of rigid constraints.
Definition: ConstraintSimulator.h:105
void visualize_contact(UnilateralConstraint &constraint)
Draws a ray directed from a contact point along the contact normal.
Definition: ConstraintSimulator.cpp:156
std::vector< CollisionGeometryPtr > _geometries
The geometries in the simulator.
Definition: ConstraintSimulator.h:125
void(* constraint_callback_fn)(std::vector< UnilateralConstraint > &, boost::shared_ptr< void >)
The callback function (called when constraints have been determined)
Definition: ConstraintSimulator.h:62
Defines the mechanism for handling Penalty constraints.
Definition: PenaltyConstraintHandler.h:22
std::vector< UnilateralConstraint > & get_compliant_constraints()
Gets the (sorted) compliant constraint data.
Definition: ConstraintSimulator.h:74
void preprocess_constraint(UnilateralConstraint &e)
Performs necessary preprocessing on an constraint.
Definition: ConstraintSimulator.cpp:393
ImpactConstraintHandler _impact_constraint_handler
Object for handling impact constraints.
Definition: ConstraintSimulator.h:99
boost::shared_ptr< void > constraint_post_callback_data
Data passed to post-constraint callback.
Definition: ConstraintSimulator.h:71
An virtual class for simulation with constraints.
Definition: ConstraintSimulator.h:29
std::vector< std::pair< CollisionGeometryPtr, CollisionGeometryPtr > > _pairs_to_check
Geometric pairs that should be checked for unilateral constraints (according to broad phase collision...
Definition: ConstraintSimulator.h:128
void(* post_mini_step_callback_fn)(ConstraintSimulator *s)
Callback function after a mini-step is completed.
Definition: ConstraintSimulator.h:54
std::set< Ravelin::sorted_pair< CollisionGeometryPtr > > unchecked_pairs
Determines whether two geometries are not checked.
Definition: ConstraintSimulator.h:45
boost::shared_ptr< void > constraint_callback_data
Data passed to unilateral constraint callback.
Definition: ConstraintSimulator.h:68
std::map< Ravelin::sorted_pair< BasePtr >, boost::shared_ptr< ContactParameters > > contact_params
Mapping from objects to contact parameters.
Definition: ConstraintSimulator.h:80
virtual void save_to_xml(XMLTreePtr node, std::list< boost::shared_ptr< const Base > > &shared_objects) const
Implements Base::save_to_xml()
Definition: ConstraintSimulator.cpp:717
Defines the mechanism for handling impact constraints.
Definition: ImpactConstraintHandler.h:37
void(* constraint_post_callback_fn)(const std::vector< UnilateralConstraint > &, boost::shared_ptr< void >)
The callback function (called after forces/impulses are applied)
Definition: ConstraintSimulator.h:65
boost::shared_ptr< CollisionGeometry > CollisionGeometryPtr
Collision geometry smart pointer.
Definition: Types.h:77
boost::shared_ptr< XMLTree > XMLTreePtr
XML tree smart pointer.
Definition: Types.h:104
void find_unilateral_constraints()
Finds the set of unilateral constraints.
Definition: ConstraintSimulator.cpp:491
virtual void load_from_xml(boost::shared_ptr< const XMLTree > node, std::map< std::string, BasePtr > &id_map)
Implements Base::load_from_xml()
Definition: ConstraintSimulator.cpp:561
boost::shared_ptr< CollisionDetection > get_collision_detection() const
Gets the collision detection mechanism.
Definition: ConstraintSimulator.h:86
std::vector< UnilateralConstraint > & get_rigid_constraints()
Gets the (sorted) rigid constraint data.
Definition: ConstraintSimulator.h:77
void calc_impacting_unilateral_constraint_forces(double dt)
Handles constraints.
Definition: ConstraintSimulator.cpp:296
void calc_compliant_unilateral_constraint_forces()
Computes compliant contact forces.
Definition: ConstraintSimulator.cpp:361
PenaltyConstraintHandler _penalty_constraint_handler
Object for handling penalty constraints.
Definition: ConstraintSimulator.h:102
Simulator for both unarticulated and articulated rigid bodies without contact.
Definition: Simulator.h:40
Projected constraint stabilization mechanism.
Definition: ConstraintStabilization.h:21
bool render_contact_points
If set to 'true' simulator will process contact points for rendering.
Definition: ConstraintSimulator.h:83
std::vector< UnilateralConstraint > _compliant_constraints
The vector of compliant constraints.
Definition: ConstraintSimulator.h:108
boost::shared_ptr< CollisionDetection > _coldet
The collision detection mechanism.
Definition: ConstraintSimulator.h:122
Container class for describing a unilateral constraint in the simulation.
Definition: UnilateralConstraint.h:27
std::vector< PairwiseDistInfo > _pairwise_distances
Pairwise distances at bodies' current configurations.
Definition: ConstraintSimulator.h:116
void calc_pairwise_distances()
Computes pairwise distances of geometries at their current poses, using broad phase results to determ...
Definition: ConstraintSimulator.cpp:453
Ravelin::VectorNd _workV
Work vector.
Definition: ConstraintSimulator.h:119
ConstraintSimulator()
Default constructor.
Definition: ConstraintSimulator.cpp:48
void determine_geometries()
Sets up the list of collision geometries.
Definition: ConstraintSimulator.cpp:422
boost::shared_ptr< ContactParameters > get_contact_parameters(CollisionGeometryPtr geom1, CollisionGeometryPtr geom2) const
Gets the contact data between a pair of geometries (if any)
Definition: ConstraintSimulator.cpp:80
void broad_phase(double dt)
Does broad phase collision detection, identifying which pairs of geometries may come into contact ove...
Definition: ConstraintSimulator.cpp:474