Мне нужно найти следующее состояние моего робота, которое можно найти при решении дифференциальных уравнений.В MATLAB я использовал функцию ode45, а на c ++ я обнаружил в интернете, что мне нужно использовать какой-то метод, такой как stepper runga kutta dopri5.Я попытался понять его реализацию и как-то понял.Теперь мои состояния - X, Y и theta, и чтобы найти следующие состояния, мои дифференциальные уравнения -
Xdot=v*cos(theta)
Ydot=v*sin(theta)
thetadot=w
Теперь есть открытая функция stepper.do_step_impl (System, state, ... и т. Д.), Где я понялявляется то, что система представляет функцию, параметры которой могут быть & state, dstate и t.Теперь вот моя проблема.Мои дифференциальные уравнения имеют переменные v и w, которые мне нужны в моей Системной функции, но, согласно моему пониманию, Системная функция может иметь только фиксированные параметры, то есть State, dstate и t.Как я могу положить V и W в нем?Я надеюсь, что кто-то понимает мой вопрос.Пожалуйста, помогите.Ниже мой код
using namespace boost::numeric::odeint;
typedef std::vector< double > state_type;
void pdot_w( const state_type &state, state_type &dstate, const double t )
{
double p_robot_xdot = v*cos(state[2]);
double p_robot_ydot = v*sin(state[2]);
double thetadot = w;
dstate[0] = p_robot_xdot;
dstate[1] = p_robot_ydot;
dstate[2] = thetadot;
}
runge_kutta_dopri5<state_type> stepper;
stepper.do_step(pdot_w, state , 0, 0.01 );