VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
humanCollisionAvoidanceController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 1999 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
12 #include <vl/hostStructs.h>
15 
16 class DtString;
17 class DtSimManager;
18 class Dt3dBoundingVolume;
20 class DtInputControlPortGroup;
22 class DtCollision;
26 class DtVectorInputPort;
28 class DtBooleanInputPort;
30 
37 {
38 
39 public:
40 
44  DtVrfObject* owner,
45  DtSimManager* simManager,
46  DtComponentDescriptor* desc = 0,
47  DtReaderWriterRegistry* parentRegistry = 0);
48 
52 
56  virtual bool init();
57 
67  virtual void tick();
68 
72  virtual double distanceSquaredToDestination(DtVector offsetVector);
73 
79  virtual void avoidCollision(const DtCollision& potentialCollision);
80 
83  virtual const char* type() const;
84 
88  static DtSimComponent * creator(const DtString& name,
89  DtVrfObject* owner,
90  DtSimManager* simManager,
91  DtComponentDescriptor* desc = 0,
92  DtReaderWriterRegistry* parentRegistry = 0);
93 
94 protected:
98 
102 
106 
108  virtual bool shouldRun();
109 
112  virtual void clearCollisionStateData();
113 
118  virtual void clearingCollision();
119 
122  virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
123 
124 
126  virtual void registerTaskMsgCallbacks();
127 
130  static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
131  virtual void processTaskComplete(DtSimMessage * msg);
132 
137  bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
138 
147  bool setDefaultPortValuesForAvoidance();
148 
155  bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
156  const DtVector& obstructionVelocity,
157  int& obstructionDirectionSign) const;
158 
171  void avoidMovingObstruction(const DtCollision& potentialCollision);
172 
180  void avoidNonMovingObstruction(const DtCollision& potentialCollision);
181 
184  virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
185  DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
186 
188  virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
189  double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
190  DtVector & localVectorToObstruciton);
191 
201  void startClearingCollision(double clearingDistance);
202 
216  bool calculateMyEntityCollisionBV();
217 
218  bool createPortGroups();
219  bool createPorts();
220 
226  virtual bool createPSR();
227 
228  virtual void computeClearingHeading(const DtVector& localVertex1,
229  const DtVector& localVertex2, const DtVector & localObstaclePos,
230  double& clearingHeading) const;
231 
232  virtual void getObstructionFootprint(const DtCollision& collision,
233  DtLocalVertexList& localObstructionFootprint) const;
234 
235 protected:
236 
239 
241  Dt3dBoundingVolume* myCollisionBV;
242 
244 
246 
250 
253 
260 
268 
275 
279 
282 
288 
296 
303 
309 
315 
317 
318 };
bool myAvoidingCollision
Definition: humanCollisionAvoidanceController.h:240
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
double myLateralClearance
The width (in meters) added to the length of the bounding volume which is checked for potential colli...
Definition: humanCollisionAvoidanceController.h:308
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
Description: This repository holds all information that is common to all the forms of humans within t...
Definition: humanStateRepository.h:32
This is the DtVrfObjectNavInterface subclass for objects which are actively querying the navigation s...
Definition: activeBotNavInterface.h:26
Instances of DtBooleanOutputPort are output ports through which data producers can send boolean data...
Definition: boolIOPort.h:45
DtInputPortGroup * myCollisionAvoidancePortGroup
Input Port Group Name: collision-avoidance-control Input Port Group Description:
Definition: humanCollisionAvoidanceController.h:278
virtual void registerTaskMsgCallbacks()
This class provides a base class for all controllers that are capable of executing a DtSimTask...
Definition: singleTaskControllerComponent.h:20
DtCollisionInputPort * myCollisionAvoidancePort
Input Port Name: potential-collision-info Input Port Description: Input Port Range: Input Port Defa...
Definition: humanCollisionAvoidanceController.h:259
DtHumanMovementControlOutputPortGroup * myHumanMovementControlOutputPortGroup
Output Group Name: movement-control .
Definition: humanCollisionAvoidanceController.h:281
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:42
DtBooleanOutputPort * myIsMovingPort
Output Port Name: is-moving Output Port Description: Indicates the entity is being actively moved by ...
Definition: humanCollisionAvoidanceController.h:294
double myTimeToCollide
The minimum time before a collision (in seconds) which the collision avoidance controller compares to...
Definition: humanCollisionAvoidanceController.h:302
Definition: readerWriterRegistry.h:39
virtual const char * type() const =0
Returns a string identifies the class type of component.
Description: This repository holds all information that is common to all the forms of all entity/aggr...
Definition: vrfObjectStateRepository.h:87
virtual bool init()
Calls setRadio()
Contains class declarations for DtVectorInputPort, DtVectorOutputPort, and DtVectorPortData.
Definition: vectorIOPort.h:27
Dt3dBoundingVolume * myCollisionBV
Definition: humanCollisionAvoidanceController.h:241
bool myHavePortGroup
Definition: humanCollisionAvoidanceController.h:243
File: simMsg.h.
Definition: simMessage.h:35
double myStoppingDistanceFactor
The factor by which the collision avoidance controller multiplies the current stopping distance to de...
Definition: humanCollisionAvoidanceController.h:314
double myClearingDistance
This is only used when clearing.
Definition: humanCollisionAvoidanceController.h:238
DtHumanCollisionAvoidancePSR * myProcessState
Container for state data associated with this component.
Definition: humanCollisionAvoidanceController.h:249
virtual void tick()
This gives the thread of control to the component.
Contains class declarations for DtBooleanInputPort, DtBooleanOutputPort, and DtBooleanPortData.
Definition: boolIOPort.h:25
class DtHumanCollisionAvoidancePSR:
Definition: humanCollisionAvoidancePSR.h:30
DtBooleanInputPort * myUseCollisionAvoidanceInputPort
Output Port Name: use-collision-avoidance Output Port Description: Indicates whether or not this cont...
Definition: humanCollisionAvoidanceController.h:274
virtual bool createPorts()
Called by init.
Definition: collision.h:24
virtual bool createPortGroups()
Called by init.
DtVectorInputPort * myDestinationInputPort
Input Port Name: destination Input Port Description: Specifies the current destination of the entity ...
Definition: humanCollisionAvoidanceController.h:267
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
const DtTaskControllerComponent & operator=(const DtTaskControllerComponent &orig)
assignment operator
DtInputPortGroup is a data port group of a data consumer.
Definition: inputPortGroup.h:32
Instances of DtCollisionInputPort are input ports through which data consumers can receive informatio...
Definition: collisionIOPort.h:29
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:102
DtHumanStateRepository * myLifeformState
Definition: humanCollisionAvoidanceController.h:245
An output port group that contains the ports necessary to control the movement of a human using the D...
Definition: humanMovementControlOutputPortGroup.h:22
class DtLocalVertexList:
Definition: localVertexList.h:20
DtVector myNonMvObstructionLocation
Definition: humanCollisionAvoidanceController.h:316
DtBooleanOutputPort * myCollisionPort
Output Port Name: collision Output Port Description: Specifies if there&#39;s a collision occurring Outpu...
Definition: humanCollisionAvoidanceController.h:287
DtHumanCollisionAvoidanceController is a controller that helps entities to avoid running into other e...
Definition: humanCollisionAvoidanceController.h:35

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)