27 : aircraft_name(fdm->GetAircraft()->GetAircraftName())
28{
29 FGStateSpace ss(fdm);
30 ss.x.add(new FGStateSpace::Vt);
31 ss.x.add(new FGStateSpace::Alpha);
32 ss.x.add(new FGStateSpace::Theta);
33 ss.x.add(new FGStateSpace::Q);
34
35
36 auto engine0 = fdm->GetPropulsion()->GetEngine(0);
37 FGThruster * thruster0 = engine0->GetThruster();
38
39 if (thruster0->GetType()==FGThruster::ttPropeller)
40 {
41 ss.x.add(new FGStateSpace::Rpm0);
42
43
44 int numEngines = fdm->GetPropulsion()->GetNumEngines();
45 if (numEngines>1) ss.x.add(new FGStateSpace::Rpm1);
46 if (numEngines>2) ss.x.add(new FGStateSpace::Rpm2);
47 if (numEngines>3) ss.x.add(new FGStateSpace::Rpm3);
48 if (numEngines>4) {
49 FGLogging log(LogLevel::ERROR);
50 log << "More than 4 engines not currently handled\n";
51 }
52 }
53 ss.x.add(new FGStateSpace::Beta);
54 ss.x.add(new FGStateSpace::Phi);
55 ss.x.add(new FGStateSpace::P);
56 ss.x.add(new FGStateSpace::Psi);
57 ss.x.add(new FGStateSpace::R);
58 ss.x.add(new FGStateSpace::Latitude);
59 ss.x.add(new FGStateSpace::Longitude);
60 ss.x.add(new FGStateSpace::Alt);
61
62 ss.u.add(new FGStateSpace::ThrottleCmd);
63 ss.u.add(new FGStateSpace::DaCmd);
64 ss.u.add(new FGStateSpace::DeCmd);
65 ss.u.add(new FGStateSpace::DrCmd);
66
67
68 ss.y = ss.x;
69
70 x0 = ss.x.get();
71 u0 = ss.u.get();
72 y0 = x0;
73
74 fdm->SuspendIntegration();
75 ss.linearize(x0, u0, y0, A, B, C, D);
76 fdm->ResumeIntegration();
77
78 x_names = ss.x.getName();
79 u_names = ss.u.getName();
80 y_names = ss.y.getName();
81 x_units = ss.x.getUnit();
82 u_units = ss.u.getUnit();
83 y_units = ss.y.getUnit();
84}