Go to the documentation of this file.
25 #ifndef SRC_SYSTEMS_INCLUDE_CORBO_SYSTEMS_BENCHMARK_NONLINEAR_BENCHMARK_SYSTEMS_H_
26 #define SRC_SYSTEMS_INCLUDE_CORBO_SYSTEMS_BENCHMARK_NONLINEAR_BENCHMARK_SYSTEMS_H_
32 class VanDerPolOscillator :
public SystemDynamicsInterface
39 Ptr getInstance()
const override {
return std::make_shared<VanDerPolOscillator>(); }
44 bool isLinear()
const override {
return false; }
56 assert(
x.size() == f.size() &&
"VanDerPolOscillator::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
59 f[1] = -
_a * (
x[0] *
x[0] - 1) *
x[1] -
x[0] + u[0];
66 #ifdef MESSAGE_SUPPORT
68 void toMessage(messages::SystemDynamics& message)
const override
70 SystemDynamicsInterface::toMessage(message);
72 message.mutable_van_der_pol_oscillator()->set_a(
_a);
75 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
77 SystemDynamicsInterface::fromMessage(message, issues);
79 _a = message.van_der_pol_oscillator().a();
95 Ptr getInstance()
const override {
return std::make_shared<DuffingOscillator>(); }
98 bool isContinuousTime()
const override {
return true; }
100 bool isLinear()
const override {
return false; }
103 int getInputDimension()
const override {
return 1; }
105 int getStateDimension()
const override {
return 2; }
110 assert(
x.size() == getStateDimension());
111 assert(u.size() == getInputDimension());
112 assert(
x.size() == f.size() &&
"DuffingOscillator::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
115 f[1] = -_damping *
x[1] - _spring_alpha *
x[0] - _spring_beta *
x[0] *
x[0] *
x[0] + u[0];
119 void setParameters(
double damping,
double spring_alpha,
double spring_beta)
122 _spring_alpha = spring_alpha;
123 _spring_beta = spring_beta;
126 #ifdef MESSAGE_SUPPORT
128 void toMessage(messages::SystemDynamics& message)
const override
130 SystemDynamicsInterface::toMessage(message);
132 message.mutable_duffing_oscillator()->set_damping(_damping);
133 message.mutable_duffing_oscillator()->set_spring_alpha(_spring_alpha);
134 message.mutable_duffing_oscillator()->set_spring_beta(_spring_beta);
137 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
139 SystemDynamicsInterface::fromMessage(message, issues);
141 _damping = message.duffing_oscillator().damping();
142 _spring_alpha = message.duffing_oscillator().spring_alpha();
143 _spring_beta = message.duffing_oscillator().spring_beta();
149 double _spring_alpha = 1;
150 double _spring_beta = 1;
154 class FreeSpaceRocket :
public SystemDynamicsInterface
161 Ptr getInstance()
const override {
return std::make_shared<FreeSpaceRocket>(); }
166 bool isLinear()
const override {
return false; }
178 assert(
x.size() == f.size() &&
"FreeSpaceRocket::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
181 f[1] = (u[0] - 0.02 *
x[1] *
x[1]) /
x[2];
182 f[2] = -0.01 * u[0] * u[0];
194 Ptr getInstance()
const override {
return std::make_shared<SimplePendulum>(); }
197 bool isContinuousTime()
const override {
return true; }
199 bool isLinear()
const override {
return false; }
202 int getInputDimension()
const override {
return 1; }
204 int getStateDimension()
const override {
return 2; }
209 assert(u.size() == getInputDimension());
210 assert(
x.size() == getStateDimension());
211 assert(
x.size() == f.size() &&
"SimplePendulum::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
214 f[1] = u[0] - _rho / (_m * _l * _l) *
x[1] - _g / _l *
std::sin(
x[0]);
218 void setParameters(
double mass,
double length,
double gravitation,
double friction)
226 #ifdef MESSAGE_SUPPORT
228 void toMessage(messages::SystemDynamics& message)
const override
230 SystemDynamicsInterface::toMessage(message);
232 messages::SimplePendulum* msg = message.mutable_simple_pendulum();
240 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
242 SystemDynamicsInterface::fromMessage(message, issues);
244 const messages::SimplePendulum& msg = message.simple_pendulum();
261 class MasslessPendulum :
public SystemDynamicsInterface
268 Ptr getInstance()
const override {
return std::make_shared<MasslessPendulum>(); }
273 bool isLinear()
const override {
return false; }
285 assert(
x.size() == f.size() &&
"MasslessPendulum::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
294 #ifdef MESSAGE_SUPPORT
296 void toMessage(messages::SystemDynamics& message)
const override
298 SystemDynamicsInterface::toMessage(message);
299 messages::MasslessPendulum* msg = message.mutable_massless_pendulum();
303 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
305 SystemDynamicsInterface::fromMessage(message, issues);
307 const messages::MasslessPendulum& msg = message.massless_pendulum();
324 Ptr getInstance()
const override {
return std::make_shared<CartPole>(); }
329 bool isLinear()
const override {
return false; }
341 assert(
x.size() == f.size() &&
"CartPoleSystem::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
345 double sin_phi_phidot_sq =
std::sin(
x[1]) *
x[3] *
x[3];
363 #ifdef MESSAGE_SUPPORT
365 void toMessage(messages::SystemDynamics& message)
const override
367 SystemDynamicsInterface::toMessage(message);
369 messages::CartPole* msg = message.mutable_cart_pole();
377 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
379 SystemDynamicsInterface::fromMessage(message, issues);
381 const messages::CartPole& msg = message.cart_pole();
406 class ToyExample :
public SystemDynamicsInterface
418 bool isLinear()
const override {
return false; }
430 assert(
x.size() == f.size() &&
"ToyExample::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
434 f[0] =
x[1] + u[0] * (
_mu + (1.0 -
_mu) *
x[0]);
435 f[1] =
x[0] + u[0] * (
_mu - 4.0 * (1.0 -
_mu) *
x[1]);
441 #ifdef MESSAGE_SUPPORT
443 void toMessage(messages::SystemDynamics& message)
const override
445 SystemDynamicsInterface::toMessage(message);
447 message.mutable_toy_example()->set_mu(
_mu);
450 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
452 SystemDynamicsInterface::fromMessage(message, issues);
454 _mu = message.toy_example().mu();
470 Ptr getInstance()
const override {
return std::make_shared<ArtsteinsCircle>(); }
475 bool isLinear()
const override {
return false; }
487 assert(
x.size() == f.size() &&
"ArtsteinsCircle::dynamics(): x and f are not of the same size, do not forget to pre-allocate f.");
489 f[0] = (
x[0] *
x[0] -
x[1] *
x[1]) * u[0];
490 f[1] = 2 *
x[0] *
x[1] * u[0];
493 #ifdef MESSAGE_SUPPORT
495 void toMessage(messages::SystemDynamics& message)
const override
497 SystemDynamicsInterface::toMessage(message);
499 message.mutable_artsteins_circle();
502 void fromMessage(
const messages::SystemDynamics& message, std::stringstream* issues)
override
504 SystemDynamicsInterface::fromMessage(message, issues);
512 #endif // SRC_SYSTEMS_INCLUDE_CORBO_SYSTEMS_BENCHMARK_NONLINEAR_BENCHMARK_SYSTEMS_H_
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
const EIGEN_DEVICE_FUNC SinReturnType sin() const
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
Interface class for system dynamic equations.
ToyExample()
Default constructor.
bool isLinear() const override
Check if the system dynamics are linear.
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
VanDerPolOscillator()
Default constructor.
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half pow(const half &a, const half &b)
int getStateDimension() const override
Return state dimension (x)
void setParameter(double omega0)
#define FACTORY_REGISTER_SYSTEM_DYNAMICS(type)
bool isLinear() const override
Check if the system dynamics are linear.
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
ArtsteinsCircle()
Default constructor.
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
FreeSpaceRocket()
Default constructor.
void setDampingCoefficient(double a)
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
int getInputDimension() const override
Return the plant input dimension (u)
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
int getStateDimension() const override
Return state dimension (x)
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
bool isLinear() const override
Check if the system dynamics are linear.
int getStateDimension() const override
Return state dimension (x)
int getStateDimension() const override
Return state dimension (x)
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
int getInputDimension() const override
Return the plant input dimension (u)
int getInputDimension() const override
Return the plant input dimension (u)
bool isLinear() const override
Check if the system dynamics are linear.
std::shared_ptr< SystemDynamicsInterface > Ptr
int getStateDimension() const override
Return state dimension (x)
void setParameters(double mu)
CartPole()
Default constructor.
A matrix or vector expression mapping an existing expression.
int getInputDimension() const override
Return the plant input dimension (u)
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
int getInputDimension() const override
Return the plant input dimension (u)
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const override
Evaluate the system dynamics equation.
bool isLinear() const override
Check if the system dynamics are linear.
int getStateDimension() const override
Return state dimension (x)
MasslessPendulum()
Default constructor.
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
bool isContinuousTime() const override
Check if the system dynamics are defined in continuous-time.
bool isLinear() const override
Check if the system dynamics are linear.
int getInputDimension() const override
Return the plant input dimension (u)
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
const double & getDampingCoefficient() const
const EIGEN_DEVICE_FUNC CosReturnType cos() const
Ptr getInstance() const override
Return a newly created shared instance of the implemented class.
control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:58