Example #1
0
int main() {
	USING_NAMESPACE_ACADO

	//
	// DEFINE THE VARIABLES:
    //
    DifferentialState   xT;     // the trolley position
    DifferentialState   vT;     // the trolley velocity
    IntermediateState   aT;     // the trolley acceleration
    DifferentialState   xL;     // the cable length
    DifferentialState   vL;     // the cable velocity
    IntermediateState   aL;     // the cable acceleration
    DifferentialState   phi;    // the excitation angle
    DifferentialState   omega;  // the angular velocity
        
    DifferentialState   uT;     // trolley velocity control
    DifferentialState   uL;     // cable velocity control

    Control             duT;
    Control             duL;

	//
    // DEFINE THE PARAMETERS:
    //
    const double      tau1 = 0.012790605943772;
    const double      a1   = 0.047418203070092;
    const double      tau2 = 0.024695192379264;
    const double      a2   = 0.034087337273386;
    const double      g = 9.81;       		
    const double      c = 0.0;        		
    const double      m = 1318.0;     		

    //
    // DEFINE THE MODEL EQUATIONS:
    //
    DifferentialEquation   f;
    aT = -1.0 / tau1 * vT + a1 / tau1 * uT;
    aL = -1.0 / tau2 * vL + a2 / tau2 * uL;

    f << 0 == dot( xT ) - vT;
    f << 0 == dot( vT ) - aT;
    f << 0 == dot( xL ) - vL;
    f << 0 == dot( vL ) - aL;
    f << 0 == dot( phi ) - omega;
    f << 0 == dot( omega ) - 1.0/xL*(-g*sin(phi)-aT*cos(phi) 
						-2*vL*omega-c*omega/(m*xL));
    f << 0 == dot( uT ) - duT;
    f << 0 == dot( uL ) - duL;

    //
    // DEFINE THE OUTPUT MODEL:
    //
	OutputFcn	h;

	h << aT;
	h << aL;

	//
	// SET UP THE SIMULATION EXPORT MODULE:
	//
	
	acadoPrintf( "-----------------------------------------\n  Using an equidistant grid:\n-----------------------------------------\n" );
	
	SIMexport sim( 1, 0.1 );
	
	sim.setModel( f );
	sim.addOutput( h, 5 );
	
	sim.set( INTEGRATOR_TYPE, INT_IRK_RIIA5 );
	sim.set( NUM_INTEGRATOR_STEPS, 5 );
	sim.setTimingSteps( 10000 );
	
	sim.exportAndRun( "crane_export", "init_crane.txt", "controls_crane.txt" );
	
	
	acadoPrintf( "-----------------------------------------\n  Using a provided grid:\n-----------------------------------------\n" );
	
	Vector Meas(5);
	Meas(0) = 0.0;
	Meas(1) = 0.2;
	Meas(2) = 0.4;
	Meas(3) = 0.6;
	Meas(4) = 0.8;
	
	SIMexport sim2( 1, 0.1 );
	
	sim2.setModel( f );
	sim2.addOutput( h, Meas );
	
	sim2.set( INTEGRATOR_TYPE, INT_IRK_RIIA5 );
	sim2.set( NUM_INTEGRATOR_STEPS, 5 );
	sim2.setTimingSteps( 10000 );
	
	sim2.exportAndRun( "crane_export", "init_crane.txt", "controls_crane.txt" );

	return 0;
}
Example #2
0
int main() {
	USING_NAMESPACE_ACADO
	
	// ----------------------------------------------------------
    DifferentialState   x;      
    DifferentialState   y;      
    DifferentialState	alpha;	
    DifferentialState   dx;
    DifferentialState	dy;
    DifferentialState	dalpha;
    
    AlgebraicState		ddx;
    AlgebraicState		ddy;
	AlgebraicState		ddalpha;
	AlgebraicState		Fx;
	AlgebraicState		Fy;
	
	Control 			u;

    DifferentialEquation   f;  
    
    OutputFcn h;
    
    h << Fx;
    h << Fy;
    
    const double      m = 2;
    const double      M = 3.5;
    const double      I = 0.1;
    const double	  g = 9.81;

    f << 0			== dot( x ) - dx;
    f << 0			== dot( y ) - dy;
    f << 0			== dot( alpha ) - dalpha;
    f << 0			== dot( dx ) - ddx ;
    f << 0			== dot( dy ) - ddy;
    f << 0			== dot( dalpha ) - ddalpha;
    
    f << 0		    == m*ddx - (Fx+u);
    f << 0			== m*ddy + m*g - (Fy+u);
    f << 0			== I*ddalpha - M - (Fx+u)*y + (Fy+u)*x;
    f << 0			== ddx + dy*dalpha + y*ddalpha;
    f << 0 			== ddy - dx*dalpha - x*ddalpha;
	// ----------------------------------------------------------
	
	Vector Meas(1);
	Meas(0) = 5;
 
    SIMexport sim( 1, 0.1 );
    
    sim.set( INTEGRATOR_TYPE, INT_IRK_RIIA3 );
    sim.set( NUM_INTEGRATOR_STEPS, 4 );
    sim.set( MEASUREMENT_GRID, EQUIDISTANT_GRID );
    
    sim.setModel( f );
    sim.addOutput( h );
    sim.setMeasurements( Meas );
	sim.setTimingSteps( 10000 );
    
    acadoPrintf( "-----------------------------------------\n  Using a Pendulum DAE model in ACADO syntax:\n-----------------------------------------\n" );
    sim.exportAndRun( "externModel_export", "init_externModel.txt", "controls_externModel.txt" );
    
    
    SIMexport sim2( 1, 0.1 );
    
    sim2.set( INTEGRATOR_TYPE, INT_IRK_RIIA3 );
    sim2.set( NUM_INTEGRATOR_STEPS, 4 );
    sim2.set( MEASUREMENT_GRID, EQUIDISTANT_GRID );
    
    sim2.setModel( "model", "rhs", "rhs_jac" );
    sim2.setDimensions( 6, 6, 5, 1 );
    
    sim2.addOutput( "out", "out_jac", 2 );
    sim2.setMeasurements( Meas );
	sim2.setTimingSteps( 10000 );
    
    acadoPrintf( "-----------------------------------------\n  Using an externally defined Pendulum DAE model:\n-----------------------------------------\n" );
    sim2.exportAndRun( "externModel_export", "init_externModel.txt", "controls_externModel.txt" );
    
	return 0;
}