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; }
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; }