57 return _output->getOutputDimension();
99 if (u_sequence->getTimeDimension() < 1)
105 u = u_sequence->getValuesMap(0);
115 std::vector<std::pair<double, ControlVector>> delayed_u_seq;
122 double cur_t = t.
toSec();
123 for (
int i = 0; i < delayed_u_seq.size(); ++i)
125 double cur_dt = delayed_u_seq[i].first;
150 bool SimulatedPlant::output(OutputVector& output,
const Time& t, SignalTargetInterface* ,
const std::string& )
182 if (x_init.rows() !=
_dynamics->getStateDimension())
211 #ifdef MESSAGE_SUPPORT
212 void SimulatedPlant::toMessage(messages::SimulatedPlant& message)
const
215 if (
_output)
_output->toMessage(*message.mutable_output_function());
226 void SimulatedPlant::fromMessage(
const corbo::messages::SimulatedPlant& message, std::stringstream* issues)
235 if (message.has_system_dynamics())
239 util::get_oneof_field_type_expand_isolated(message.system_dynamics(),
"system_dynamics", type,
false, 1);
245 dynamics->fromMessage(message.system_dynamics(), issues);
250 *issues <<
"SimulatedPlant: No system dynamics specified.\n";
256 if (message.has_output_function())
260 util::get_oneof_field_type_expand_isolated(message.output_function(),
"output_function", type,
false, 1);
265 output->fromMessage(message.output_function(), issues);
271 if (message.has_integrator())
275 util::get_oneof_field_type(message.integrator(),
"explicit_integrator", type,
false);
280 integrator->fromMessage(message.integrator(), issues);
288 int dim = message.x0_size();
289 Eigen::VectorXd x0(dim);
290 for (
int i = 0; i < dim; ++i) x0[i] = message.x0(i);
293 *issues <<
"Size of state x0 (" << dim <<
") does not comply with system dynamics dimension (" <<
_dynamics->getStateDimension()
298 *issues <<
"SimulatedPlant: dimension of x0 must be larger then zero.\n";
301 if (message.has_input_disturbance() && !message.input_disturbance().has_no_disturbance())
305 util::get_oneof_field_type(message.input_disturbance(),
"disturbance", type,
false);
310 disturbance->fromMessage(message.input_disturbance(), issues);
317 if (message.has_output_disturbance() && !message.output_disturbance().has_no_disturbance())
321 util::get_oneof_field_type(message.output_disturbance(),
"disturbance", type,
false);
326 disturbance->fromMessage(message.output_disturbance(), issues);
333 if (message.has_state_disturbance() && !message.state_disturbance().has_no_disturbance())
337 util::get_oneof_field_type(message.state_disturbance(),
"disturbance", type,
false);
342 disturbance->fromMessage(message.state_disturbance(), issues);
343 if (!disturbance->checkParameters(
_dynamics->getStateDimension(), issues))
return;
348 *issues <<
"SimulatedPlant: Cannot set state disturbance model.\n";