Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

WhorlSim.cpp

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////////////////////////////
00002 /*! \file WhorlSim.cpp
00003 *  \brief Implementation of the WhorlSim class.
00004 *  \author $Author: jayhawk_hokie $
00005 *  \version $Revision: 1.8 $
00006 *  \date    $Date: 2007/08/31 16:00:19 $
00007 *//////////////////////////////////////////////////////////////////////////////////////////////////
00008 /*! 
00009 */
00010 //////////////////////////////////////////////////////////////////////////////////////////////////
00011 
00012 #include "WhorlSim.h"
00013 
00014 // Constructor/Deconstructor
00015 WhorlSim::WhorlSim( ) 
00016 { }
00017 
00018 WhorlSim::WhorlSim( Whorl* ptr_whorl ) 
00019 { 
00020         m_omniscient = ptr_whorl; 
00021 }
00022 
00023 WhorlSim::~WhorlSim( ) 
00024 {
00025         cerr << "\n--------------------------------------------------------------" << endl;
00026         cerr << "Deinitializing WhorlSim Object" << endl;
00027         cerr << "--------------------------------------------------------------" << endl;
00028         
00029         switch ( s_mapStringValues[ m_omniscient->GetHardwareFlag( ) ] )
00030         {
00031                 case ON:
00032                         switch ( s_mapStringValues[ m_observerName ] )
00033                         {
00034                                 case OFF :
00035                                         // No Observer Set
00036                                         break;
00037                                 default:
00038                                         delete m_omnipresent;
00039                                         cerr << "Delete " << m_observerName << " Object" << endl;
00040                                         break;
00041                         }
00042 
00043                         switch ( s_mapStringValues[ m_controllerName ] )
00044                         {
00045                                 case OFF :
00046                                         // No Control Set
00047                                         break;
00048                                 default:
00049                                         delete m_omnipotent;
00050                                         cerr << "Delete " << m_controllerName << " Object" << endl;
00051                                         break;
00052                         }
00053                         break;
00054                 case OFF:
00055                         // Hardware OFF
00056                         break;
00057                 default:
00058                         break;
00059         }
00060                         
00061         switch ( s_mapStringValues[ m_OrbitObserverName ] )
00062         {
00063                 case OFF :
00064                         // No Observer Set
00065                         break;
00066                 default:
00067                         delete m_omnipresent2;
00068                         cerr << "Delete " << m_OrbitObserverName << " Object" << endl;
00069                         break;
00070         }
00071         
00072         cerr << "\nDeinitialization of WhorlSim Object Complete " << endl;
00073         cerr << "--------------------------------------------------------------" << endl;
00074         cerr << "--------------------------------------------------------------" << endl;
00075 }
00076 
00077 
00078 /*! \brief Initialize a whorlsim object
00079  *  @param handle XML handle with current whorl as starting node
00080 */
00081 int WhorlSim::Initialize( TiXmlHandle handle ) 
00082 {
00083         cerr << "\n--------------------------------------------------------------" << endl;
00084         cerr << "Creating WhorlSim Object " << endl;
00085         cerr << "--------------------------------------------------------------" << endl;
00086 
00087         s_mapStringValues["ON"]                 = ON;
00088         s_mapStringValues["OFF"]                = OFF;
00089         // Observer
00090         s_mapStringValues["atterrbiasObserver"] = s_atterrbiasObserver;
00091         s_mapStringValues["AttitudeObserver"]   = s_AttitudeObserver;
00092         s_mapStringValues["DefaultObserver"]    = s_DefaultObserver;
00093         s_mapStringValues["triadObserver"]      = s_triadObserver;
00094         s_mapStringValues["QuaternionEKFObserver"]      = s_QuaternionEKFObserver;
00095         // Controller
00096         s_mapStringValues["DefaultController"]  = s_DefaultController;
00097         s_mapStringValues["AngularRateController"]      = s_AngularRateController;
00098         s_mapStringValues["MWCMGController"]    = s_MWCMGController;
00099         s_mapStringValues["OpenLoopMWController"]= s_OpenLoopMWController;
00100         s_mapStringValues["MRPTracking"]= s_MRPTracking;
00101         s_mapStringValues["slidingModeControlMRPMW"]= s_slidingModeControlMRPMW;
00102 
00103         // Orbit Observer
00104         s_mapStringValues["GPSObserver"]        = s_GPSObserver;
00105         s_mapStringValues["OrbitPropObserver"]  = s_OrbitPropObserver;
00106 
00107         // Orbit Controller
00108         s_mapStringValues["COENaaszController"] = s_COENaaszController;
00109 
00110         
00111         switch ( s_mapStringValues[ m_omniscient->GetHardwareFlag( ) ] )
00112         {
00113                 case ON:
00114                         SetObserver( handle );
00115                         SetController( handle );
00116                         break;
00117                 case OFF:
00118                         break;
00119                 default:
00120                         break;
00121         }
00122 
00123         // Orbit Observer
00124         SetOrbitObserver( handle );
00125 
00126         // Orbit Controller
00127         SetOrbitController( handle );
00128 
00129         cerr << "\nInitialization of WhorlSim Object Complete " << endl;
00130         cerr << "--------------------------------------------------------------" << endl;
00131         cerr << "--------------------------------------------------------------" << endl;
00132 
00133         return( 0 );
00134 }
00135 
00136 /*! \brief Set Observer
00137  *  @param handle XML handle with current whorl as starting node
00138  */
00139 void WhorlSim::SetObserver( TiXmlHandle handle )
00140 {
00141         // get observer name from configuration file
00142         m_observerName = handle.FirstChild( m_omniscient->GetSimulatorName( ) ).Child("OBSERVER", 0).Element() -> Attribute("value");
00143 
00144         switch ( s_mapStringValues[ m_observerName ] )
00145         {
00146                 case OFF:
00147                         cerr << "\nNo Observer Set." << endl;
00148                         break;
00149                 case s_atterrbiasObserver:
00150                         m_omnipresent = new atterrbiasObserver( m_omniscient );
00151                         cerr << " \nObserver Set: " << m_observerName << endl;
00152                         break;
00153                 case s_AttitudeObserver:        
00154                         m_omnipresent = new AttitudeObserver( m_omniscient );
00155                         cerr << " \nObserver Set: " << m_observerName << endl;
00156                         break;
00157                 case s_DefaultObserver:
00158                         m_omnipresent = new DefaultObserver( m_omniscient );
00159                         cerr << " \nObserver Set: " << m_observerName << endl;
00160                         break;
00161                 case s_triadObserver:
00162                         m_omnipresent = new triadObserver( handle, m_omniscient );
00163                         cerr << " \nObserver Set: " << m_observerName << endl;
00164                         break;
00165                 case s_QuaternionEKFObserver:
00166                         m_omnipresent = new QuaternionEKFObserver( handle, m_omniscient );
00167                         cerr << " \nObserver Set: " << m_observerName << endl;
00168                         break;
00169                 default:
00170                         cerr << "WARNING: Observer Name from Configuration File not recognized. Observer -> " << m_observerName << endl;
00171                         break;  
00172         }
00173         return ;
00174 }
00175 
00176 
00177 /*! \brief Set Controller
00178  *  @param handle XML handle with current whorl as starting node
00179  */
00180 void WhorlSim::SetController( TiXmlHandle handle )
00181 {
00182         // get controller name from configuration file
00183         m_controllerName = handle.FirstChild( m_omniscient->GetSimulatorName( ) ).Child("CONTROLLER", 0).Element() -> Attribute("value");
00184         
00185         switch ( s_mapStringValues[ m_controllerName ] )
00186         {
00187                 case OFF :
00188                         // No Control Set
00189                         cerr << "\nNo Controller Set" << endl;
00190                         break;
00191                 case s_DefaultController :
00192                         // Lyapunov angular rate controller
00193                         m_omnipotent = new DefaultController(m_omniscient);
00194                         cerr << "\nController Set: " << m_controllerName << endl;
00195                         break;
00196                 case s_AngularRateController :
00197                         // Lyapunov angular rate controller
00198                         m_omnipotent = new AngularRateController(m_omniscient);
00199                         cerr << "\nController Set: " << m_controllerName << endl;
00200                         break;
00201                 case s_MWCMGController :
00202                         // momentum wheel and CMG controller
00203                         m_omnipotent = new MWCMGController(m_omniscient);
00204                         cerr << "\nController Set: " << m_controllerName << endl;
00205                         break;
00206                 case s_OpenLoopMWController :
00207                         m_omnipotent = new OpenLoopMWController(m_omniscient);
00208                         cerr << "\nController Set: " << m_controllerName << endl;
00209                         break;
00210                 case s_MRPTracking :
00211                         m_omnipotent = new MRPTracking(m_omniscient);
00212                         cerr << "\nController Set: " << m_controllerName << endl;
00213                         break;
00214                 case s_slidingModeControlMRPMW :
00215                         m_omnipotent = new slidingModeControlMRPMW(m_omniscient);
00216                         cerr << "\nController Set: " << m_controllerName << endl;
00217                         break;
00218                 default:
00219                         cerr << "WARNING: Controller Name from Configuration File not recognized. Controller -> " << m_controllerName << endl;
00220                         break;  
00221         }
00222         return ;
00223 }
00224 
00225 
00226 /*! \brief Set Orbit Observer
00227  *  @param handle XML handle with current whorl as starting node
00228  */
00229 void WhorlSim::SetOrbitObserver( TiXmlHandle handle )
00230 {
00231         // get observer name from configuration file
00232         m_OrbitObserverName = handle.FirstChild( m_omniscient->GetSimulatorName( ) ).Child("ORBIT_OBSERVER", 0).Element() -> Attribute("value");
00233 
00234         switch ( s_mapStringValues[ m_OrbitObserverName ] )
00235         {
00236                 case OFF:
00237                         cerr << "\nNo Orbit Observer Set." << endl;
00238                         break;
00239                 case s_GPSObserver:
00240                         m_omnipresent2 = new GPSObserver( handle, m_omniscient );
00241                         cerr << " \nOrbit Observer Set: " << m_OrbitObserverName << endl;
00242                         break;
00243                 case s_OrbitPropObserver:
00244                         m_omnipresent2 = new OrbitPropObserver( handle, m_omniscient );
00245                         cerr << " \nOrbit Observer Set: " << m_OrbitObserverName << endl;
00246                         break;
00247                 default:
00248                         cerr << "WARNING: Orbit Observer Name from Configuration File not recognized. Observer -> " << m_OrbitObserverName << endl;
00249                         break;  
00250         }
00251         return ;
00252 }
00253 
00254 /*! \brief Set Orbit Controller
00255  *  @param handle XML handle with current whorl as starting node
00256  */
00257 void WhorlSim::SetOrbitController( TiXmlHandle handle )
00258 {
00259         // get observer name from configuration file
00260         m_OrbitControllerName = handle.FirstChild( m_omniscient->GetSimulatorName( ) ).Child("ORBIT_CONTROLLER", 0).Element() -> Attribute("value");
00261 
00262         switch ( s_mapStringValues[ m_OrbitControllerName ] )
00263         {
00264                 case OFF:
00265                         cerr << "\nNo Orbit Observer Set." << endl;
00266                         break;
00267                 case s_GPSObserver:
00268                         m_omnipotent2 = new COENaaszController( m_omniscient );
00269                         cerr << " \nOrbit Controller Set: " << m_OrbitControllerName << endl;
00270                         break;
00271                 default:
00272                         cerr << "WARNING: Orbit Controller Name from Configuration File not recognized. Controller -> " << m_OrbitControllerName << endl;
00273                         break;  
00274         }
00275         return ;
00276 }
00277 
00278 // Do not change the comments below - they will be added automatically by CVS
00279 /*****************************************************************************
00280 *       $Log: WhorlSim.cpp,v $
00281 *       Revision 1.8  2007/08/31 16:00:19  jayhawk_hokie
00282 *       Added Orbit Control Capability.
00283 *       
00284 *       Revision 1.7  2007/07/24 09:40:35  jayhawk_hokie
00285 *       Removed matrix and vector pointers.
00286 *       
00287 *       Revision 1.6  2007/05/29 19:14:58  jayhawk_hokie
00288 *       Added Constructor Comments
00289 *       
00290 *       Revision 1.5  2007/05/21 17:50:34  jayhawk_hokie
00291 *       Added Quaternion Observer
00292 *       
00293 *       Revision 1.4  2007/04/09 14:00:10  jayhawk_hokie
00294 *       Modifications to parsing XML config file.
00295 *       
00296 *       Revision 1.3  2007/03/27 19:12:35  jayhawk_hokie
00297 *       Added Switch case for observers and Controllers.
00298 *       
00299 *       Revision 1.2  2007/01/12 20:31:04  bwilliam
00300 *       Modified to use XML parser.
00301 *       
00302 *       Revision 1.1  2003/08/18 19:23:47  mavandyk
00303 *       *** empty log message ***
00304 *       
00305 *       Revision 1.7  2003/08/06 21:44:21  mavandyk
00306 *       Altered to get config parsing to work.
00307 *
00308 ******************************************************************************/

Generated on Wed Sep 5 12:54:28 2007 for DSACSS Operational Code by  doxygen 1.3.9.1