initial commit

This commit is contained in:
khannurien
2026-01-17 08:51:25 +01:00
commit 750d82eb32
47 changed files with 1925 additions and 0 deletions

54
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,54 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu
# Install dependencies for TeX Live installation and usage
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
perl \
biber \
wget \
fontconfig \
make \
git \
curl \
python3 \
python3-pygments \
&& rm -rf /var/lib/apt/lists/*
# Set non-root user provided by Microsoft base image
ARG USERNAME=vscode
# Switch to user home directory
USER $USERNAME
WORKDIR /home/$USERNAME
# Set TeX Live paths and update environment
ENV TEXLIVE_INSTALL_PREFIX="/usr/local/texlive"
ENV TEXLIVE_INSTALL_TEXDIR="${TEXLIVE_INSTALL_PREFIX}/2025"
ENV PATH="${TEXLIVE_INSTALL_TEXDIR}/bin/x86_64-linux:${PATH}"
# Download and install TeX Live 2025 as root
RUN wget -q https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \
tar -xzf install-tl-unx.tar.gz && \
rm install-tl-unx.tar.gz && \
cd install-tl-* && \
echo "selected_scheme scheme-full" > texlive.profile && \
echo "TEXDIR ${TEXLIVE_INSTALL_TEXDIR}" >> texlive.profile && \
echo "TEXMFCONFIG /home/vscode/.texlive2025/texmf-config" >> texlive.profile && \
echo "TEXMFVAR /home/vscode/.texlive2025/texmf-var" >> texlive.profile && \
echo "instopt_adjustpath 1" >> texlive.profile && \
echo "tlpdbopt_autobackup 0" >> texlive.profile && \
sudo perl ./install-tl --profile=texlive.profile --no-interaction && \
cd .. && rm -rf install-tl-*
# User-writeable directories for TeX Live and LuaLaTeX
ENV TEXMFCONFIG="/home/vscode/.texlive2025/texmf-config"
ENV TEXMFVAR="/home/vscode/.texlive2025/texmf-var"
ENV LUAOTFLOAD_HOME="/home/vscode/.texlive2025/texmf-var/luatex-cache"
ENV LUAOTFLOAD_DB="/home/vscode/.texlive2025/texmf-var/luatex-cache/database.sqlite"
# Install latexmk
RUN sudo tlmgr option autobackup 0 && \
sudo tlmgr install latexmk && \
sudo tlmgr path add
# Set the working directory back to a neutral location
WORKDIR /workspace

View File

@@ -0,0 +1,121 @@
{
"name": "LaTeX Dev Container",
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"customizations": {
"vscode": {
"settings": {
// VSCode text editor settings
"editor.fontSize": 16,
"editor.tabSize": 2,
"editor.lineHeight": 1.8,
"editor.cursorBlinking": "phase",
"editor.unicodeHighlight.nonBasicASCII": false,
"editor.wordWrap": "on",
"editor.wrappingStrategy": "advanced",
"editor.wordBasedSuggestions": "off",
// "editor.quickSuggestions": {
// "other": "on",
// "comments": "off",
// "strings": "off"
// },
// "editor.acceptSuggestionOnEnter": "off",
// LaTeX Workshop settings
"latex-workshop.intellisense.package.enabled": true,
"latex-workshop.intellisense.unimathsymbols.enabled": true,
"latex-workshop.intellisense.citation.backend": "biblatex",
"latex-workshop.latex.outDir": "build",
"latex-workshop.latex.autoBuild.run": "onFileChange",
"latex-workshop.latex.autoBuild.interval": 3000,
"latex-workshop.synctex.afterBuild.enabled": true,
"latex-workshop.view.autoFocus.enabled": false,
"latex-workshop.view.pdf.reload.transition": "fade",
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.view.pdf.zoom": "auto",
"latex-workshop.latex.tools": [
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-pdflatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + pdflatex + biber"
},
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-xelatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + xelatex + biber"
},
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-lualatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + lualatex + biber"
}
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk + lualatex + biber",
"tools": [
"latexmk + lualatex + biber"
]
},
{
"name": "latexmk + xelatex + biber",
"tools": [
"latexmk + xelatex + biber"
]
},
{
"name": "latexmk + pdflatex + biber",
"tools": [
"latexmk + pdflatex + biber"
]
}
],
"latex-workshop.latex.recipe.default": "lastUsed"
},
"extensions": [
"james-yu.latex-workshop",
"wayou.vscode-todo-highlight"
]
}
},
"remoteUser": "vscode",
"updateRemoteUserUID": true,
"features": {}
}

301
.gitignore vendored Normal file
View File

@@ -0,0 +1,301 @@
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
*.slg
*.slo
*.sls
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplot
*.gnuplot
*.table
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.glog
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
# *.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# newpax
*.newpax
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# svg
svg-inkscape/
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# titletoc
*.ptc
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# xwatermark package
*.xwm
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib

103
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,103 @@
{
// VSCode text editor settings
"editor.fontSize": 16,
"editor.tabSize": 2,
"editor.lineHeight": 1.8,
"editor.cursorBlinking": "phase",
"editor.unicodeHighlight.nonBasicASCII": false,
"editor.wordWrap": "on",
"editor.wrappingStrategy": "advanced",
"editor.wordBasedSuggestions": "off",
// "editor.quickSuggestions": {
// "other": "on",
// "comments": "off",
// "strings": "off"
// },
// "editor.acceptSuggestionOnEnter": "off",
// LaTeX Workshop settings
"latex-workshop.intellisense.package.enabled": true,
"latex-workshop.intellisense.unimathsymbols.enabled": true,
"latex-workshop.intellisense.citation.backend": "biblatex",
"latex-workshop.latex.outDir": "build",
"latex-workshop.latex.autoBuild.run": "onFileChange",
"latex-workshop.latex.autoBuild.interval": 3000,
"latex-workshop.synctex.afterBuild.enabled": true,
"latex-workshop.view.autoFocus.enabled": false,
"latex-workshop.view.pdf.reload.transition": "fade",
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.view.pdf.zoom": "auto",
"latex-workshop.latex.tools": [
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-pdflatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + pdflatex + biber"
},
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-xelatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + xelatex + biber"
},
{
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-out2dir=.",
"-lualatex",
"-e",
"$bibtex='biber %O %S';",
"%DOC%"
],
"command": "latexmk",
"name": "latexmk + lualatex + biber"
}
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk + lualatex + biber",
"tools": [
"latexmk + lualatex + biber"
]
},
{
"name": "latexmk + xelatex + biber",
"tools": [
"latexmk + xelatex + biber"
]
},
{
"name": "latexmk + pdflatex + biber",
"tools": [
"latexmk + pdflatex + biber"
]
}
],
"latex-workshop.latex.recipe.default": "lastUsed"
}

165
build/slides.bbl-SAVE-ERROR Normal file
View File

@@ -0,0 +1,165 @@
% $ biblatex auxiliary file $
% $ biblatex bbl format version 3.3 $
% Do not modify the above lines!
%
% This is an auxiliary file used by the 'biblatex' package.
% This file may safely be deleted. It will be recreated by
% biber as required.
%
\begingroup
\makeatletter
\@ifundefined{ver@biblatex.sty}
{\@latex@error
{Missing 'biblatex' package}
{The bibliography requires the 'biblatex' package.}
\aftergroup\endinput}
{}
\endgroup
\refsection{0}
\datalist[entry]{nty/global//global/global/global}
\entry{inderwildiImpactIntelligentCyberphysical2020}{article}{}{}
\name{author}{4}{}{%
{{hash=9f6e3f6f71503f1109985d3b9d96d734}{%
family={Inderwildi},
familyi={I\bibinitperiod},
given={Oliver},
giveni={O\bibinitperiod}}}%
{{hash=9adff71f7560bbcaebadc85c4427b8d1}{%
family={Zhang},
familyi={Z\bibinitperiod},
given={Chuan},
giveni={C\bibinitperiod}}}%
{{hash=b00c866e674d921261f43701cd63984c}{%
family={Wang},
familyi={W\bibinitperiod},
given={Xiaonan},
giveni={X\bibinitperiod}}}%
{{hash=43f96fef254dc677a8064dd582aff746}{%
family={Kraft},
familyi={K\bibinitperiod},
given={Markus},
giveni={M\bibinitperiod}}}%
}
\strng{namehash}{62281ea0b977bc2465b4b7fde5a39f53}
\strng{fullhash}{7d0447c28dd72887688686ab2fe23bfc}
\strng{fullhashraw}{7d0447c28dd72887688686ab2fe23bfc}
\strng{bibnamehash}{62281ea0b977bc2465b4b7fde5a39f53}
\strng{authorbibnamehash}{62281ea0b977bc2465b4b7fde5a39f53}
\strng{authornamehash}{62281ea0b977bc2465b4b7fde5a39f53}
\strng{authorfullhash}{7d0447c28dd72887688686ab2fe23bfc}
\strng{authorfullhashraw}{7d0447c28dd72887688686ab2fe23bfc}
\field{sortinit}{I}
\field{sortinithash}{8d291c51ee89b6cd86bf5379f0b151d8}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{abstract}{Assessing the impact of digital technologies and artificial intelligence, so-called intelligent cyber-physical systems, on emission reduction in the critical sector of energy provision. , The decarbonisation of energy provision is key to managing global greenhouse gas emissions and hence mitigating climate change. Digital technologies such as big data, machine learning, and the Internet of Things are receiving more and more attention as they can aid the decarbonisation process while requiring limited investments. The orchestration of these novel technologies, so-called cyber-physical systems (CPS), provides further, synergetic effects that increase efficiency of energy provision and industrial production, thereby optimising economic feasibility and environmental impact. This comprehensive review article assesses the current as well as the potential impact of digital technologies within CPS on the decarbonisation of energy systems. Ad hoc calculation for selected applications of CPS and its subsystems estimates not only the economic impact but also the emission reduction potential. This assessment clearly shows that digitalisation of energy systems using CPS completely alters the marginal abatement cost curve (MACC) and creates novel pathways for the transition to a low-carbon energy system. Moreover, the assessment concludes that when CPS are combined with artificial intelligence (AI), decarbonisation could potentially progress at an unforeseeable pace while introducing unpredictable and potentially existential risks. Therefore, the impact of intelligent CPS on systemic resilience and energy security is discussed and policy recommendations are deducted. The assessment shows that the potential benefits clearly outweigh the latent risks as long as these are managed by policy makers.}
\field{issn}{1754-5692, 1754-5706}
\field{journaltitle}{Energy \& Environmental Science}
\field{langid}{english}
\field{number}{3}
\field{title}{The Impact of Intelligent Cyber-Physical Systems on the Decarbonization of Energy}
\field{urlday}{19}
\field{urlmonth}{10}
\field{urlyear}{2025}
\field{volume}{13}
\field{year}{2020}
\field{urldateera}{ce}
\field{pages}{744\bibrangedash 771}
\range{pages}{28}
\verb{doi}
\verb 10.1039/C9EE01919G
\endverb
\endentry
\entry{kephartVisionAutonomicComputing2003}{article}{}{}
\name{author}{2}{}{%
{{hash=d604375423e0bb20b33301ed78f4c146}{%
family={Kephart},
familyi={K\bibinitperiod},
given={J.O.},
giveni={J\bibinitperiod}}}%
{{hash=30f63ace2b2fae54c0b9aaed0e027fb2}{%
family={Chess},
familyi={C\bibinitperiod},
given={D.M.},
giveni={D\bibinitperiod}}}%
}
\strng{namehash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{fullhash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{fullhashraw}{28f3790346016b9a23df8d5373dc3fe7}
\strng{bibnamehash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{authorbibnamehash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{authornamehash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{authorfullhash}{28f3790346016b9a23df8d5373dc3fe7}
\strng{authorfullhashraw}{28f3790346016b9a23df8d5373dc3fe7}
\field{sortinit}{K}
\field{sortinithash}{c02bf6bff1c488450c352b40f5d853ab}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{issn}{0018-9162}
\field{journaltitle}{Computer}
\field{langid}{english}
\field{month}{1}
\field{number}{1}
\field{title}{The Vision of Autonomic Computing}
\field{urlday}{5}
\field{urlmonth}{12}
\field{urlyear}{2024}
\field{volume}{36}
\field{year}{2003}
\field{urldateera}{ce}
\field{pages}{41\bibrangedash 50}
\range{pages}{10}
\verb{doi}
\verb 10.1109/MC.2003.1160055
\endverb
\endentry
\entry{leeCyberPhysicalSystems2008}{inproceedings}{}{}
\name{author}{1}{}{%
{{hash=d1baa52f3f6acfd703019b45d0b77985}{%
family={Lee},
familyi={L\bibinitperiod},
given={Edward\bibnamedelima A.},
giveni={E\bibinitperiod\bibinitdelim A\bibinitperiod}}}%
}
\list{location}{1}{%
{Orlando, FL, USA}%
}
\list{publisher}{1}{%
{IEEE}%
}
\strng{namehash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{fullhash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{fullhashraw}{d1baa52f3f6acfd703019b45d0b77985}
\strng{bibnamehash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{authorbibnamehash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{authornamehash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{authorfullhash}{d1baa52f3f6acfd703019b45d0b77985}
\strng{authorfullhashraw}{d1baa52f3f6acfd703019b45d0b77985}
\field{sortinit}{L}
\field{sortinithash}{7c47d417cecb1f4bd38d1825c427a61a}
\field{labelnamesource}{author}
\field{labeltitlesource}{shorttitle}
\field{abstract}{Cyber-Physical Systems (CPS) are integrations of computation and physical processes. Embedded computers and networks monitor and control the physical processes, usually with feedback loops where physical processes affect computations and vice versa. The economic and societal potential of such systems is vastly greater than what has been realized, and major investments are being made worldwide to develop the technology. There are considerable challenges, particularly because the physical components of such systems introduce safety and reliability requirements qualitatively different from those in generalpurpose computing. Moreover, physical components are qualitatively different from object-oriented software components. Standard abstractions based on method calls and threads do not work. This paper examines the challenges in designing such systems, and in particular raises the question of whether today's computing and networking technologies provide an adequate foundation for CPS. It concludes that it will not be sufficient to improve design processes, raise the level of abstraction, or verify (formally or otherwise) designs that are built on today's abstractions. To realize the full potential of CPS, we will have to rebuild computing and networking abstractions. These abstractions will have to embrace physical dynamics and computation in a unified way.}
\field{booktitle}{2008 11th {{IEEE International Symposium}} on {{Object}} and {{Component-Oriented Real-Time Distributed Computing}} ({{ISORC}})}
\field{isbn}{978-0-7695-3132-8}
\field{langid}{english}
\field{month}{5}
\field{shorttitle}{Cyber {{Physical Systems}}}
\field{title}{Cyber {{Physical Systems}}: {{Design Challenges}}}
\field{urlday}{17}
\field{urlmonth}{9}
\field{urlyear}{2025}
\field{year}{2008}
\field{urldateera}{ce}
\field{pages}{363\bibrangedash 369}
\range{pages}{7}
\verb{doi}
\verb 10.1109/ISORC.2008.25
\endverb
\endentry
\enddatalist
\endrefsection
\endinput

BIN
build/slides.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
img/ademe-impacts-2025.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

BIN
img/ademe-impacts.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
img/arduino-uno-shields.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
img/arduino-uno.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

BIN
img/atmega328p.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
img/brain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

BIN
img/cloud-edge.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
img/coffee-maker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

BIN
img/cps.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

BIN
img/dilemma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
img/electric-car.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 853 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
img/exemples/therac-25.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

BIN
img/i2c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
img/logos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
img/mape-k.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 KiB

BIN
img/pid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
img/point.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
img/pwm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
img/regulateur_huygens.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

BIN
img/sensor-error.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
img/shutter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

BIN
img/sojourner-mars.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
img/ts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
img/uart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
img/uss_new_mexico.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

BIN
img/zigbee-chart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

BIN
img/zigbee-table.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

37
pid.drawio Normal file
View File

@@ -0,0 +1,37 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5">
<diagram name="Page-1" id="PUlF1qfTeCaI0LdbeGtw">
<mxGraphModel dx="1106" dy="961" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="QoWLWNagPP3RDszhtmNL-1" value="&lt;font face=&quot;Lucida Console&quot;&gt;Mesure&lt;/font&gt;&lt;div&gt;&lt;font face=&quot;Lucida Console&quot;&gt;(Capteur de distance)&lt;/font&gt;&lt;/div&gt;" style="shape=card;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="200" y="330" width="80" height="100" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-2" value="Erreur&lt;div&gt;(Calcul)&lt;/div&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontFamily=Lucida Console;" vertex="1" parent="1">
<mxGeometry x="430" y="340" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-3" value="PID&lt;div&gt;(Contrôle)&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="430" y="555" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-4" value="Action : moteurs&lt;div&gt;(Commande)&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
<mxGeometry x="170" y="555" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-5" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="70" y="430" width="100" height="100" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-6" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;flipH=1;flipV=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="550" y="430" width="100" height="100" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-7" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0.6;dx=40;notch=0;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="310" y="350" width="100" height="60" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-8" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.arrow;dy=0.6;dx=40;notch=0;flipV=0;flipH=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="310" y="555" width="100" height="60" as="geometry" />
</mxCell>
<mxCell id="QoWLWNagPP3RDszhtmNL-9" value="Boucle d&#39;asservissement" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="265" y="450" width="190" height="60" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

56
slides.bib Normal file
View File

@@ -0,0 +1,56 @@
@inproceedings{leeCyberPhysicalSystems2008,
title = {Cyber {{Physical Systems}}: {{Design Challenges}}},
shorttitle = {Cyber {{Physical Systems}}},
booktitle = {2008 11th {{IEEE International Symposium}} on {{Object}} and {{Component-Oriented Real-Time Distributed Computing}} ({{ISORC}})},
author = {Lee, Edward A.},
year = {2008},
month = may,
pages = {363--369},
publisher = {IEEE},
address = {Orlando, FL, USA},
doi = {10.1109/ISORC.2008.25},
urldate = {2025-09-17},
abstract = {Cyber-Physical Systems (CPS) are integrations of computation and physical processes. Embedded computers and networks monitor and control the physical processes, usually with feedback loops where physical processes affect computations and vice versa. The economic and societal potential of such systems is vastly greater than what has been realized, and major investments are being made worldwide to develop the technology. There are considerable challenges, particularly because the physical components of such systems introduce safety and reliability requirements qualitatively different from those in generalpurpose computing. Moreover, physical components are qualitatively different from object-oriented software components. Standard abstractions based on method calls and threads do not work. This paper examines the challenges in designing such systems, and in particular raises the question of whether today's computing and networking technologies provide an adequate foundation for CPS. It concludes that it will not be sufficient to improve design processes, raise the level of abstraction, or verify (formally or otherwise) designs that are built on today's abstractions. To realize the full potential of CPS, we will have to rebuild computing and networking abstractions. These abstractions will have to embrace physical dynamics and computation in a unified way.},
isbn = {978-0-7695-3132-8},
langid = {english},
}
@article{inderwildiImpactIntelligentCyberphysical2020,
title = {The Impact of Intelligent Cyber-Physical Systems on the Decarbonization of Energy},
author = {Inderwildi, Oliver and Zhang, Chuan and Wang, Xiaonan and Kraft, Markus},
year = 2020,
journal = {Energy \& Environmental Science},
volume = {13},
number = {3},
pages = {744--771},
issn = {1754-5692, 1754-5706},
doi = {10.1039/C9EE01919G},
urldate = {2025-10-19},
abstract = {Assessing the impact of digital technologies and artificial intelligence, so-called intelligent cyber-physical systems, on emission reduction in the critical sector of energy provision. , The decarbonisation of energy provision is key to managing global greenhouse gas emissions and hence mitigating climate change. Digital technologies such as big data, machine learning, and the Internet of Things are receiving more and more attention as they can aid the decarbonisation process while requiring limited investments. The orchestration of these novel technologies, so-called cyber-physical systems (CPS), provides further, synergetic effects that increase efficiency of energy provision and industrial production, thereby optimising economic feasibility and environmental impact. This comprehensive review article assesses the current as well as the potential impact of digital technologies within CPS on the decarbonisation of energy systems. Ad hoc calculation for selected applications of CPS and its subsystems estimates not only the economic impact but also the emission reduction potential. This assessment clearly shows that digitalisation of energy systems using CPS completely alters the marginal abatement cost curve (MACC) and creates novel pathways for the transition to a low-carbon energy system. Moreover, the assessment concludes that when CPS are combined with artificial intelligence (AI), decarbonisation could potentially progress at an unforeseeable pace while introducing unpredictable and potentially existential risks. Therefore, the impact of intelligent CPS on systemic resilience and energy security is discussed and policy recommendations are deducted. The assessment shows that the potential benefits clearly outweigh the latent risks as long as these are managed by policy makers.},
langid = {english},
}
@techreport{ibmArchitecturalBlueprintAutonomic2006,
title = {{An Architectural Blueprint for Autonomic Computing}},
author = {{IBM}},
year = {2006},
month = jun,
urldate = {2025-01-21},
langid = {english},
}
@article{kephartVisionAutonomicComputing2003,
title = {The Vision of Autonomic Computing},
author = {Kephart, J.O. and Chess, D.M.},
year = 2003,
month = jan,
journal = {Computer},
volume = {36},
number = {1},
pages = {41--50},
issn = {0018-9162},
doi = {10.1109/MC.2003.1160055},
urldate = {2024-12-05},
copyright = {https://ieeexplore.ieee.org/Xplorehelp/downloads/license-information/IEEE.html},
langid = {english},
}

200
slides.cls Normal file
View File

@@ -0,0 +1,200 @@
\ProvidesClass{slides}[27/01/2025 v1]
\PassOptionsToPackage{dvipsnames}{xcolor}
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{naturalnames}{hyperref}
\LoadClass[aspectratio=169,10pt]{beamer}
% speaker notes
% open pdf in dual screen using pympress (https://github.com/Cimbali/pympress)
% \setbeameroption{show notes on second screen=right}
% listings (should be loaded before csquotes)
\RequirePackage{minted}
% language and encoding
\RequirePackage[french]{babel}
\RequirePackage[T1]{fontenc}
\RequirePackage{csquotes}
% biblatex for references on slides
\RequirePackage[backend=biber]{biblatex}
% clean, short citations in footnotes (cf. https://tex.stackexchange.com/a/587604)
\renewbibmacro{in:}{}
% \AtEveryCitekey{\clearfield{journaltitle}}
\AtEveryCitekey{\clearfield{volume}}
\AtEveryCitekey{\clearfield{number}}
% \AtEveryCitekey{\clearfield{booktitle}}
% \AtEveryCitekey{\clearfield{series}}
\AtEveryCitekey{\clearfield{pages}}
\AtEveryCitekey{\clearfield{month}}
\AtEveryCitekey{\clearlist{publisher}}
\AtEveryCitekey{\clearname{editor}}
\AtEveryCitekey{\clearlist{location}}
\AtEveryCitekey{\clearfield{doi}}
\AtEveryCitekey{\clearfield{isbn}}
\AtEveryCitekey{\clearfield{issn}}
\AtEveryCitekey{\clearfield{eprint}}
\AtEveryCitekey{\clearfield{url}}
\AtEveryCitekey{\clearfield{urlyear}}
\AtEveryCitekey{\clearfield{urlmonth}}
\AtEveryCitekey{\clearfield{urlday}}
% include reference number in citations (cf. https://tex.stackexchange.com/a/176295)
\DeclareCiteCommand{\fullcite}
{\usebibmacro{prenote}}
{{\printtext[labelnumberwidth]{%
\printfield{prefixnumber}%
\printfield{labelnumber}}} %
\usedriver
{\DeclareNameAlias{sortname}{default}}
{\thefield{entrytype}}}
{\multicitedelim}
{\usebibmacro{postnote}}
% captions
\RequirePackage{caption}
\captionsetup{font=scriptsize,labelfont=scriptsize}
% beamer theme
\usetheme{moloch}
\RequirePackage{appendixnumberbeamer}
\RequirePackage{fontspec}
\setsansfont[
ItalicFont={Fira Sans Light Italic},
BoldFont={Fira Sans},
BoldItalicFont={Fira Sans Italic}
]{Fira Sans Light}
\setmonofont[BoldFont={Fira Mono Medium}]{Fira Mono}
% \setmonofont{Fantasque Sans Mono}
\AtBeginEnvironment{tabular}{%
\addfontfeature{Numbers={Monospaced}}
}
% https://steeven9.github.io/USI-LaTeX/html/packages_hyperref_babel_xcolor3.html
% Section 3.2 of:
% https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
\definecolor{ubo}{HTML}{8c3759}
\setbeamercolor{progress bar}{fg=ubo}
\setbeamercolor{title separator}{fg=ubo}
\setbeamercolor{frametitle}{bg=ubo}
% \setbeamercolor{progress bar}{fg=BrickRed}
% \setbeamercolor{title separator}{fg=BrickRed}
% footnote font size
\setbeamerfont{footnote}{size=\tiny}
% frame numbering font size
\setbeamerfont{footline}{size=\footnotesize}
% solid background for blocks
\molochset{block=fill}
% remove section frames
% \molochset{sectionpage=none}
% enable subsection frames
\molochset{subsectionpage=progressbar}
% table of contents
\setbeamertemplate{section in toc}[sections numbered]
% smaller first-level bullet points
\setbeamertemplate{itemize item}{\textbullet}
% smaller bibliography entries
\renewcommand*{\bibfont}{\scriptsize}
% figures uncover animation (cf. https://tex.stackexchange.com/a/354033/95423)
\setbeamercovered{transparent}
\newcommand<>{\uncovergraphics}[2][{}]{
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (B) at (4,0)
{\includegraphics[#1]{#2}};
\alt#3{}{%
\fill [draw=none, fill=palette primary.fg, fill opacity=0.9] (B.north west) -- (B.north east) -- (B.south east) -- (B.south west) -- (B.north west) -- cycle;
}
\end{tikzpicture}
}
% fonts and symbols
\RequirePackage{pifont}
\newcommand{\cmark}{\color{YellowGreen}\ding{51}}
\newcommand{\xmark}{\color{BrickRed}\ding{55}}
\RequirePackage{textcomp}
\RequirePackage{emoji}
% markers
\RequirePackage{circledsteps}
\pgfkeys{/csteps/inner color=white}
\pgfkeys{/csteps/fill color=black}
\newcommand{\DONE}{%
\CircledParamOpts{inner color=black, outer color=LimeGreen, fill color=LimeGreen}{1}{\textbf{DONE}} %
}
\newcommand{\TODO}{%
\CircledParamOpts{inner color=black, outer color=Goldenrod, fill color=Goldenrod}{1}{\textbf{TODO}} %
}
\newcommand{\FIXME}{%
\CircledParamOpts{inner color=white, outer color=Red, fill color=Red}{1}{\textbf{FIXME}} %
}
% custom font size for a slide (cf. https://tex.stackexchange.com/a/401409)
\RequirePackage{environ}
\newcommand{\customframefont}[1]{
\setbeamertemplate{itemize/enumerate body begin}{#1}
\setbeamertemplate{itemize/enumerate subbody begin}{#1}
}
\NewEnviron{framefont}[1]{
\customframefont{#1} % for itemize/enumerate
{#1 % For the text outside itemize/enumerate
\BODY
}
\customframefont{\normalsize}
}
% math
\RequirePackage{amsmath,amssymb,amsfonts}
% resizebox
\RequirePackage{graphicx}
\RequirePackage{subcaption}
% tables
\RequirePackage{tabularx}
\RequirePackage{booktabs}
% various tabular columns with text wrapping
\newcolumntype{L}{>{\arraybackslash}m{\linewidth}}
\newcolumntype{M}{>{\centering\arraybackslash}m{0.33\linewidth}}
\newcolumntype{Y}{>{\centering\arraybackslash}m{0.15\linewidth}}
\newcolumntype{y}{>{\arraybackslash}m{0.15\linewidth}}
% generic horizontally centered column with line breaks
\newcolumntype{Z}{>{\centering\arraybackslash}X}
% vertical centering of text in all tabularx columns
\renewcommand\tabularxcolumn[1]{m{#1}}
% links
\RequirePackage{hyperref}
% redefine title page
% https://tex.stackexchange.com/a/396409
% Section 6.2.3 of:
% https://ctan.math.illinois.edu/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
\makeatletter
\setbeamertemplate{title page}{
\begin{minipage}[b][\paperheight]{\textwidth}
% \vfill%
\ifx\inserttitle\@empty\else\usebeamertemplate*{title}\fi
\ifx\insertsubtitle\@empty\else\usebeamertemplate*{subtitle}\fi
\vspace{.2cm}
\ifx\insertdate\@empty\else\usebeamertemplate*{date}\fi
\usebeamertemplate*{title separator}
\vspace{-.2cm}
\begin{columns}[]
\column{0.4\linewidth}
\ifx\beamer@shortauthor\@empty\else\usebeamertemplate*{author}\fi
\column{0.4\linewidth}
% \begin{table}[]
% \begin{flushleft}
% \small
% \begin{tabular}{ll}
% Rapporteur & Blabla \\
% Rapporteur & Blabla
% \end{tabular}
% \end{flushleft}
% \end{table}
\end{columns}
\begin{columns}[b]
\column{0.4\linewidth}
\ifx\insertinstitute\@empty\else\usebeamertemplate*{institute}\fi
\column{0.5\linewidth}
\vspace{-2cm}
\ifx\inserttitlegraphic\@empty\else\inserttitlegraphic\fi
\end{columns}
\vspace*{.2cm}
\end{minipage}
}
\makeatother

BIN
slides.pdf Normal file

Binary file not shown.

888
slides.tex Normal file
View File

@@ -0,0 +1,888 @@
\documentclass{slides}
\addbibresource{slides.bib}
\title{Objets connectés et robotique}
\subtitle{L3 IFA, S5}
\date{Novembre 2025}
\titlegraphic{\flushright\includegraphics[height=1.3cm]{img/logos.png}\vspace{.5cm}}
\author{
\texorpdfstring{
\begin{table}[]
\begin{flushleft}
\begin{tabular}{ll}
& Vincent Lannurien~\inst{1} \\
& \url{vincent.lannurien@univ-brest.fr} \\ \\
& Inspiré du cours de Yvon Autret et Jean Vareille
\end{tabular}
\end{flushleft}
\end{table}
}
{
Vincent Lannurien
}
}
\institute{
\texorpdfstring{
\begin{table}[]
\centering
\begin{flushleft}
\begin{tabular}{L}
\inst{1}~Lab-STICC, CNRS UMR 6285, Université de Bretagne Occidentale, Brest
\end{tabular}
\end{flushleft}
\end{table}
}
{
Lab-STICC, CNRS UMR 6285, Université de Bretagne Occidentale, Brest
}
}
\begin{document}
\maketitle
\begin{frame}{Introduction}
\begin{figure}
\begin{subfigure}{.3\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/Mars_Climate_Orbiter_2.jpg}
\end{subfigure}
\begin{subfigure}{.2\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/Ariane_5_V88_pillars.jpg}
\end{subfigure}
\begin{subfigure}{.35\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/Patriot20missile202520Aug202016.jpg}
\end{subfigure}
\end{figure}
\begin{figure}
\begin{subfigure}{.18\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/therac-25.jpg}
\end{subfigure}
\begin{subfigure}{.3\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/uber-arizona.jpg}
\end{subfigure}
\begin{subfigure}{.36\textwidth}
\centering
\includegraphics[width=\linewidth]{img/exemples/titan-submersible.jpg}
\end{subfigure}
\end{figure}
\end{frame}
\begin{frame}
\begin{itemize}
\item \url{https://en.wikipedia.org/wiki/Mars_Climate_Orbiter}
\begin{itemize}
\item problème d'unités (système métrique vs système impérial)
\end{itemize}
\item \url{https://en.wikipedia.org/wiki/Ariane_flight_V88}
\begin{itemize}
\item erreur de conversion (\textit{overflow})
\end{itemize}
\item \url{https://en.wikipedia.org/wiki/14th_Quartermaster_Detachment}
\begin{itemize}
\item bug d'arrondi (\textit{overflow})
\end{itemize}
\item \url{https://en.wikipedia.org/wiki/Therac-25}
\begin{itemize}
\item erreur de programmation concurrente (\textit{race condition})
\end{itemize}
\item \url{https://en.wikipedia.org/wiki/Death_of_Elaine_Herzberg}
\begin{itemize}
\item détection d'obstacle inopérante
\end{itemize}
\item \url{https://en.wikipedia.org/wiki/Titan_submersible_implosion}
\begin{itemize}
\item certifications de sécurité insuffisantes
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Commençons par un test...}
\begin{itemize}
\item \textit{Trolley problem} (\url{https://en.wikipedia.org/wiki/Trolley_problem}) : le dilemme du tramway
\end{itemize}
\begin{center}
\includegraphics[width=0.5\linewidth]{img/dilemma.png}
\end{center}
\begin{alertblock}{\centering \emoji{thinking}}
\begin{center}
Que feriez-vous ?
$\rightarrow$ \url{https://www.moralmachine.net/hl/fr}
\end{center}
\end{alertblock}
\end{frame}
\begin{framefont}{\small}
\begin{frame}[t]{Plan de la présentation}
\begin{columns}
\column{0.5\textwidth}
\tableofcontents%[hideallsubsections]
\column{0.5\textwidth}
\begin{center}
\includegraphics[width=0.9\columnwidth]{img/logos.png}
\end{center}
\end{columns}
\end{frame}
\end{framefont}
\section{Organisation de l'UE}
\begin{frame}{Organisation de l'UE -- Contenu}
\begin{itemize}
\item Objectifs :
\begin{itemize}
\item Savoir concevoir des systèmes cyberphysiques simples, autonomes
\item Comprendre les compromis entre performance (latence, débit) et consommation (énergie, mémoire)
\end{itemize}
\item Méthode :
\begin{itemize}
\item Le plus de \textbf{manipulations} possible !
\item Dimension \textbf{matérielle} (un peu d'électronique, un peu de mécanique)
\item Dimension \textbf{logicielle} (de l'informatique !)
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Organisation de l'UE -- Logistique}
\begin{itemize}
\item Volume horaire :
\begin{itemize}
\item CM : 8h
\item TP : 14h
\end{itemize}
\item Travail en groupes :
\begin{itemize}
\item Binômes dans les groupes de TP
\item Deux binômes par robot
\end{itemize}
\item Examen :
\begin{itemize}
\item Démo lors des TP
\item Rendu de projet
\end{itemize}
\item Intervenants :
\begin{itemize}
\item Vincent Lannurien -- \url{vincent.lannurien@univ-brest.fr}
\item Alan Le Boudec -- \url{alan.leboudec@univ-brest.fr}
\end{itemize}
\end{itemize}
\end{frame}
\section{Projet à réaliser}
\begin{frame}{Portée du projet}
\textbf{Objectifs :}
\begin{itemize}
\item Prise en main de l'environnement de développement
\item Implantation d'algorithmes simples sur le robot
\item Calcul déporté
\end{itemize}
\vspace{24px}
\pause
Tout ce que l'on ne va pas faire :
\begin{itemize}
\item Électronique : montages complexes, conception de carte...
\item Traitement du signal : radio, interférences...
\item Sécurité : authentification, détection d'intrusion...
\end{itemize}
\end{frame}
\begin{frame}{Étapes du projet}
\begin{itemize}
\item Commande : Fonctionnement de base d'un robot
\begin{itemize}
\item Envoi de messages : avancer, reculer, tourner, etc.
\item Communications : filaire (série), sans-fil (radio)
\item Interface web de commande : Node.js, JavaScript
\end{itemize}
\item Environnement : capteurs et actionneurs
\begin{itemize}
\item Utilisation d'un capteur de distance
\item Fonctionnement des moteurs
\end{itemize}
\item Contrôle : Programmation de missions simples
\begin{itemize}
\item Comportement autonome :
\begin{itemize}
\item Avancer jusqu'à trouver un obstacle
\item Avancer jusqu'à trouver une ouverture
\item Faire un quart de tour
\item Contourner un objet
\end{itemize}
\end{itemize}
\item En option :
\begin{itemize}
\item Plus de capteurs
\item Plus de cartes
\end{itemize}
\end{itemize}
\end{frame}
\section{Contexte}
\begin{frame}{Définitions -- Systèmes cyberphysiques}
\begin{definition}
\textit{Cyber-Physical Systems (CPS) are integrations of computation with physical processes.}~\footfullcite{leeCyberPhysicalSystems2008}
\end{definition}
\begin{itemize}
\item Énergie : \textit{smart grids}
\item Transport : systèmes ferroviaires, aviation civile, automobile autonome...
\item Santé : dispositifs médicaux "connectés"
\item Industrie : usines automatisées, robots industriels
\item Ville "intelligente"
\end{itemize}
\end{frame}
\begin{frame}{Définitions -- Systèmes cyberphysiques}
\begin{definition}
\textit{Cyber-Physical Systems (CPS) are integrations of computation with physical processes.}~\footfullcite{leeCyberPhysicalSystems2008}
\end{definition}
\begin{center}
\includegraphics[width=0.6\linewidth]{img/cps.png}
\end{center}
\addtocounter{footnote}{1}
\footnotetext{\fullcite{inderwildiImpactIntelligentCyberphysical2020}}
\end{frame}
\begin{frame}{Définitions -- Systèmes autonomes}
\begin{columns}
\column{0.5\linewidth}
\begin{itemize}
\item Robotique, systèmes autonomes~\footnote[frame]{\fullcite{kephartVisionAutonomicComputing2003}} :
\begin{itemize}
\item \textbf{Capteurs} : produisent une vue de l'environnement du système
\item \textbf{Actionneurs} : commandent le système selon son état et sa consigne
\end{itemize}
\item Objets connectés, \textit{Internet of Things} (\textit{IoT}) : contrôle, commande à distance
\end{itemize}
\column{0.5\linewidth}
\includegraphics[width=\columnwidth]{img/mape-k.png}
\end{columns}
\end{frame}
\begin{frame}{Quelques tendances [\href{https://digital-strategy.ec.europa.eu/fr/policies/next-generation-internet-things}{réf.}]}
\begin{itemize}
\item 41 milliards d'appareils \textit{IoT} déployés en 2025
\item Intelligence artificielle de plus en plus déployée en périphérie de réseau (Apple Intelligence, Google AI Edge)
\item Défis : interopérabilité, durabilité
\end{itemize}
\begin{center}
\includegraphics[width=0.5\linewidth]{img/cloud-edge.png}
\end{center}
\end{frame}
\begin{frame}{Numérique -- Quels impacts ? (2022) [\href{https://infos.ademe.fr/magazine-avril-2022/faits-et-chiffres/numerique-quel-impact-environnemental/}{réf.}]}
\begin{columns}
\column{0.5\linewidth}
Pour chaque Français, le numérique représente :
\begin{itemize}
\item \textbf{Consommation électrique} : 10\%
\item \textbf{Empreinte carbone} : 2.5\%
\item \textbf{Déchets} : 299 kg/habitant/an
\item \textbf{Fabrication} : 78\% de l'impact
\item \textbf{Utilisation} : 21\% de l'impact
\end{itemize}
\column{0.5\linewidth}
\includegraphics[width=\columnwidth]{img/ademe-impacts.jpg}
\end{columns}
\end{frame}
\begin{frame}{Numérique -- Quels impacts ? (2025) [\href{https://infos.ademe.fr/magazine-janvier-2025/numerique-quel-impact-environnemental-en-2022/}{réf.}]}
\begin{columns}
\column{0.7\linewidth}
\begin{center}
\includegraphics[width=0.4\columnwidth]{img/ademe-impacts-2025.png}
\includegraphics[width=0.4\columnwidth]{img/ademe-impacts-2025-3.png}
\end{center}
\begin{itemize}
\item Hausse de l'impact des \textbf{centres de données} : 46\% de l'empreinte carbone du numérique
\end{itemize}
\column{0.3\linewidth}
\includegraphics[width=\columnwidth]{img/ademe-impacts-2025-2.png}
\end{columns}
\end{frame}
\section{Informatique embarquée}
\subsection{Microcontrôleurs}
\begin{frame}{Microcontrôleurs : Utilisations et limites}
\begin{columns}
\column{0.7\linewidth}
\begin{center}
\includegraphics[width=0.145\columnwidth]{img/coffee-maker.png}
\includegraphics[width=0.22\columnwidth]{img/shutter.png}
\includegraphics[width=0.21\columnwidth]{img/electric-car.png}
\end{center}
\begin{itemize}
\item \textbf{Circuit intégré} : calcul (processeur), mémoire (mémoire vive et non-volatile), interfaces d'Entrées/Sorties
\item \textbf{Non-programmable} : son comportement est gravé dans le silicone
\item \textbf{Utilisation} : partout où un processeur généraliste n'est pas nécessaire
\begin{itemize}
\item + : Plus simple à comprendre, à vérifier
\item + : Consommation d'énergie minimale
\item - : Peu flexible
\end{itemize}
\item \textbf{Coût} : en 2018, en moyenne, \$0.03 pour un µc 8-bit, \$1 pour un µc 32-bit $\rightarrow$ ratio $\frac{1}{100}$ par rapport à un PC grand public
\end{itemize}
\column{0.3\linewidth}
\includegraphics[width=\columnwidth]{img/brain.png}
\end{columns}
\end{frame}
\subsection{Arduino}
\begin{frame}{Arduino Uno : caractéristiques (ATmega328P)}
\begin{columns}
\column{0.65\linewidth}
$\rightarrow$ Plateforme de \textbf{prototypage}
$\rightarrow$ Permet de reprogrammer le système
\begin{itemize}
\item Alimentation : 7 à 12V ou via port USB (40 mA min.)
\item Horloge : 16 MHz
\item Mémoire SRAM : 2 kB
\item Mémoire EEPROM : 1 kB
\item Mémoire flash : 32 kB
\item Broches d'E/S : D0 à D13 (40 mA par broche)
\item Entrées analogiques : A0 à A5
\item Bus série, I2C et SPI
\item Gestion des interruptions
\item Dimensions : 74 x 53 x 15 mm
\end{itemize}
\column{0.35\linewidth}
\includegraphics[width=\columnwidth]{img/arduino-uno.jpg}
\includegraphics[width=\columnwidth]{img/atmega328p.jpg}
\end{columns}
\end{frame}
\begin{frame}{Arduino Uno : détails [\href{https://learn.sparkfun.com/tutorials/what-is-an-arduino\#whats-on-the-board}{réf.}]}
\begin{columns}
\column{0.5\linewidth}
\includegraphics[width=\columnwidth]{img/arduino_uno_breakout.png}
\column{0.5\linewidth}
\begin{enumerate}
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\item ...
\end{enumerate}
\end{columns}
\end{frame}
\begin{frame}{Arduino Uno : détails [\href{https://learn.sparkfun.com/tutorials/what-is-an-arduino\#whats-on-the-board}{réf.}]}
\begin{columns}
\column{0.5\linewidth}
\includegraphics[width=\columnwidth]{img/arduino_uno_breakout.png}
\column{0.5\linewidth}
\begin{enumerate}
\item Connecteur USB
\item Connecteur \textit{barrel jack}
\item Pins \textbf{GND} (masse) : référentiel 0V
\item Pin \textbf{5V}
\item Pin \textbf{3.5V}
\item Pins \textbf{analogiques} (Entrées) -- A0 à A5
\item Pins \textbf{numériques} (E/S) -- 0 à 13
\item Pins \textbf{numériques} (PWM) -- 3, 5, 6, 9, 10, 11
\item Pin \textbf{AREF} : référentiel plafond en tension
\item Bouton \textit{reset}
\item Témoin d'alimentation
\item Témoins \textbf{Tx / Rx}
\item Circuit intégré \textbf{ATmega328P}
\item Régulateur de tension (sécurité)
\end{enumerate}
\end{columns}
\end{frame}
\begin{frame}{Arduino Uno : \textit{shields}}
\begin{center}
\includegraphics[width=0.7\linewidth]{img/arduino-uno-shields.jpg}
\url{https://www.shieldlist.org/}
\end{center}
\end{frame}
\subsection{Programmation}
\begin{frame}[fragile]{Programmation Arduino -- Pas de système d'exploitation !}
\begin{minted}{c}
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
\end{minted}
\end{frame}
\begin{frame}{Programmation Arduino -- Lectures, écritures}
\begin{columns}
\column{0.5\linewidth}
\begin{itemize}
\item \textbf{GPIO} : \textit{General-Purpose Input Output}
\item Lecture analogique : tension sur un \textit{pin}
\begin{itemize}
\item Conversion analogique vers numérique (\textit{ADC})
\item $[0.0, 5.0[V \rightarrow int [0, 1024[$
\item Précision : 10 bits, résolution : 4.9 mV/valeur
\end{itemize}
\item Lecture/Écriture numérique : états binaires
\begin{itemize}
\item $0$ (\texttt{LOW}, 0V)
\item $1$ (\texttt{HIGH}, 3.3V ou 5V)
\end{itemize}
\item Écriture analogique ?
\begin{itemize}
\item Le microcontrôleur ne peut pas générer une tension arbitraire...
\end{itemize}
\end{itemize}
\column{0.5\linewidth}
\begin{center}
\includegraphics[width=0.8\columnwidth]{img/pwm.png}
\end{center}
\begin{itemize}
\item Décrire un phénomène continu par des modulations
\item Technique : \textit{PWM}
\end{itemize}
\end{columns}
\end{frame}
\begin{frame}{Programmation Arduino -- Exercice}
\begin{exampleblock}{Un premier programme Arduino}
On utilise le simulateur :
\begin{itemize}
\item \href{https://wokwi.com/projects/new/arduino-uno}{https://wokwi.com/projects/new/arduino-uno}
\end{itemize}
\end{exampleblock}
\begin{enumerate}
\item \TODO Écriture numérique : allumer puis éteindre une LED sur le pin 5 ;
\item \TODO Écriture analogique : faire varier l'intensité de la LED pour produire un effet de fondu, en boucle.
\end{enumerate}
\end{frame}
\subsection{Entrées/Sorties}
\begin{frame}{Communications série : UART [\href{http://bts2m.free.fr/TP_Arduino/01_UART.html}{réf.}]}
\begin{itemize}
\item \textbf{UART} : \textit{Universal Asynchronous Receiver Transmitter}
\item Convertit des données \textit{parallèles} (un octet en mémoire) en données \textit{série} (des bits sur un fil)
\item Liaison avec 3 fils : \textbf{Tx} (\textit{transmit} de l'émetteur), \textbf{Rx} (\textit{receive} du récepteur), \textbf{GND} (masse)
\item \textit{Full duplex} : émission et réception simultanées ; point à point : 2 éléments
\item Vitesse : en général 9600 bauds (bits/seconde), au maximum 115200 bauds (environ 14 kB/seconde...)
\item "Masqué" derrière le port USB de l'Arduino !
\end{itemize}
\begin{center}
\includegraphics[width=0.6\linewidth]{img/uart.png}
\end{center}
\end{frame}
\begin{frame}{Communications série : I2C [\href{https://passionelectronique.fr/liaisons-series-uart-i2c-spi/}{réf.}]}
\begin{itemize}
\item \textbf{I2C} : \textit{Inter-Integrated Circuit}
\item Topologie "maître-esclave", adresses uniques, bits de lecture/écriture
\item Liaison avec trois fils : \textbf{SDA} (signal de données), \textbf{SCL} (signal d'horloge), \textbf{GND} (masse)
\item \textit{Semi duplex} : communications bidirectionnelles, mais pas simultanées ; multi-points
\item Vitesse : en général 100 kbps (10x plus rapide que l'UART), au maximum 3.4 Mbps (environ 425 kB/seconde)
\end{itemize}
\begin{center}
\includegraphics[width=0.6\linewidth]{img/i2c.jpg}
\end{center}
\end{frame}
\begin{frame}{Communications sans-fil : Zigbee}
\begin{itemize}
\item \textbf{Zigbee} : protocole / norme ouverte IEEE 802.15.4
\item Topologie en maillage (\textit{mesh})
\item Communications sans-fil courte distance (10 mètres @ 1 mW)
\item Bande de fréquences non réservée : pas de licence
\item Vitesse : 2.5 à 30 kB/seconde ; très faible consommation d'énergie
\end{itemize}
\begin{center}
\includegraphics[width=0.6\linewidth]{img/zigbee-chart.png}
\end{center}
\end{frame}
\begin{frame}
\begin{center}
\includegraphics[width=0.9\linewidth]{img/zigbee-table.png}
\end{center}
\end{frame}
\section{Robotique}
\subsection{Généralités}
\begin{frame}{Qu'est-ce qu'un robot ?}
\begin{center}
\includegraphics[width=0.5\linewidth]{img/sojourner-mars.jpg}
\footnotesize \textit{Sojourner} sur la surface de Mars, décembre 1997 [\href{https://science.nasa.gov/photojournal/sojourner-rover-near-the-dice/}{réf.}]
\end{center}
\end{frame}
\begin{frame}{Qu'est-ce qu'un robot ?}
\textbf{Robot = système de systèmes}
\begin{itemize}
\item \textbf{Mobilité} : énergie, déplacement (propulsion), orientation (direction)
\item \textbf{Charge utile} : capteurs, informations, matériels, etc.
\item \textbf{Intelligence} : contrôle, commande, communication, décision
\end{itemize}
\end{frame}
% \begin{frame}{Capteurs -- Classes}
% \begin{itemize}
% \item Proprioceptifs :
% \begin{itemize}
% \item Attitude, position, vitesse, etc.
% \item Donnent des informations sur l'état de l'élément piloté
% \end{itemize}
% \item Extéroceptifs
% \begin{itemize}
% \item Localisation, obstacles, etc.
% \item Donnent des informations sur l'environnement de l'élément piloté
% \end{itemize}
% \item Actifs
% \begin{itemize}
% \item Sonar, radar, LiDAR, etc.
% \end{itemize}
% \item Passifs
% \begin{itemize}
% \item Contacts, acoustique, gyroscope, etc.
% \end{itemize}
% \end{itemize}
% \end{frame}
\begin{frame}{Intelligence -- Capteurs [\href{https://spe-lavoisier.fr/1SI/Cours/Chapitre4.php}{réf.}]}
\begin{columns}
\column{0.5\linewidth}
Caractéristiques d'un capteur :
\begin{itemize}
\item Temps de réponse
\item Fréquence d'échantillonnage
\item Précision, finesse, résolution, stabilité
\item Coût
\item Taux d'erreur (dispersion, aberrations, etc.)
\item Robustesse (environnement)
\item Charge de calcul induite
\item Poids, consommation d'énergie, dimensions, etc.
\end{itemize}
\column{0.5\linewidth}
\includegraphics[width=\columnwidth]{img/sensor-error.png}
\end{columns}
\end{frame}
\begin{frame}{Intelligence -- Contrôle, commandes, asservissement}
\begin{itemize}
\item Éléments contrôlés en boucle fermée : \textbf{asservissements}
\item Système automatique qui ajuste son comportement en fonction de \textbf{consignes} et de \textbf{mesures}
\item Exemple :
\begin{exampleblock}{\emoji{repeat} Boucle d'asservissement}
\begin{enumerate}
\item \emoji{dart} \textbf{Consigne} : objectif à atteindre (ex : avancer à 10 cm du mur)
\item \emoji{bar-chart} \textbf{Mesure} : capteur qui lit la position (GPS), la distance réelle (LiDAR), etc.
\item \emoji{cross-mark} \textbf{Erreur} : différence entre consigne et mesure
\item \emoji{brain} \textbf{Contrôleur} : calcule la \textbf{commande} à partir de l'erreur
\item \emoji{robot} \textbf{Commande} : signal envoyé au système (ex : augmenter la vitesse des moteurs)
\end{enumerate}
\end{exampleblock}
\end{itemize}
\end{frame}
\subsection{Commande à distance}
\begin{frame}{Commande -- Un langage pour se parler}
\begin{itemize}
\item Architecture :
\begin{itemize}
\item PC : Envoi de commandes filaire $\rightarrow$ USB $\rightarrow$ Robot Arduino
\item PC : Envoi de commandes sans fil $\rightarrow$ XBee $\rightarrow$ Robot Arduino
\end{itemize}
\item Peu importe le type de liaison, le même programme s'exécute sur l'Arduino
\item $\rightarrow$ Il faut programmer l'Arduino pour \textbf{recevoir}, \textbf{décoder} et \textbf{exécuter} des lignes de commande.
\end{itemize}
\end{frame}
\begin{frame}{Commande -- Capteurs et actionneurs}
\begin{alertblock}{Sur nos robots...}
\begin{itemize}
\item De quels capteurs disposons-nous ?
\item De quels actionneurs disposons-nous ?
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Commande -- Un langage pour se parler}
\begin{alertblock}{Communications}
\begin{itemize}
\item Objectifs : avancer, reculer, tourner...
\item Quels éléments va-t-on commander ?
\item Sur la base de quelles informations ?
\item $\rightarrow$ De quelles \textbf{commandes} avons-nous besoin ?
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Commande -- Un langage pour se parler -- Syntaxe}
\begin{itemize}
\item Une ligne de commande peut contenir :
\begin{itemize}
\item Une commande élémentaire : \texttt{[cmd]}
\item Une séquence de commandes élémentaires : \texttt{[[cmd\_1][cmd\_2]]}
\end{itemize}
\item Une commande peut prendre un paramètre : \texttt{[cmd param]}
\begin{itemize}
\item Séparation par un espace
\end{itemize}
\end{itemize}
\begin{exampleblock}{Exemple de ligne de commande}
\texttt{[[mda 255][mga 255]]}
\end{exampleblock}
\end{frame}
\subsection{Interface utilisateur}
\begin{frame}[fragile]{Programmation Node.js}
\begin{itemize}
\item Langage : \textbf{JavaScript}
\item Programmation \textbf{asynchrone}, ou \textbf{événementielle}
\end{itemize}
\vspace{20px}
\begin{minted}{javascript}
// Charger une bibliothèque
const { Something } = require('something');
// Instancier un objet
const thing = new Something({ "some": "value" });
// Écouter un événement
thing.on('someEvent', (data) => {
// Faire quelque chose...
console.log(data);
});
\end{minted}
\end{frame}
% \begin{frame}{IHM}
% ...
% \end{frame}
\subsection{Comportement autonome}
\begin{frame}{Comportement autonome -- Origines historiques}
\begin{columns}
\column{0.5\linewidth}
\begin{itemize}
\item Sans régulation : la machine peut \textbf{accélérer dangereusement} ou \textbf{ralentir}
\item Problèmes de sécurité et de fiabilité
\item $\rightarrow$ Comment stabiliser la vitesse des machines à vapeur (moulins, locomotives, etc.) ?
\end{itemize}
\column{0.5\linewidth}
\begin{center}
\includegraphics[width=\columnwidth]{img/mulhouse_electropolis.jpg}
{\footnotesize Machine à vapeur Sulzer et alternateur Brown Boveri (Electropolis, Mulhouse)}
\end{center}
\end{columns}
\end{frame}
\begin{frame}{Comportement autonome -- Théorie du contrôle}
\begin{columns}
\column{0.3\linewidth}
\includegraphics[width=\columnwidth]{img/regulateur_huygens.jpg}
\column{0.7\linewidth}
\begin{itemize}
\item Comment stabiliser la vitesse des machines à vapeur (moulins, locomotives, etc.) ?
\item \textbf{Régulateur à boules} pour machines à vapeur (James Watt \emoji{flag-scotland}) (XX~\textsuperscript{ème})
\item Plus la machine accélère, plus les boules s'écartent, réduisant l'arrivée de vapeur $\rightarrow$ diminution de la vitesse
\item Initialement proposé par Christian Huygens \emoji{flag-netherlands} (XVII~\textsuperscript{ème})
\item Principe purement mécanique
\item Limites :
\begin{itemize}
\item Réponse lente
\item Pas de correction d'erreur persistante
\item Pas d'anticipation des variations rapides
\item Pas adapté aux systèmes numériques !
\end{itemize}
\end{itemize}
\end{columns}
\end{frame}
\begin{frame}{Comportement autonome -- Théorie du contrôle}
\begin{columns}
\column{0.4\linewidth}
\begin{itemize}
\item \textbf{PID} : mis en équation en 1922 par Nicolas Minorsky \emoji{flag-russia}
\item Testé sur un cuirassé de l'US Navy, l'USS New Mexico
\item En pilotage automatique, en partant d'une erreur de 2 degrés, le navire a pu faire mieux qu'un barreur humain en maintenant son cap avec une précision d'1/3 de degré
\end{itemize}
\column{0.6\linewidth}
\includegraphics[width=\columnwidth]{img/uss_new_mexico.jpg}
\end{columns}
\end{frame}
\begin{frame}{Contrôle -- Fonctionnement du PID}
\begin{center}
\textit{Feedback loop} : stabiliser automatiquement des systèmes en s'appuyant sur les comportements passés
\vspace{16px}
\includegraphics[width=0.8\linewidth]{img/pid.png}
\end{center}
\end{frame}
\begin{frame}{Contrôle -- Fonctionnement du PID}
Équation du PID en version discrète (pour une implantation numérique) :
\begin{equation}
u[n] = K_p \cdot e[n] + K_i \cdot \sum_{i=0}^{n} e[i] + K_d \cdot (e[n] - e[n-1])
\end{equation}
\end{frame}
\begin{frame}{Contrôle -- Fonctionnement du PID}
Équation du PID en version discrète (pour une implantation numérique) :
\begin{equation}
u[n] = K_p \cdot e[n] + K_i \cdot \sum_{i=0}^{n} e[i] + K_d \cdot (e[n] - e[n-1])
\end{equation}
\begin{itemize}
\item Composante $p$ : correction proportionnelle à l'erreur
\begin{itemize}
\item \emoji{cross-mark} Problème : erreur persistante $\rightarrow$ délai de correction très long
\end{itemize}
\item Composante $i$ : correction proportionnelle à la somme des erreurs précédentes
\begin{itemize}
\item \emoji{cross-mark} Problème : instabilité de la trajectoire $\rightarrow$ oscillations
\end{itemize}
\item Composante $d$ : correction prédictive basée sur la variation de l'erreur
\begin{itemize}
\item \emoji{check-mark} L'erreur augmente $\rightarrow$ on "accélère" la correction
\item \emoji{check-mark} L'erreur diminue $\rightarrow$ on "freine" la correction
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Contrôle -- Objectifs du PID}
\centering
\begin{tabular}{
>{\centering\arraybackslash}p{0.45\linewidth}
>{\centering\arraybackslash}p{0.45\linewidth}
}
\textbf{Sans PID} & \textbf{Avec PID} \\[4pt]
\midrule \\
\textcolor{red!70!black}{Réactions brutales} & \textcolor{green!50!black}{Réactions fluides} \\[6pt]
\textcolor{red!70!black}{Oscillations} & \textcolor{green!50!black}{Stabilité} \\[6pt]
\textcolor{red!70!black}{Dépassement} & \textcolor{green!50!black}{Précision} \\
\end{tabular}
\end{frame}
\subsection{Calcul déporté}
\begin{frame}{Calcul déporté -- Une affaire de compromis}
\begin{itemize}
\item Il est possible de réaliser une partie des calculs sur le PC qui commande le robot
\item Mais...
\end{itemize}
\vspace{16px}
\begin{exampleblock}{Avantages, inconvénients ?}
\begin{itemize}
\item Quels sont ici les \textbf{compromis} à réaliser ?
\item Comment appelle-t-on un tel système ?
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Calcul déporté -- Une affaire de compromis}
\begin{itemize}
\item Compromis techniques :
\begin{itemize}
\item \textbf{Temps de calcul} : PID simple adapté à l'Arduino Uno ?
\item \textbf{Mémoire} : quel historique des erreurs peut-on stocker ?
\item \textbf{Énergie} : gains avec le PID ?
\item \textbf{Latence} : calcul local = réponse rapide
\end{itemize}
\end{itemize}
\end{frame}
% \section{Présentation du robot}
% \begin{frame}{Inventaire (\textit{Bill of Material})}
% \begin{center}
% \includegraphics[width=0.5\linewidth]{img/point.png}
% \end{center}
% \end{frame}
\appendix
\section{Bibliographie}
\begin{frame}[allowframebreaks]{Références}
\printbibliography[heading=none]
\end{frame}
% \appendix
% \section{Annexes}
% \begin{frame}{Annexe 1 -- ...}
% \end{frame}
\end{document}