ajout cascaded_loop

This commit is contained in:
Nolan Reynier Nomer 2026-05-14 15:27:12 +02:00
parent 077af49282
commit a4dd4f290f
8 changed files with 136 additions and 65 deletions

Binary file not shown.

Binary file not shown.

View file

@ -80,19 +80,28 @@
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Closed-loop model of the bicycle-cargo system with PI control.}}{5}{figure.1}\protected@file@percent }
\newlabel{fig:simulink-closedloop}{{1}{5}{Closed-loop model of the bicycle-cargo system with PI control}{figure.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {VIII-C}}Control Architecture Exploration}{5}{subsection.8.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {IX}Results}{5}{section.9}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {IX-A}}FOC Controller Validation}{5}{subsection.9.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-A}1}Current Status Summary}{5}{subsubsection.9.1.1}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {II}{\ignorespaces FOC controller development status}}{5}{table.2}\protected@file@percent }
\newlabel{tab:foc_status}{{II}{5}{FOC controller development status}{table.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {IX-B}}Bicycle-Cargo System Control Results}{5}{subsection.9.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-B}1}Simulation Results}{5}{subsubsection.9.2.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Position tracking error between bicycle and cargo cart.}}{6}{figure.2}\protected@file@percent }
\newlabel{fig:tracking-error}{{2}{6}{Position tracking error between bicycle and cargo cart}{figure.2}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Cascaded control architecture for the bicycle-cargo system.}}{6}{figure.2}\protected@file@percent }
\newlabel{fig:cascaded-loop}{{2}{6}{Cascaded control architecture for the bicycle-cargo system}{figure.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {IX}Results}{6}{section.9}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {IX-A}}FOC Controller Validation}{6}{subsection.9.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-A}1}Current Status Summary}{6}{subsubsection.9.1.1}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {II}{\ignorespaces FOC controller development status}}{6}{table.2}\protected@file@percent }
\newlabel{tab:foc_status}{{II}{6}{FOC controller development status}{table.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {IX-B}}Bicycle-Cargo System Control Results}{6}{subsection.9.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-B}1}Simulation Results}{6}{subsubsection.9.2.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Position tracking error between bicycle and cargo cart.}}{6}{figure.3}\protected@file@percent }
\newlabel{fig:tracking-error}{{3}{6}{Position tracking error between bicycle and cargo cart}{figure.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-B}2}Experimental Load Characterization}{6}{subsubsection.9.2.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Measured motor current under three loading conditions.}}{6}{figure.3}\protected@file@percent }
\newlabel{fig:motor-currents}{{3}{6}{Measured motor current under three loading conditions}{figure.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {X}Discussion}{6}{section.10}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Measured motor current under three loading conditions.}}{6}{figure.4}\protected@file@percent }
\newlabel{fig:motor-currents}{{4}{6}{Measured motor current under three loading conditions}{figure.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {IX-C}}FOC Controller Validation}{7}{subsection.9.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {IX-C}1}Current Status Summary}{7}{subsubsection.9.3.1}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {III}{\ignorespaces FOC controller development status}}{7}{table.3}\protected@file@percent }
\newlabel{tab:foc_status}{{III}{7}{FOC controller development status}{table.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {X}Discussion}{7}{section.10}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {XI}Perspectives and Future Work}{7}{section.11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {XI-A}}Hardware Completion and Testing}{7}{subsection.11.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {XII}Conclusion/Summary}{7}{section.12}\protected@file@percent }
\bibstyle{IEEEtran}
\bibdata{PIR_MadMax3}
\bibcite{patil_analysis_2025}{1}
@ -105,8 +114,5 @@
\bibcite{lee_advanced_2001}{8}
\bibcite{b1}{9}
\bibcite{b2}{10}
\@writefile{toc}{\contentsline {section}{\numberline {XI}Perspectives and Future Work}{7}{section.11}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {XI-A}}Hardware Completion and Testing}{7}{subsection.11.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {XII}Conclusion/Summary}{7}{section.12}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{References}{7}{section*.3}\protected@file@percent }
\gdef \@abspage@last{7}
\@writefile{toc}{\contentsline {section}{References}{8}{section*.3}\protected@file@percent }
\gdef \@abspage@last{8}

View file

@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex 2026.3.16) 13 MAY 2026 19:57
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex 2026.3.16) 14 MAY 2026 15:24
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
@ -459,7 +459,11 @@ Package xcolor Info: Model `wave' substituted by `hsb' on input line 1375.
)
Package translations Info: No language package found. I am going to use `englis
h' as default language. on input line 19.
(./main.aux)
(./main.aux
LaTeX Warning: Label `tab:foc_status' multiply defined.
)
\openout1 = `main.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 19.
@ -533,13 +537,13 @@ Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
LaTeX Font Info: Trying to load font information for U+msa on input line 124
LaTeX Font Info: Trying to load font information for U+msa on input line 122
.
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Trying to load font information for U+msb on input line 124
LaTeX Font Info: Trying to load font information for U+msb on input line 122
.
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
@ -553,28 +557,31 @@ Underfull \hbox (badness 1509) in paragraph at lines 432--439
[]
[4]
<./Figures/sys_dyn_matlab.png, id=253, 430.2474pt x 226.6869pt>
<./Figures/sys_dyn_matlab.png, id=261, 430.2474pt x 226.6869pt>
File: ./Figures/sys_dyn_matlab.png Graphic file (type png)
<use ./Figures/sys_dyn_matlab.png>
Package pdftex.def Info: ./Figures/sys_dyn_matlab.png used on input line 520.
(pdftex.def) Requested size: 252.0pt x 132.77559pt.
<./Figures/error_fig.png, id=258, 509.7444pt x 328.5876pt>
[5 <./Figures/sys_dyn_matlab.png>]
<./Figures/Schema_Autom_PIR.pdf, id=272, 610.21573pt x 143.36761pt>
File: ./Figures/Schema_Autom_PIR.pdf Graphic file (type pdf)
<use ./Figures/Schema_Autom_PIR.pdf>
Package pdftex.def Info: ./Figures/Schema_Autom_PIR.pdf used on input line 557
.
(pdftex.def) Requested size: 252.0pt x 59.20549pt.
<./Figures/error_fig.png, id=277, 509.7444pt x 328.5876pt>
File: ./Figures/error_fig.png Graphic file (type png)
<use ./Figures/error_fig.png>
Package pdftex.def Info: ./Figures/error_fig.png used on input line 573.
Package pdftex.def Info: ./Figures/error_fig.png used on input line 620.
(pdftex.def) Requested size: 252.0pt x 162.44328pt.
LaTeX Warning: `!h' float specifier changed to `!ht'.
[5 <./Figures/sys_dyn_matlab.png>]
<./Figures/Motor_currents.png, id=271, 499.6266pt x 328.1058pt>
File: ./Figures/Motor_currents.png Graphic file (type png)
<use ./Figures/Motor_currents.png>
Package pdftex.def Info: ./Figures/Motor_currents.png used on input line 595.
(pdftex.def) Requested size: 252.0pt x 165.48434pt.
[6 <./Figures/error_fig.png (PNG copy)> <./Figures/Motor_currents.png (PNG cop
y)>] (./main.bbl
<./Figures/Motor_currents.pdf, id=279, 501.875pt x 329.23pt>
File: ./Figures/Motor_currents.pdf Graphic file (type pdf)
<use ./Figures/Motor_currents.pdf>
Package pdftex.def Info: ./Figures/Motor_currents.pdf used on input line 642.
(pdftex.def) Requested size: 252.0pt x 165.31287pt.
[6 <./Figures/Schema_Autom_PIR.pdf> <./Figures/error_fig.png (PNG copy)> <./Fi
gures/Motor_currents.pdf>] [7]
(./main.bbl
Underfull \hbox (badness 1490) in paragraph at lines 97--99
[]\OT1/ptm/m/n/8 ------, ``lispbm in vesc,'' []$https : / / github . com / vedd
erb / bldc / tree / master /
@ -592,35 +599,44 @@ Before submitting the final camera ready copy, remember to:
uses only Type 1 fonts and that every step in the generation
process uses the appropriate paper size.
[7] (./main.aux)
[8
] (./main.aux)
LaTeX Warning: There were multiply-defined labels.
Package rerunfilecheck Info: File `main.out' has not changed.
(rerunfilecheck) Checksum: D428FCA31372168544B7CCCCB9675B0D;9238.
(rerunfilecheck) Checksum: 4DF27D054EB6179EF4DF0FC61FEDCAAE;9611.
)
Here is how much of TeX's memory you used:
14909 strings out of 478287
283324 string characters out of 5849289
567540 words of memory out of 5000000
32854 multiletter control sequences out of 15000+600000
14924 strings out of 478287
283713 string characters out of 5849289
567663 words of memory out of 5000000
32863 multiletter control sequences out of 15000+600000
508470 words of font info for 101 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191
70i,10n,79p,470b,753s stack positions out of 5000i,500n,10000p,200000b,80000s
70i,10n,79p,470b,830s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/share/texliv
e/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/share/texlive/texm
f-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist
/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/fonts/
type1/public/amsfonts/cm/cmmi8.pfb></usr/share/texlive/texmf-dist/fonts/type1/p
ublic/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/a
msfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/
cm/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy1
0.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb><
/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb></usr/share/texl
ive/texmf-dist/fonts/type1/urw/times/utmbi8a.pfb></usr/share/texlive/texmf-dist
/fonts/type1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/ur
w/times/utmri8a.pfb>
Output written on main.pdf (7 pages, 348774 bytes).
/fonts/type1/public/amsfonts/cm/cmmi6.pfb></usr/share/texlive/texmf-dist/fonts/
type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/fonts/type1/p
ublic/amsfonts/cm/cmmi8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/a
msfonts/cm/cmmi9.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts
/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr
6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></
usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/shar
e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texliv
e/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texm
f-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/share/texlive/texmf-dist/
fonts/type1/public/amsfonts/cm/cmti8.pfb></usr/share/texlive/texmf-dist/fonts/t
ype1/urw/times/utmb8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/
utmbi8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></u
sr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
Output written on main.pdf (8 pages, 676579 bytes).
PDF statistics:
372 PDF objects out of 1000 (max. 8388607)
329 compressed objects within 4 object streams
71 named destinations out of 1000 (max. 500000)
384 words of extra memory for PDF output out of 10000 (max. 10000000)
455 PDF objects out of 1000 (max. 8388607)
392 compressed objects within 4 object streams
76 named destinations out of 1000 (max. 500000)
405 words of extra memory for PDF output out of 10000 (max. 10000000)

View file

@ -39,8 +39,10 @@
\BOOKMARK [2][-]{subsection.9.2}{\376\377\000B\000i\000c\000y\000c\000l\000e\000-\000C\000a\000r\000g\000o\000\040\000S\000y\000s\000t\000e\000m\000\040\000C\000o\000n\000t\000r\000o\000l\000\040\000R\000e\000s\000u\000l\000t\000s}{section.9}% 39
\BOOKMARK [3][-]{subsubsection.9.2.1}{\376\377\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000R\000e\000s\000u\000l\000t\000s}{subsection.9.2}% 40
\BOOKMARK [3][-]{subsubsection.9.2.2}{\376\377\000E\000x\000p\000e\000r\000i\000m\000e\000n\000t\000a\000l\000\040\000L\000o\000a\000d\000\040\000C\000h\000a\000r\000a\000c\000t\000e\000r\000i\000z\000a\000t\000i\000o\000n}{subsection.9.2}% 41
\BOOKMARK [1][-]{section.10}{\376\377\000D\000i\000s\000c\000u\000s\000s\000i\000o\000n}{}% 42
\BOOKMARK [1][-]{section.11}{\376\377\000P\000e\000r\000s\000p\000e\000c\000t\000i\000v\000e\000s\000\040\000a\000n\000d\000\040\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 43
\BOOKMARK [2][-]{subsection.11.1}{\376\377\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000C\000o\000m\000p\000l\000e\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000T\000e\000s\000t\000i\000n\000g}{section.11}% 44
\BOOKMARK [1][-]{section.12}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n\000/\000S\000u\000m\000m\000a\000r\000y}{}% 45
\BOOKMARK [1][-]{section*.3}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 46
\BOOKMARK [2][-]{subsection.9.3}{\376\377\000F\000O\000C\000\040\000C\000o\000n\000t\000r\000o\000l\000l\000e\000r\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.9}% 42
\BOOKMARK [3][-]{subsubsection.9.3.1}{\376\377\000C\000u\000r\000r\000e\000n\000t\000\040\000S\000t\000a\000t\000u\000s\000\040\000S\000u\000m\000m\000a\000r\000y}{subsection.9.3}% 43
\BOOKMARK [1][-]{section.10}{\376\377\000D\000i\000s\000c\000u\000s\000s\000i\000o\000n}{}% 44
\BOOKMARK [1][-]{section.11}{\376\377\000P\000e\000r\000s\000p\000e\000c\000t\000i\000v\000e\000s\000\040\000a\000n\000d\000\040\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 45
\BOOKMARK [2][-]{subsection.11.1}{\376\377\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000C\000o\000m\000p\000l\000e\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000T\000e\000s\000t\000i\000n\000g}{section.11}% 46
\BOOKMARK [1][-]{section.12}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n\000/\000S\000u\000m\000m\000a\000r\000y}{}% 47
\BOOKMARK [1][-]{section*.3}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 48

Binary file not shown.

View file

@ -279,7 +279,7 @@ assistance based on system dynamics.
microcontroller.
The initial idea was to make this tile \textit{pluggable} into our
carrier board, similar to an Arduino shield. This would allow :
carrier board, similar to an Arduino shield. This would allow:
\begin{itemize}
\item Easy replacement of the computing core without re-soldering.
\item Modular upgrades of the microcontroller.
@ -525,6 +525,53 @@ where $e_{\text{ref}} = \SI{-0.5}{\meter}$ represents the desired equilibrium of
\subsection{Control Architecture Exploration}
Beyond the standard PI control structure simulated in the previous sections, this project explores a more sophisticated
control law: the Cascaded Loop Architecture. This approach is envisioned as a high-level software enhancement to meet
the robustness and safety requirements inherent to electric cargo mobility. This means that our control law includes two
feedback loops that use two different physical parameters.
The selected cascaded structure is a well-established industry standard, particularly in high-performance motion control
and robotics. Similar architectures are widely employed in Automated Guided Vehicles (AGVs) and platooning systems,
where a “follower” unit must synchronize its dynamics with a “leader” unit through precise feedback loops.
The proposed approach decomposes the complex task of “cart following” into manageable sub-tasks by nesting control
loops:
\begin{itemize}
\item Outer loop: Position control layer.
Using a linear encoder or distance sensor mounted on the trailers hitch, the system measures the relative
displacement (error) between the bicycle and the cargo cart. This error is processed by a Proportional (P)
Controller. The primary goal of this stage is to translate physical distance into a target velocity setpoint. By
saturating the output of this loop, we can prevent the cargo cart from ever exceeding the bicycles speed, thereby
ensuring it never “pushes” the cyclist.
\item Inner loop: Velocity control layer.
The velocity setpoint generated by the outer loop is fed into this internal layer, the inner loop is responsible for
commanding the motor torque directly to compensate for immediate mechanical disturbances. Because this loop operates
at a higher frequency, it can reject disturbances such as sudden changes in rolling resistance or friction, before
they significantly impact the overall position error.
\end{itemize}
\begin{figure}[!h]
\centering
\includegraphics[width=\linewidth]{./Figures/Schema_Autom_PIR.pdf}
\caption{Cascaded control architecture for the bicycle-cargo system.}
\label{fig:cascaded-loop}
\end{figure}
Fig.~\ref{fig:cascaded-loop} illustrates the cascade architecture for the dynamics of the cargo bike.
An outer Proportional Controller $K_{p,x}$ converts the position error $e_x = x_{\text{ref}} - x$ into a velocity
reference $v_{\text{ref}}$, which serves as the set-point for the inner loop.
The inner Proportional Controller $K_{p,v}$ then transforms the velocity error $e_v = v_{\text{ref}} - v$ into a
torque reference $\tau_{\text{ref}}$.
This command is processed by the motor/actuator block, which delivers the actual torque $\tau$.
The model of the plant maps this torque to velocity $v$, and the integrator $1/s$ reconstructs the position $x$.
The adoption of a cascaded loop architecture offers decisive advantages but comes with disadvantages. This precision
introduces increased complexity: the multiplication of tuning parameters and the requirement for high-resolution
feedback sensors, such as encoders, raise hardware costs and must come with high-performance software. These technical
constraints represent a significant challenge and may raise other issues.
% ******************************** RESULTS **************************************************************************
@ -592,7 +639,7 @@ cargo cart. The motor current measured during these experiments is shown in Fig.
\begin{figure}[!h]
\centering
\includegraphics[width=\linewidth]{./Figures/Motor_currents.png}
\includegraphics[width=\linewidth]{./Figures/Motor_currents.pdf}
\caption{Measured motor current under three loading conditions.}
\label{fig:motor-currents}
\end{figure}