Home SysRoz Lab13

Mariusz Janiak

Systemy Rozproszone Lab

PWr
PWr

Lab13 ‒ Rozwiązywanie równań różniczkowych

Zadania

  1. Opracuj węzł ROS symulujący ruch platformy mobilnej typu monocykl, który opisać można przez następujący układ sterowania

    $$\left\{\begin{array}{rcl} \dot{x} & = & \cos{\phi}*u_1,\\ \dot{y} & = & \sin{\phi}*u_1,\\ \dot{\phi} & = & u_2,\end{array}\right.$$

    gdzie $(x,y)$ reprezentuje pozycję platformy na płaszczyźnie XY, $\phi$ to orientacja platformy, $u_1$ sygnał sterujący prędkością liniową i $u_2$ to sygnał sterujący prędkością obrotową.
  2. Do rozwiązania równania różniczkowego należy użyć solvera ODE, przykładowo solve_ivp form SciPy
  3. Podczas symulacji zastosuj nietrywialne sygnały sterujące $(u_1, u_2)$
  4. Zobrazuj ścieżkę ruchu platformy na płaszczyźnie XY. Żeby to wykonać, należy wykorzystać narzędzia ROS lub zapisać sygnały $x(t)$ i $y(t)$ w pliku, a następnie użyć zewnętrznego narzędzia, tj gnuplot lub Python.

Jak rozwiązać równanie różniczkowe w Pythonie?

Posłużymy się solverem solve_ipv z pakietu SciPy

from scipy.integrate import solve_ivp

# Prawa strona równania różniczkowego dot(x) = f(t, x, p), gdzie
# t -- czas
# x -- stan
# p -- parametr
def f(t, x, p):
  return -p * x

# Horyzont czasu
T = [0, 10]
# Stan początkowy
x0 = [2]
# Parametr
p = 0.5

# Rozwiąż
sol = solve_ivp(f, T, x0, args=[p])

# Wyświetl rozwiązanie
print(sol.t)
print(sol.y)