From 1e101d1f8adbbb6cdb9334807067b872ac62004a Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Tue, 16 Jul 2024 23:02:31 +0900 Subject: [PATCH] improve LQT steering and speed control document (#1047) * improve LQT steering and speed control * improve LQT steering and speed control * improve LQT steering and speed control doc * improve LQT steering and speed control doc * improve LQT steering and speed control doc * improve LQT steering and speed control doc --- .../lqr_speed_steer_control.py | 13 +- .../lqr_speed_and_steering_control_main.rst | 127 ++++++++++++++++++ .../lqr_steering_control_model.jpg | Bin 0 -> 11721 bytes .../lqr_speed_and_steering_control/speed.png | Bin 0 -> 22550 bytes .../lqr_speed_and_steering_control/x-y.png | Bin 0 -> 31256 bytes .../lqr_speed_and_steering_control/yaw.png | Bin 0 -> 23991 bytes .../lqr_steering_control_main.rst | 15 ++- tests/test_codestyle.py | 2 +- 8 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_steering_control_model.jpg create mode 100644 docs/modules/path_tracking/lqr_speed_and_steering_control/speed.png create mode 100644 docs/modules/path_tracking/lqr_speed_and_steering_control/x-y.png create mode 100644 docs/modules/path_tracking/lqr_speed_and_steering_control/yaw.png diff --git a/PathTracking/lqr_speed_steer_control/lqr_speed_steer_control.py b/PathTracking/lqr_speed_steer_control/lqr_speed_steer_control.py index a70e30d378..d85fa98a84 100644 --- a/PathTracking/lqr_speed_steer_control/lqr_speed_steer_control.py +++ b/PathTracking/lqr_speed_steer_control/lqr_speed_steer_control.py @@ -55,6 +55,7 @@ def update(state, a, delta): def pi_2_pi(angle): return angle_mod(angle) + def solve_dare(A, B, Q, R): """ solve a discrete time_Algebraic Riccati equation (DARE) @@ -221,8 +222,9 @@ def do_simulation(cx, cy, cyaw, ck, speed_profile, goal): if target_ind % 1 == 0 and show_animation: plt.cla() # for stopping simulation with the esc key. - plt.gcf().canvas.mpl_connect('key_release_event', - lambda event: [exit(0) if event.key == 'escape' else None]) + plt.gcf().canvas.mpl_connect( + 'key_release_event', + lambda event: [exit(0) if event.key == 'escape' else None]) plt.plot(cx, cy, "-r", label="course") plt.plot(x, y, "ob", label="trajectory") plt.plot(cx[target_ind], cy[target_ind], "xg", label="target") @@ -290,6 +292,13 @@ def main(): plt.xlabel("x[m]") plt.ylabel("y[m]") plt.legend() + plt.subplots(1) + + plt.plot(t, np.array(v)*3.6, label="speed") + plt.grid(True) + plt.xlabel("Time [sec]") + plt.ylabel("Speed [m/s]") + plt.legend() plt.subplots(1) plt.plot(s, [np.rad2deg(iyaw) for iyaw in cyaw], "-r", label="yaw") diff --git a/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst b/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst index 68ea9c88b2..a0b145456c 100644 --- a/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst +++ b/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst @@ -7,6 +7,133 @@ Path tracking simulation with LQR speed and steering control. .. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/PathTracking/lqr_speed_steer_control/animation.gif +`[Code Link] `_ + +Overview +~~~~~~~~ + +The LQR (Linear Quadratic Regulator) speed and steering control model implemented in `lqr_speed_steer_control.py` provides a simulation +for an autonomous vehicle to track: + +1. A desired speed by adjusting acceleration based on feedback from the current state and the desired speed. + +2. A desired trajectory by adjusting steering angle based on feedback from the current state and the desired trajectory. + +by only using one LQT controller. + +Vehicle motion Model +~~~~~~~~~~~~~~~~~~~~~ + +The below figure shows the geometric model of the vehicle used in this simulation: + +.. image:: lqr_steering_control_model.jpg + :width: 600px + +The `e`, :math:`{\theta}`, and :math:`\upsilon` represent the lateral error, orientation error, and velocity error, respectively, with respect to the desired trajectory and speed. +And :math:`\dot{e}` and :math:`\dot{\theta}` represent the rates of change of these errors. + +The :math:`e_t` and :math:`\theta_t`, and :math:`\upsilon` are the updated values of `e`, :math:`\theta`, :math:`\upsilon` and at time `t`, respectively, and can be calculated using the following kinematic equations: + +.. math:: e_t = e_{t-1} + \dot{e}_{t-1} dt + +.. math:: \theta_t = \theta_{t-1} + \dot{\theta}_{t-1} dt + +.. math:: \upsilon_t = \upsilon_{t-1} + a_{t-1} dt + +Where `dt` is the time difference and :math:`a_t` is the acceleration at the time `t`. + +The change rate of the `e` can be calculated as: + +.. math:: \dot{e}_t = V \sin(\theta_{t-1}) + +Where `V` is the current vehicle speed. + +If the :math:`\theta` is small, + +.. math:: \theta \approx 0 + +the :math:`\sin(\theta)` can be approximated as :math:`\theta`: + +.. math:: \sin(\theta) = \theta + +So, the change rate of the `e` can be approximated as: + +.. math:: \dot{e}_t = V \theta_{t-1} + +The change rate of the :math:`\theta` can be calculated as: + +.. math:: \dot{\theta}_t = \frac{V}{L} \tan(\delta) + +where `L` is the wheelbase of the vehicle and :math:`\delta` is the steering angle. + +If the :math:`\delta` is small, + +.. math:: \delta \approx 0 + +the :math:`\tan(\delta)` can be approximated as :math:`\delta`: + +.. math:: \tan(\delta) = \delta + +So, the change rate of the :math:`\theta` can be approximated as: + +.. math:: \dot{\theta}_t = \frac{V}{L} \delta + +The above equations can be used to update the state of the vehicle at each time step. + +Control Model +~~~~~~~~~~~~~~ + +To formulate the state-space representation of the vehicle dynamics as a linear model, +the state vector `x` and control input vector `u` are defined as follows: + +.. math:: x_t = [e_t, \dot{e}_t, \theta_t, \dot{\theta}_t, \upsilon_t]^T + +.. math:: u_t = [\delta_t, a_t]^T + +The linear state transition equation can be represented as: + +.. math:: x_{t+1} = A x_t + B u_t + +where: + +:math:`\begin{equation*} A = \begin{bmatrix} 1 & dt & 0 & 0 & 0\\ 0 & 0 & v & 0 & 0\\ 0 & 0 & 1 & dt & 0\\ 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 1\\\end{bmatrix} \end{equation*}` + +:math:`\begin{equation*} B = \begin{bmatrix} 0 & 0\\ 0 & 0\\ 0 & 0\\ \frac{v}{L} & 0\\ 0 & dt \\ \end{bmatrix} \end{equation*}` + +LQR controller +~~~~~~~~~~~~~~~ + +The Linear Quadratic Regulator (LQR) controller is used to calculate the optimal control input `u` that minimizes the quadratic cost function: + +:math:`J = \sum_{t=0}^{N} (x_t^T Q x_t + u_t^T R u_t)` + +where `Q` and `R` are the weighting matrices for the state and control input, respectively. + +for the linear model: + +:math:`x_{t+1} = A x_t + B u_t` + +The optimal control input `u` can be calculated as: + +:math:`u_t = -K x_t` + +where `K` is the feedback gain matrix obtained by solving the Riccati equation. + +Simulation results +~~~~~~~~~~~~~~~~~~~ + + +.. image:: x-y.png + :width: 600px + +.. image:: yaw.png + :width: 600px + +.. image:: speed.png + :width: 600px + + + References: ~~~~~~~~~~~ diff --git a/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_steering_control_model.jpg b/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_steering_control_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83754d5bb01c9a1a4339248be09b476578291922 GIT binary patch literal 11721 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 YY#zr#%kTQLyIC52cxCrT=Fh?Z0n~N9RsaA1 literal 0 HcmV?d00001 diff --git a/docs/modules/path_tracking/lqr_speed_and_steering_control/speed.png b/docs/modules/path_tracking/lqr_speed_and_steering_control/speed.png new file mode 100644 index 0000000000000000000000000000000000000000..ae99eb7ea3ddcb73d6d3e657ac0bee507b1ad6ed GIT binary patch literal 22550 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 MZ4ac2w?%*RA94a*245^ZYCiOlkPR9 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�^J9P{5Ky^UU$V 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 O7_w3iB|qKO^ZFmzkv<^+ literal 0 HcmV?d00001 diff --git a/docs/modules/path_tracking/lqr_speed_and_steering_control/yaw.png b/docs/modules/path_tracking/lqr_speed_and_steering_control/yaw.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3d9c1d10b7994d883e720d51950fc6bed47916 GIT binary patch literal 23991 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 literal 0 HcmV?d00001 diff --git a/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst b/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst index fcc9b5278a..baca7a33fc 100644 --- a/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst +++ b/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst @@ -8,6 +8,8 @@ control. .. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/PathTracking/lqr_steer_control/animation.gif +`[Code Link] `_ + Overview ~~~~~~~~ @@ -23,10 +25,10 @@ The below figure shows the geometric model of the vehicle used in this simulatio .. image:: lqr_steering_control_model.jpg :width: 600px -The `e` and `theta` represent the lateral error and orientation error, respectively, with respect to the desired trajectory. +The `e` and :math:`\theta` represent the lateral error and orientation error, respectively, with respect to the desired trajectory. And :math:`\dot{e}` and :math:`\dot{\theta}` represent the rates of change of these errors. -The :math:`e_t` and :math:`theta_t` are the updated values of `e` and `theta` at time `t`, respectively, and can be calculated using the following kinematic equations: +The :math:`e_t` and :math:`\theta_t` are the updated values of `e` and :math:`\theta` at time `t`, respectively, and can be calculated using the following kinematic equations: .. math:: e_t = e_{t-1} + \dot{e}_{t-1} dt @@ -38,9 +40,9 @@ The change rate of the `e` can be calculated as: .. math:: \dot{e}_t = V \sin(\theta_{t-1}) -Where `V` is the vehicle speed. +Where `V` is the current vehicle speed. -If the :math:`theta` is small, +If the :math:`\theta` is small, .. math:: \theta \approx 0 @@ -72,6 +74,9 @@ So, the change rate of the :math:`\theta` can be approximated as: The above equations can be used to update the state of the vehicle at each time step. +Control Model +~~~~~~~~~~~~~~ + To formulate the state-space representation of the vehicle dynamics as a linear model, the state vector `x` and control input vector `u` are defined as follows: @@ -79,7 +84,7 @@ the state vector `x` and control input vector `u` are defined as follows: .. math:: u_t = \delta_t -The state transition equation can be represented as: +The linear state transition equation can be represented as: .. math:: x_{t+1} = A x_t + B u_t diff --git a/tests/test_codestyle.py b/tests/test_codestyle.py index a7d11d270f..55e558c184 100644 --- a/tests/test_codestyle.py +++ b/tests/test_codestyle.py @@ -54,7 +54,7 @@ def run_ruff(files, fix): return 0, "" args = ['--fix'] if fix else [] res = subprocess.run( - ['ruff', f'--config={CONFIG}'] + args + files, + ['ruff', 'check', f'--config={CONFIG}'] + args + files, stdout=subprocess.PIPE, encoding='utf-8' )