Rapport
This commit is contained in:
parent
85a848ddbf
commit
5f1c810e49
6 changed files with 383 additions and 12 deletions
136
main.py
136
main.py
|
@ -1,23 +1,135 @@
|
|||
import hardware as hw
|
||||
import controller as ctl
|
||||
import GCode_Interpreterdc as gci
|
||||
import svgtroppagcode as sgc
|
||||
#import svgtroppagcode as sgc
|
||||
|
||||
instr = sgc.svg_to_gcode("clock.svg").split("\n")
|
||||
#instr = sgc.svg_to_gcode("clock.svg").split("\n")
|
||||
|
||||
instr = [
|
||||
"G1 X3.000 Y5.500 F2.000",
|
||||
"G1 X3.222 Y5.278 F0.297",
|
||||
"G1 X3.444 Y5.056 F0.354",
|
||||
"G1 X3.667 Y4.833 F0.391",
|
||||
"G1 X3.889 Y4.611 F0.420",
|
||||
"G1 X4.111 Y4.389 F0.445",
|
||||
"G1 X4.333 Y4.167 F0.465",
|
||||
"G1 X4.556 Y3.944 F0.484",
|
||||
"G1 X4.778 Y3.722 F0.500",
|
||||
"G1 X5.000 Y3.500 F0.500",
|
||||
"G0 X21.000 Y5.500",
|
||||
"G1 X20.778 Y5.278 F0.297",
|
||||
"G1 X20.556 Y5.056 F0.354",
|
||||
"G1 X20.333 Y4.833 F0.391",
|
||||
"G1 X20.111 Y4.611 F0.420",
|
||||
"G1 X19.889 Y4.389 F0.445",
|
||||
"G1 X19.667 Y4.167 F0.465",
|
||||
"G1 X19.444 Y3.944 F0.484",
|
||||
"G1 X19.222 Y3.722 F0.500",
|
||||
"G1 X19.000 Y3.500 F0.500",
|
||||
"G0 X12.000 Y8.500",
|
||||
"G1 X12.000 Y8.944 F0.297",
|
||||
"G1 X12.000 Y9.389 F0.354",
|
||||
"G1 X12.000 Y9.833 F0.354",
|
||||
"G1 X12.000 Y10.278 F0.354",
|
||||
"G1 X12.000 Y10.722 F0.354",
|
||||
"G1 X12.000 Y11.167 F0.354",
|
||||
"G1 X12.000 Y11.611 F0.354",
|
||||
"G1 X12.000 Y12.056 F0.354",
|
||||
"G1 X12.000 Y12.500 F0.354",
|
||||
"G1 X12.000 Y12.500 F0.354",
|
||||
"G1 X12.222 Y12.722 F0.354",
|
||||
"G1 X12.444 Y12.944 F0.354",
|
||||
"G1 X12.667 Y13.167 F0.354",
|
||||
"G1 X12.889 Y13.389 F0.354",
|
||||
"G1 X13.111 Y13.611 F0.354",
|
||||
"G1 X13.333 Y13.833 F0.354",
|
||||
"G1 X13.556 Y14.056 F0.354",
|
||||
"G1 X13.778 Y14.278 F0.354",
|
||||
"G1 X14.000 Y14.500 F0.354",
|
||||
"G0 X20.000 Y12.500",
|
||||
"G1 X19.971 Y13.190 F0.185",
|
||||
"G1 X19.884 Y13.864 F0.195",
|
||||
"G1 X19.743 Y14.520 F0.195",
|
||||
"G1 X19.549 Y15.154 F0.195",
|
||||
"G1 X19.306 Y15.764 F0.196",
|
||||
"G1 X19.015 Y16.349 F0.196",
|
||||
"G1 X18.679 Y16.905 F0.196",
|
||||
"G1 X18.300 Y17.431 F0.197",
|
||||
"G1 X17.881 Y17.924 F0.197",
|
||||
"G1 X17.424 Y18.381 F0.198",
|
||||
"G1 X16.931 Y18.800 F0.198",
|
||||
"G1 X16.405 Y19.179 F0.198",
|
||||
"G1 X15.849 Y19.515 F0.199",
|
||||
"G1 X15.264 Y19.806 F0.199",
|
||||
"G1 X14.654 Y20.049 F0.200",
|
||||
"G1 X14.020 Y20.243 F0.200",
|
||||
"G1 X13.364 Y20.384 F0.200",
|
||||
"G1 X12.690 Y20.471 F0.201",
|
||||
"G1 X12.000 Y20.500 F0.201",
|
||||
"G1 X12.000 Y20.500 F0.202",
|
||||
"G1 X11.310 Y20.471 F0.202",
|
||||
"G1 X10.636 Y20.384 F0.203",
|
||||
"G1 X9.981 Y20.243 F0.203",
|
||||
"G1 X9.346 Y20.049 F0.204",
|
||||
"G1 X8.736 Y19.806 F0.204",
|
||||
"G1 X8.151 Y19.515 F0.205",
|
||||
"G1 X7.595 Y19.179 F0.206",
|
||||
"G1 X7.069 Y18.800 F0.206",
|
||||
"G1 X6.576 Y18.381 F0.207",
|
||||
"G1 X6.119 Y17.924 F0.207",
|
||||
"G1 X5.700 Y17.431 F0.208",
|
||||
"G1 X5.321 Y16.905 F0.209",
|
||||
"G1 X4.985 Y16.349 F0.209",
|
||||
"G1 X4.694 Y15.764 F0.210",
|
||||
"G1 X4.451 Y15.154 F0.211",
|
||||
"G1 X4.257 Y14.520 F0.211",
|
||||
"G1 X4.116 Y13.864 F0.212",
|
||||
"G1 X4.029 Y13.190 F0.213",
|
||||
"G1 X4.000 Y12.500 F0.214",
|
||||
"G1 X4.000 Y12.500 F0.214",
|
||||
"G1 X4.029 Y11.810 F0.215",
|
||||
"G1 X4.116 Y11.136 F0.216",
|
||||
"G1 X4.257 Y10.481 F0.217",
|
||||
"G1 X4.451 Y9.846 F0.218",
|
||||
"G1 X4.694 Y9.236 F0.219",
|
||||
"G1 X4.985 Y8.651 F0.219",
|
||||
"G1 X5.321 Y8.095 F0.220",
|
||||
"G1 X5.700 Y7.569 F0.221",
|
||||
"G1 X6.119 Y7.076 F0.222",
|
||||
"G1 X6.576 Y6.619 F0.223",
|
||||
"G1 X7.069 Y6.200 F0.224",
|
||||
"G1 X7.595 Y5.821 F0.225",
|
||||
"G1 X8.151 Y5.485 F0.226",
|
||||
"G1 X8.736 Y5.194 F0.227",
|
||||
"G1 X9.346 Y4.951 F0.228",
|
||||
"G1 X9.981 Y4.757 F0.230",
|
||||
"G1 X10.636 Y4.616 F0.231",
|
||||
"G1 X11.310 Y4.529 F0.232",
|
||||
"G1 X12.000 Y4.500 F0.233",
|
||||
"G1 X12.000 Y4.500 F0.235",
|
||||
"G1 X12.690 Y4.529 F0.236",
|
||||
"G1 X13.364 Y4.616 F0.237",
|
||||
"G1 X14.020 Y4.757 F0.239",
|
||||
"G1 X14.654 Y4.951 F0.240",
|
||||
"G1 X15.264 Y5.194 F0.239",
|
||||
"G1 X15.849 Y5.485 F0.237",
|
||||
"G1 X16.405 Y5.821 F0.236",
|
||||
"G1 X16.931 Y6.200 F0.235",
|
||||
"G1 X17.424 Y6.619 F0.233",
|
||||
"G1 X17.881 Y7.076 F0.232",
|
||||
"G1 X18.300 Y7.569 F0.231",
|
||||
"G1 X18.679 Y8.095 F0.230",
|
||||
"G1 X19.015 Y8.651 F0.228",
|
||||
"G1 X19.306 Y9.236 F0.227",
|
||||
"G1 X19.549 Y9.846 F0.226",
|
||||
"G1 X19.743 Y10.481 F0.225",
|
||||
"G1 X19.884 Y11.136 F0.224",
|
||||
"G1 X19.971 Y11.810 F0.223",
|
||||
"G1 X20.000 Y12.500 F0.222",]
|
||||
|
||||
b = "socket.sock"
|
||||
sh = hw.SimuHardware(b)
|
||||
ctrl = ctl.DummyController()
|
||||
gtm1 = gci.GCodeToMotors(ctrl, sh)
|
||||
for i in instr[2:]:
|
||||
for i in instr[0:]:
|
||||
gtm1.instruction_converter(i)
|
||||
# gtm1.instruction_converter("G1 X25.000 Y25.000 F2.000")
|
||||
# gtm1.instruction_converter("G1 X30.000 Y25.000 F2.000")
|
||||
# gtm1.instruction_converter("G3 X30.000 Y45.000 I0 J10 F0.100")
|
||||
# gtm1.instruction_converter("G5 X50.000 Y45.000 I-5 J-5 P10 J5 F0.5000")
|
||||
# gtm1.instruction_converter("G1 X50.000 Y50.000 F2.000")
|
||||
# gtm1.instruction_converter("G1 X50.000 Y100.000 F2.000")
|
||||
# gtm1.instruction_converter("G1 X100.000 Y-50.000 F2.000")
|
||||
# gtm1.instruction_converter("G1 X-50.000 Y-100.000 F2.000")
|
||||
# gtm1.instruction_converter("G1 X-100.000 Y50.000 F2.000")
|
||||
|
|
13
rapport.aux
Normal file
13
rapport.aux
Normal file
|
@ -0,0 +1,13 @@
|
|||
\relax
|
||||
\providecommand\babel@aux[2]{}
|
||||
\@nameuse{bbl@beforestart}
|
||||
\catcode `:\active
|
||||
\catcode `;\active
|
||||
\catcode `!\active
|
||||
\catcode `?\active
|
||||
\babel@aux{french}{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Positionnement}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Réalisation}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Contrôle de l'entrée}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Fonctionnement}{2}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{2}
|
164
rapport.log
Normal file
164
rapport.log
Normal file
|
@ -0,0 +1,164 @@
|
|||
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/nixos.org) (preloaded format=pdflatex 1980.1.1) 7 FEB 2025 19:03
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**rapport
|
||||
(./rapport.tex
|
||||
LaTeX2e <2023-11-01> patch level 1
|
||||
L3 programming layer <2024-02-20>
|
||||
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/base/article.cls
|
||||
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
|
||||
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/base/size10.clo
|
||||
File: size10.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count188
|
||||
\c@section=\count189
|
||||
\c@subsection=\count190
|
||||
\c@subsubsection=\count191
|
||||
\c@paragraph=\count192
|
||||
\c@subparagraph=\count193
|
||||
\c@figure=\count194
|
||||
\c@table=\count195
|
||||
\abovecaptionskip=\skip48
|
||||
\belowcaptionskip=\skip49
|
||||
\bibindent=\dimen140
|
||||
)
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/base/fontenc.sty
|
||||
Package: fontenc 2021/04/29 v2.0v Standard LaTeX package
|
||||
)
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/gen
|
||||
eric/babel/babel.sty
|
||||
Package: babel 2024/02/07 v24.2 The Babel package
|
||||
\babel@savecnt=\count196
|
||||
\U@D=\dimen141
|
||||
\l@unhyphenated=\language89
|
||||
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/gen
|
||||
eric/babel/txtbabel.def)
|
||||
\bbl@readstream=\read2
|
||||
\bbl@dirlevel=\count197
|
||||
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/gen
|
||||
eric/babel-french/french.ldf
|
||||
Language: french 2024-02-29 v3.5s French support from the babel system
|
||||
Package babel Info: Hyphen rules for 'acadian' set to \l@french
|
||||
(babel) (\language31). Reported on input line 91.
|
||||
Package babel Info: Hyphen rules for 'canadien' set to \l@french
|
||||
(babel) (\language31). Reported on input line 92.
|
||||
\FB@stdchar=\count198
|
||||
Package babel Info: Making : an active character on input line 420.
|
||||
Package babel Info: Making ; an active character on input line 421.
|
||||
Package babel Info: Making ! an active character on input line 422.
|
||||
Package babel Info: Making ? an active character on input line 423.
|
||||
\FBguill@level=\count199
|
||||
\FBold@everypar=\toks17
|
||||
\FB@Mht=\dimen142
|
||||
\mc@charclass=\count266
|
||||
\mc@charfam=\count267
|
||||
\mc@charslot=\count268
|
||||
\std@mcc=\count269
|
||||
\dec@mcc=\count270
|
||||
\FB@parskip=\dimen143
|
||||
\listindentFB=\dimen144
|
||||
\descindentFB=\dimen145
|
||||
\labelindentFB=\dimen146
|
||||
\labelwidthFB=\dimen147
|
||||
\leftmarginFB=\dimen148
|
||||
\parindentFFN=\dimen149
|
||||
\FBfnindent=\dimen150
|
||||
))
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/gen
|
||||
eric/babel/locale/fr/babel-french.tex
|
||||
Package babel Info: Importing font and identification data for french
|
||||
(babel) from babel-fr.ini. Reported on input line 11.
|
||||
)
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/carlisle/scalefnt.sty)
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/graphics/keyval.sty
|
||||
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks18
|
||||
)
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/l3backend/l3backend-pdftex.def
|
||||
File: l3backend-pdftex.def 2024-02-20 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count271
|
||||
\l__pdf_internal_box=\box51
|
||||
) (./rapport.aux)
|
||||
\openout1 = `rapport.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 9.
|
||||
LaTeX Font Info: ... okay on input line 9.
|
||||
LaTeX Info: Redefining \degres on input line 9.
|
||||
LaTeX Info: Redefining \up on input line 9.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <12> on input line 10.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <8> on input line 10.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <6> on input line 10.
|
||||
LaTeX Font Info: Trying to load font information for T1+cmtt on input line 3
|
||||
0.
|
||||
|
||||
(/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/tex/lat
|
||||
ex/base/t1cmtt.fd
|
||||
File: t1cmtt.fd 2023/04/13 v2.5m Standard LaTeX font definitions
|
||||
) [1
|
||||
|
||||
{/nix/store/99r9zgqml63mjnnc1pll5mb3x6w3p67g-texlive-2023-env/share/texmf-var/f
|
||||
onts/map/pdftex/updmap/pdftex.map}{/nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-
|
||||
texlive-2023-env-texmfdist/fonts/enc/dvips/cm-super/cm-super-t1.enc}]
|
||||
Overfull \hbox (3.37326pt too wide) in paragraph at lines 56--63
|
||||
\T1/cmr/m/n/10 Ce GCode est parsé, puis une boucle de contrôle est ins-tan-ciée
|
||||
avec le [][]\T1/cmtt/m/n/10 Controller
|
||||
[]
|
||||
|
||||
[2] (./rapport.aux)
|
||||
***********
|
||||
LaTeX2e <2023-11-01> patch level 1
|
||||
L3 programming layer <2024-02-20>
|
||||
***********
|
||||
)
|
||||
Here is how much of TeX's memory you used:
|
||||
2553 strings out of 474116
|
||||
44167 string characters out of 5720541
|
||||
1932187 words of memory out of 5000000
|
||||
24945 multiletter control sequences out of 15000+600000
|
||||
566418 words of font info for 53 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
52i,6n,50p,213b,428s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/fonts
|
||||
/type1/public/cm-super/sfbx1200.pfb></nix/store/3sqpmm9zizph3l68bcchchva3cqp8mf
|
||||
v-texlive-2023-env-texmfdist/fonts/type1/public/cm-super/sfbx1440.pfb></nix/sto
|
||||
re/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/fonts/type1/publ
|
||||
ic/cm-super/sfrm1000.pfb></nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2
|
||||
023-env-texmfdist/fonts/type1/public/cm-super/sfrm1200.pfb></nix/store/3sqpmm9z
|
||||
izph3l68bcchchva3cqp8mfv-texlive-2023-env-texmfdist/fonts/type1/public/cm-super
|
||||
/sfrm1728.pfb></nix/store/3sqpmm9zizph3l68bcchchva3cqp8mfv-texlive-2023-env-tex
|
||||
mfdist/fonts/type1/public/cm-super/sfti1000.pfb></nix/store/3sqpmm9zizph3l68bcc
|
||||
hchva3cqp8mfv-texlive-2023-env-texmfdist/fonts/type1/public/cm-super/sftt1000.p
|
||||
fb>
|
||||
Output written on rapport.pdf (2 pages, 128270 bytes).
|
||||
PDF statistics:
|
||||
47 PDF objects out of 1000 (max. 8388607)
|
||||
28 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
1 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
BIN
rapport.pdf
Normal file
BIN
rapport.pdf
Normal file
Binary file not shown.
81
rapport.tex
Normal file
81
rapport.tex
Normal file
|
@ -0,0 +1,81 @@
|
|||
\documentclass{article}
|
||||
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[french]{babel}
|
||||
|
||||
\title{Contrôleur de petite machine à bois}
|
||||
\author{Matthieu Boyer, Sélène Corbineau}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section{Positionnement}
|
||||
Nous nous sommes intéressés au contrôle de la petite machine à bois d'hackens
|
||||
(une fraiseuse à commande numérique). Pour simplifier le problème et rendre
|
||||
les échecs moins dangereux, nous l'avons considérée comme un \emph{plotter} :
|
||||
la tête de la PMB tient un stylo et l'on trace une image. La monture du
|
||||
stylo sur la tête est munie d'un ressort. De cette manière, la hauteur exacte
|
||||
de la tête importe peu pour obtenir un trait correct. L'asservissement porte
|
||||
alors principalement sur les axes X et Y.
|
||||
|
||||
Le format naturel de dessin ici est un format vectoriel comme le SVG. Comme
|
||||
représentation intermédiaire, nous avons choisi le format de commande traditionnel
|
||||
des machines à commande numérique, le GCode. Le GCode est une suite d'instruction
|
||||
précisant des déplacements (linéaires, circulaires voire selon des courbes
|
||||
de Bézier) et, pour chaque déplacement, une vitesse cible. Le choix des vitesses
|
||||
cible et la manière de les réaliser à été au coeur du projet.
|
||||
|
||||
\section{Réalisation}
|
||||
Dans le rendu fourni, le contrôleur n'est capable d'intéragir qu'avec le
|
||||
simulateur. Pour ce faire, on lance le simulateur physique \verb|simulator.py|
|
||||
puis le contrôleur \verb|main.py|. Afin de générer le GCode exécuté par
|
||||
le contrôleur, on peut utiliser l'exécutable \verb|svgtroppagcode.py|.
|
||||
|
||||
Ce dernier exécutable est séparé, car, utilisant la bibliothèque \verb|toppra|,
|
||||
il faut une version compatible de NumPy d'au plus 1.21.6, qui implique une
|
||||
version de Python antérieure à 3.6. Pour avoir un environnement adéquat,
|
||||
nous avons utilisé les machines des salles informatiques, qui ne sont pas
|
||||
à jour. N'hésitez pas à revenir vers nous si vous rencontrez des difficultés.
|
||||
|
||||
\subsection{Contrôle de l'entrée}
|
||||
L'entrée SVG est convertie en GCode. Pour ce faire, deux méthodes sont proposées:
|
||||
% TODO: Comment on choisit?
|
||||
\begin{itemize}
|
||||
\item Un convertisseur naïf convertit fidèlement un SVG en GCode, les feedrates
|
||||
étant choisis arbitrairement.
|
||||
\item Un convertisseur utilisant \verb|toppra| : on convertit le SVG en chemins,
|
||||
puis on rééchantillone ce chemin en prenant en compte les contraintes en
|
||||
vitesse et accélération. Cette méthode à l'inconvénient de transformer les
|
||||
courbes en lignes brisées au niveau du GCode (et non plus au niveau du contrôleur).
|
||||
\end{itemize}
|
||||
|
||||
\section{Fonctionnement}
|
||||
% Blablah conversion vers SVG?
|
||||
%
|
||||
|
||||
Nous nous sommes concentrés sur l'architecture de contrôle. Une classe
|
||||
\verb|GCodeToMotors| supervise le processus de dessin, prenant en entrée du
|
||||
GCode. Ce GCode est parsé, puis une boucle de contrôle est instanciée avec
|
||||
le \verb|Controller| et le \verb|Hardware|. Le contrôleur décide de la commande
|
||||
à appliquer étant donné la cible et l'état de la machine. L'instance
|
||||
de \verb|Hardware| elle, expose deux fonctions, pour appliquer une commande et
|
||||
examiner l'état de la machine.
|
||||
|
||||
Cette architecture modulaire permet au \verb|Hardware| d'implémenter des
|
||||
interfaces diverses (commande directe du matériel, communication réseau, etc.).
|
||||
Ici toutefois, on s'est restreint à une communication par socket à un processus
|
||||
externe de simulation. Il est également facile de choisir la politique de contrôle
|
||||
en implémentant des \verb|Controller| différents. Nous avons implémenté un
|
||||
contrôleur naïf d'ordre 0, qui commande la machine à la vitesse spécifiée par
|
||||
le GCode (constante par morceaux donc) et dans la direction nécessaire pour
|
||||
atteindre le prochain point de contrôle. Nous avons tenté d'implémenter un
|
||||
contrôleur PID, mais nous n'avons pas trouvé de coefficients donnant une
|
||||
réponse intéressante : en pratique, les moteurs de la fraiseuse numérique
|
||||
sont suffisamment puissants pour qu'aux vitesses raisonnables ne déchirant pas
|
||||
le papier, l'inertie soit de fait négligeable.
|
||||
|
||||
Le simulateur fourni dans le rapport simule en temps réel, les pas de calcul
|
||||
étant choisis les plus petits possibles. La communication asynchrone par socket
|
||||
UNIX permet de mettre cela en oeuvre facilement.
|
||||
|
||||
\end{document}
|
|
@ -10,4 +10,5 @@ pkgs.mkShell {
|
|||
ps.scipy
|
||||
]))
|
||||
];
|
||||
LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib/";
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue