Page MenuHomec4science

kite_model_test.cpp
No OneTemporary

File Metadata

Created
Mon, Sep 30, 00:28

kite_model_test.cpp

#define BOOST_TEST_MODULE kite_model_test
#include <boost/test/included/unit_test.hpp>
#include "integrator.h"
#include "kite.h"
using namespace casadi;
BOOST_AUTO_TEST_SUITE( kite_model_suite_test )
BOOST_AUTO_TEST_CASE( ode_solver_test )
{
std::string kite_config_file = "umx_radian.yaml";
KiteProperties kite_props = kite_utils::LoadProperties(kite_config_file);
AlgorithmProperties algo_props;
algo_props.Integrator = RK4;
KiteDynamics kite(kite_props, algo_props);
Function ode = kite.getNumericDynamics();
/** compare three ode solvers */
Dict opts;
opts["tf"] = 0.05;
opts["poly_order"] = 2;
opts["tol"] = 1e-4;
opts["method"] = IntType::RK4;
ODESolver rk4_solver(ode, opts);
opts["method"] = IntType::CVODES;
ODESolver cvodes_solver(ode, opts);
opts["method"] = IntType::CHEBYCHEV;
ODESolver chebychev_solver(ode, opts);
/** solve a problem */
DM rk4_sol, cheb_sol, cv_sol;
DM init_state = DM::vertcat({0.318732, 0.182552, 0.254833, 1.85435, -0.142882, -0.168359,
-0.229383, -0.0500282, -0.746832, 0.189409, -0.836349, -0.48178, 0.180367});
DM control = DM::vertcat({0.3, kmath::deg2rad(5), -kmath::deg2rad(2)});
double tf = 0.05;
std::chrono::time_point<std::chrono::system_clock> start = kite_utils::get_time();
rk4_sol = rk4_solver.solve(init_state, control, tf);
std::chrono::time_point<std::chrono::system_clock> rk4_stop = kite_utils::get_time();
cv_sol = cvodes_solver.solve(init_state, control, tf);
std::chrono::time_point<std::chrono::system_clock> cv_stop = kite_utils::get_time();
cheb_sol = chebychev_solver.solve(init_state, control, tf);
std::chrono::time_point<std::chrono::system_clock> cheb_stop = kite_utils::get_time();
auto rk4_duration = std::chrono::duration_cast<std::chrono::microseconds>(rk4_stop - start);
auto cv_duration = std::chrono::duration_cast<std::chrono::microseconds>(cv_stop - start);
auto cheb_duration = std::chrono::duration_cast<std::chrono::microseconds>(cheb_stop - start);
std::cout << "RK4 solve time: " << std::setprecision(6)
<< static_cast<double>(rk4_duration.count()) * 1e-6 << " [seconds]" << "\n";
std::cout << "CVODES solve time: " << std::setprecision(6)
<< static_cast<double>(cv_duration.count()) * 1e-6 << " [seconds]" << "\n";
std::cout << "CHEB solve time: " << std::setprecision(6)
<< static_cast<double>(cheb_duration.count()) * 1e-6 << " [seconds]" << "\n";
std::cout << "RK4: " << rk4_sol << "\n";
std::cout << "CVODES: " << cv_sol << "\n";
std::cout << "CHEB: " << cheb_sol << "\n";
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END()

Event Timeline