VR-Forces 4.0.4 Class Documentation
include/vrfmodel/humanCollisionAvoidController.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 1999 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: humanCollisionAvoidController.h,v $ $Revision: 1.9 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00014 
00015 #ifndef DtHumanCollisionAvoidanceController_H_
00016 #define DtHumanCollisionAvoidanceController_H_
00017 
00018 #include "vrfobjcore/singleTaskControllerComponent.h"
00019 #include "vrfobjcore/vrfObjIter.h"
00020 #include <vl/hostStructs.h>
00021 #include "vrfobjcore/humanCollisionAvoidPSR.h"
00022 #include "vrfmodel/vrfmodelDefines.h"
00023 
00024 class DtString;
00025 class DtSimManager;
00026 class Dt3dBoundingVolume;
00027 class DtVrfObjectStateRepository;
00028 class DtInputControlPortGroup;
00029 class DtCollisionInputPort;
00030 class DtCollision;
00031 class DtHumanMovementControlOutputPortGroup;
00032 class DtHumanStateRepository;
00033 class DtHumanCollisionAvoidancePSR;
00034 class DtVectorInputPort;
00035 class DtBooleanOutputPort;
00036 
00041 class  DT_DLL_vrfmodel DtHumanCollisionAvoidanceController : public 
00042    DtSingleTaskControllerComponent
00043 {
00044 
00045 public:
00046 
00049    DtHumanCollisionAvoidanceController(const DtString& name, 
00050       DtVrfObject* owner,
00051       DtSimManager* simManager, 
00052       DtComponentDescriptor* desc = 0,
00053       DtReaderWriterRegistry* parentRegistry = 0);
00054 
00057    virtual ~DtHumanCollisionAvoidanceController();
00058 
00062    virtual bool init();
00063 
00073    virtual void tick();
00074 
00078    virtual double distanceSquaredToDestination(DtVector offsetVector);
00079 
00082    virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
00083 
00090    virtual void avoidCollision(const DtCollision& potentialCollision);
00091 
00094    virtual void clearCollision();
00095    
00100    virtual void clearingCollision();
00101 
00104    virtual DtString type() const;
00105 
00109    static DtSimComponent * creator(const DtString& name, 
00110       DtVrfObject* owner,
00111       DtSimManager* simManager, 
00112       DtComponentDescriptor* desc = 0,
00113       DtReaderWriterRegistry* parentRegistry = 0);
00114 
00115 protected:
00118    DtHumanCollisionAvoidanceController();
00119 
00121    DtHumanCollisionAvoidanceController(const 
00122       DtHumanCollisionAvoidanceController & orig);
00123 
00125    const DtHumanCollisionAvoidanceController & operator=(const 
00126       DtHumanCollisionAvoidanceController & orig);
00127 
00129    virtual void registerTaskMsgCallbacks();
00130 
00133    static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
00134    virtual void processTaskComplete(DtSimMessage * msg);
00135 
00141    bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
00142 
00151    bool setDefaultPortValuesForAvoidance();
00152 
00159    bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
00160                                            const DtVector& obstructionVelocity,
00161                                            int& obstructionDirectionSign) const;
00162    
00176    void avoidMovingObstruction(const DtCollision& potentialCollision);
00177 
00188    void avoidNonMovingObstruction(const DtCollision& potentialCollision);
00189 
00192    virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
00193       DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
00194 
00197    virtual void calculateAvoidanceUsingExtent(DtExtent & extent,double entityBoundingVolumeRadius,
00198       DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
00199 
00201    virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
00202       double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
00203       DtVector & localVectorToObstruciton);
00204 
00214    void startClearingCollision(double clearingDistance);
00215 
00229    bool calculateCollisionBV();
00230 
00231    bool createPortGroups();
00232    bool createPorts();
00233 
00239    virtual bool createPSR();
00240 
00241    virtual void computeClearingHeading(const DtVector& localVertex1, 
00242       const DtVector& localVertex2, const DtVector & localObstaclePos,
00243       double& clearingHeading) const;
00244 
00245    virtual void getObstructionFootprint(const DtCollision& collision, 
00246       DtLocalVertexList& localObstructionFootprint) const;
00247 
00248 protected:
00249 
00251    double                  myClearingDistance;
00252 
00253    bool                    myAvoidingCollision;
00254    Dt3dBoundingVolume*       myCollisionBV;
00255 
00256    DtEntityIdentifier      myObjectId;
00257    bool                    myHavePortGroup;
00258 
00259    DtHumanStateRepository* myLifeformState;
00260 
00263    DtHumanCollisionAvoidancePSR* myProcessState;
00264 
00267 
00273    DtCollisionInputPort*   myCollisionAvoidancePort;
00274 
00280    DtVectorInputPort* myDestinationInputPort;
00281 
00284    DtInputPortGroup*       myCollisionAvoidancePortGroup;
00285 
00287    DtHumanMovementControlOutputPortGroup* myHumanMovementControlOutputPortGroup;
00288 
00293    DtBooleanOutputPort* myCollisionPort;
00295 
00301    double   myTimeToCollide;
00302 
00307    double   myLateralClearance;
00308 
00313    double   myStoppingDistanceFactor;
00314 
00315    DtVector myNonMvObstructionLocation;
00316 };
00317 
00318 #endif
00319 
00320 
00321 
00322 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)