<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://synapsys-lab.github.io/synapsys/pt/blog</id>
    <title>Synapsys Blog</title>
    <updated>2026-04-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://synapsys-lab.github.io/synapsys/pt/blog"/>
    <subtitle>Tutorials, case studies and research insights from the Synapsys control systems framework.</subtitle>
    <icon>https://synapsys-lab.github.io/synapsys/pt/img/favicon.ico</icon>
    <rights>Copyright © 2026 Synapsys Contributors</rights>
    <entry>
        <title type="html"><![CDATA[PID com Anti-Windup: Teoria, Ajuste e Validação Experimental]]></title>
        <id>https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research</id>
        <link href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research"/>
        <updated>2026-04-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Um deep-dive orientado à pesquisa sobre PID discreto com anti-windup por back-calculation — do problema de windup integral à validação experimental de resposta ao degrau, com código Synapsys ao longo do post.
]]></summary>
        <content type="html"><![CDATA[<p>O windup integral é um dos modos de falha mais comuns em controladores PID em produção.
Este post cobre o problema a partir dos primeiros princípios, deriva o esquema de
anti-windup por back-calculation, mostra como o Synapsys o implementa e valida o
projeto contra uma planta simulada de segunda ordem.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-problema-do-windup">O problema do windup<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#o-problema-do-windup" class="hash-link" aria-label="Link direto para O problema do windup" title="Link direto para O problema do windup">​</a></h2>
<p>Um controlador PID com saturação na saída tem uma interação problemática: quando o
atuador está saturado, o integrador continua acumulando erro mesmo que a saída esteja
limitada. Quando o sinal do erro se inverte, o integrador leva muito tempo para
"desacumular" antes que a saída saia da saturação — causando sobressinal e oscilação.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="anti-windup-por-back-calculation">Anti-windup por back-calculation<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#anti-windup-por-back-calculation" class="hash-link" aria-label="Link direto para Anti-windup por back-calculation" title="Link direto para Anti-windup por back-calculation">​</a></h2>
<p>O esquema de back-calculation realimenta o erro de saturação para o integrador com
ganho <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mi mathvariant="normal">/</mi><msub><mi>T</mi><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">1/T_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">1/</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span>:</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mover accent="true"><mi>I</mi><mo>˙</mo></mover><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>K</mi><mi>i</mi></msub><mo>⋅</mo><mi>e</mi><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>T</mi><mi>t</mi></msub></mfrac><mo fence="true" stretchy="true" minsize="1.2em" maxsize="1.2em">[</mo><msub><mi>u</mi><mrow><mi>s</mi><mi>a</mi><mi>t</mi></mrow></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>−</mo><msub><mi>u</mi><mrow><mi>u</mi><mi>n</mi><mi>s</mi></mrow></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo fence="true" stretchy="true" minsize="1.2em" maxsize="1.2em">]</mo></mrow><annotation encoding="application/x-tex">\dot{I}(t) = K_i \cdot e(t) + \frac{1}{T_t}\bigl[u_{sat}(t) - u_{uns}(t)\bigr]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1702em;vertical-align:-0.25em"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9202em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.0785em">I</span></span><span style="top:-3.2523em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.0278em"><span class="mord">˙</span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:2.1574em;vertical-align:-0.836em"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em"><span style="top:-2.314em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em"><span class="pstrut" style="height:3em"></span><span class="frac-line" style="border-bottom-width:0.04em"></span></span><span style="top:-3.677em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.836em"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen"><span class="delimsizing size1">[</span></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight">a</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">n</span><span class="mord mathnormal mtight">s</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mclose"><span class="delimsizing size1">]</span></span></span></span></span></span>
<p>Quando a saída <em>não</em> está saturada, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>u</mi><mrow><mi>s</mi><mi>a</mi><mi>t</mi></mrow></msub><mo>=</mo><msub><mi>u</mi><mrow><mi>u</mi><mi>n</mi><mi>s</mi></mrow></msub></mrow><annotation encoding="application/x-tex">u_{sat} = u_{uns}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight">a</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">n</span><span class="mord mathnormal mtight">s</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span> e o termo de correção é
zero — o integrador se comporta normalmente.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="implementação-no-synapsys">Implementação no Synapsys<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#implementa%C3%A7%C3%A3o-no-synapsys" class="hash-link" aria-label="Link direto para Implementação no Synapsys" title="Link direto para Implementação no Synapsys">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PID</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pid </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> PID</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    Kp    </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">5.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    Ki    </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">2.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    Kd    </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    dt    </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    u_min </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    u_max </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)"># anti_windup=True é o padrão</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">u </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> pid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">compute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">setpoint</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">5.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> measurement</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="simulação-comparativa">Simulação comparativa<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#simula%C3%A7%C3%A3o-comparativa" class="hash-link" aria-label="Link direto para Simulação comparativa" title="Link direto para Simulação comparativa">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Simulação</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Resultados</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PID</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> c2d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">0.5</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">rodar_sim</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">anti_windup</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">bool</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_passos</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">int</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">800</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    pid </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> PID</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">Kp</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">5.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Ki</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">2.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Kd</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.05</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              u_min</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> u_max</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> anti_windup</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">anti_windup</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    x </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    ys </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">for</span><span class="token plain"> i </span><span class="token keyword" style="color:rgb(86, 156, 214)">in</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">range</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">n_passos</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        setpoint </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">3.0</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> i </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">400</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">3.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        y </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">float</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">x</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        u </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">pid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">compute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">setpoint</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        x</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> _ </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> planta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">evolve</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">x</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        ys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">append</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">ys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">y_sem </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> rodar_sim</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">anti_windup</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">False</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">y_com </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> rodar_sim</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">anti_windup</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>Sem anti-windup:</strong></p><ul>
<li>Degrau positivo: sobressinal ~40% antes de estabilizar</li>
<li>Degrau negativo: transiente grande por windup acumulado</li>
</ul><p><strong>Com anti-windup:</strong></p><ul>
<li>Ambos os degraus: resposta limpa, similar a primeira ordem</li>
<li>Sobressinal &lt; 5%</li>
<li>Tempo de acomodação reduzido em ~60%</li>
</ul></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="diretrizes-de-ajuste-para-pesquisa">Diretrizes de ajuste para pesquisa<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#diretrizes-de-ajuste-para-pesquisa" class="hash-link" aria-label="Link direto para Diretrizes de ajuste para pesquisa" title="Link direto para Diretrizes de ajuste para pesquisa">​</a></h2>
<table><thead><tr><th>Parâmetro</th><th>Efeito</th><th>Ponto de partida</th></tr></thead><tbody><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>K</mi><mi>p</mi></msub></mrow><annotation encoding="application/x-tex">K_p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span></span></span></span></td><td>Velocidade de resposta</td><td>FOPDT: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>K</mi><mi>p</mi></msub><mo>=</mo><mn>0</mn><mo separator="true">,</mo><mn>6</mn><mi mathvariant="normal">/</mi><mo stretchy="false">(</mo><msub><mi>K</mi><mrow><mi>p</mi><mi>l</mi><mi>a</mi><mi>n</mi><mi>t</mi><mi>a</mi></mrow></msub><mo>⋅</mo><mi>τ</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">K_p = 0,6 / (K_{planta} \cdot \tau)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">6/</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0197em">pl</span><span class="mord mathnormal mtight">an</span><span class="mord mathnormal mtight">t</span><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.1132em">τ</span><span class="mclose">)</span></span></span></span></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>K</mi><mi>i</mi></msub><mo>=</mo><msub><mi>K</mi><mi>p</mi></msub><mi mathvariant="normal">/</mi><msub><mi>T</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">K_i = K_p / T_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mord">/</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></td><td>Eliminação de erro em regime permanente</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>T</mi><mi>i</mi></msub><mo>=</mo><mn>2</mn><mi>τ</mi></mrow><annotation encoding="application/x-tex">T_i = 2\tau</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.1132em">τ</span></span></span></span></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>K</mi><mi>d</mi></msub><mo>=</mo><msub><mi>K</mi><mi>p</mi></msub><mo>⋅</mo><msub><mi>T</mi><mi>d</mi></msub></mrow><annotation encoding="application/x-tex">K_d = K_p \cdot T_d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></td><td>Amortecimento, amplificação de ruído</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>T</mi><mi>d</mi></msub><mo>=</mo><mi>τ</mi><mi mathvariant="normal">/</mi><mn>4</mn></mrow><annotation encoding="application/x-tex">T_d = \tau / 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.1132em">τ</span><span class="mord">/4</span></span></span></span></td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>u</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub><mo separator="true">,</mo><msub><mi>u</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">u_{min}, u_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></td><td>Limites do atuador</td><td>Especificação física do atuador</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conexão-com-a-literatura">Conexão com a literatura<a href="https://synapsys-lab.github.io/synapsys/pt/blog/pid-anti-windup-research#conex%C3%A3o-com-a-literatura" class="hash-link" aria-label="Link direto para Conexão com a literatura" title="Link direto para Conexão com a literatura">​</a></h2>
<p>O esquema de back-calculation usado no Synapsys segue <strong>Åström &amp; Hägglund (2006)</strong>
<em>Advanced PID Control</em>, Capítulo 6.</p>
<div class="language-bibtex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bibtex codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">@book{astrom2006advanced,</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  author    = {Åström, Karl Johan and Hägglund, Tore},</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  title     = {Advanced PID Control},</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publisher = {ISA — The Instrumentation, Systems, and Automation Society},</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  year      = {2006},</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  isbn      = {978-1556175169},</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>A referência completa da API está em <a href="https://synapsys-lab.github.io/synapsys/pt/docs/api/algorithms">synapsys.algorithms →</a>.</p>]]></content>
        <author>
            <name>Oséias D. Farias</name>
            <uri>https://oseiasdfarias.github.io</uri>
        </author>
        <category label="Artigo" term="Artigo"/>
        <category label="Research" term="Research"/>
        <category label="PID" term="PID"/>
        <category label="Control Theory" term="Control Theory"/>
        <category label="Simulation" term="Simulation"/>
        <category label="Python" term="Python"/>
        <category label="Tutorial" term="Tutorial"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Do Modelo ao Hardware: MIL → SIL → HIL em Três Etapas]]></title>
        <id>https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment</id>
        <link href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Um guia prático para o fluxo de desenvolvimento MIL/SIL/HIL com Synapsys — troque da simulação para o hardware real mudando uma linha, mantendo seu algoritmo de controle intacto.
]]></summary>
        <content type="html"><![CDATA[<div align="center"><p><img decoding="async" loading="lazy" src="https://raw.githubusercontent.com/synapsys-lab/synapsys/main/website/static/img/examples/03_sil_ai_controller.gif" alt="SIL Neural-LQR" class="img_ev3q"></p></div>
<p><strong>MIL → SIL → HIL</strong> é a progressão padrão do modelo-V para controle embarcado: simule
tudo primeiro, depois substitua o modelo da planta por hardware real uma camada de cada
vez. Com Synapsys, a transição é uma <strong>troca de uma linha</strong> porque a camada de transporte
é totalmente abstraída do algoritmo.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="as-três-etapas">As três etapas<a href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment#as-tr%C3%AAs-etapas" class="hash-link" aria-label="Link direto para As três etapas" title="Link direto para As três etapas">​</a></h2>
<table><thead><tr><th>Etapa</th><th>Planta</th><th>Controlador</th><th>Transporte</th><th>Objetivo</th></tr></thead><tbody><tr><td><strong>MIL</strong></td><td>Simulada (<code>StateSpace</code>)</td><td>Código do algoritmo</td><td>Memória compartilhada</td><td>Iteração rápida, testes unitários</td></tr><tr><td><strong>SIL</strong></td><td>Simulada</td><td>Binário compilado / processo externo</td><td>ZeroMQ</td><td>Testes de integração, perfil de latência</td></tr><tr><td><strong>HIL</strong></td><td>Dispositivo real</td><td>Código do algoritmo ou firmware MCU</td><td><code>HardwareInterface</code></td><td>Testes de aceitação na planta real</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-1--mil-tudo-em-um-processo">Etapa 1 — MIL: tudo em um processo<a href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment#etapa-1--mil-tudo-em-um-processo" class="hash-link" aria-label="Link direto para Etapa 1 — MIL: tudo em um processo" title="Link direto para Etapa 1 — MIL: tudo em um processo">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">agents </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncMode</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PID</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">transport </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> SharedMemoryTransport</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta_d </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> c2d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pid </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> PID</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">Kp</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">4.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Ki</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">pid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">compute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">setpoint</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">3.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> measurement</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">with</span><span class="token plain"> SharedMemoryTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"demo"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string" style="color:rgb(206, 145, 120)">"y"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"u"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> create</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> bus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    bus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">write</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"y"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    bus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">write</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"u"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    sync </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SyncMode</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">LOCK_STEP</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"planta"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> bus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">False</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"ctrl"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> bus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-2--sil-dois-processos-via-zeromq">Etapa 2 — SIL: dois processos via ZeroMQ<a href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment#etapa-2--sil-dois-processos-via-zeromq" class="hash-link" aria-label="Link direto para Etapa 2 — SIL: dois processos via ZeroMQ" title="Link direto para Etapa 2 — SIL: dois processos via ZeroMQ">​</a></h2>
<p>A função <code>lei</code> <strong>não muda</strong>. Apenas o transporte é trocado:</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">processo_planta.py</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">processo_controlador.py</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">agents </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncMode</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">transport </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ZMQTransport</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta_d </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> c2d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://*:5555"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"pub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://localhost:5556"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"sub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sync </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SyncMode</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">WALL_CLOCK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"planta"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> pub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sub_transport</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">sub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">agents </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncMode</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PID</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">transport </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ZMQTransport</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pid </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> PID</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">Kp</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">4.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Ki</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">pid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">compute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">setpoint</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">3.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> measurement</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://localhost:5555"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"sub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://*:5556"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"pub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sync </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SyncMode</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">WALL_CLOCK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"ctrl"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> pub_transport</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">pub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="etapa-3--hil-hardware-real">Etapa 3 — HIL: hardware real<a href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment#etapa-3--hil-hardware-real" class="hash-link" aria-label="Link direto para Etapa 3 — HIL: hardware real" title="Link direto para Etapa 3 — HIL: hardware real">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">agents </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> HardwareAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncMode</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">hw </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> HardwareInterface</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">transport </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ZMQTransport</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MinhaInterfaceDAQ</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">HardwareInterface</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">__init__</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token builtin" style="color:rgb(86, 156, 214)">super</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">__init__</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">n_inputs</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_outputs</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">read_outputs</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> timeout_ms</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">float</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">100.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)"># return np.array([self.daq.read_channel(0)])</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">   </span><span class="token comment" style="color:rgb(106, 153, 85)"># stub</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">write_inputs</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> timeout_ms</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">float</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">100.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> </span><span class="token boolean">None</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)"># self.daq.write_channel(0, float(u[0]))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">pass</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://localhost:5556"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"sub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">pub </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ZMQTransport</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"tcp://*:5555"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> mode</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"pub"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sync </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SyncMode</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">WALL_CLOCK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">HardwareAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"hw"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> MinhaInterfaceDAQ</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> pub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sub_transport</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">sub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>O processo controlador <strong>não muda</strong>. A troca é cirúrgica.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="resumo">Resumo<a href="https://synapsys-lab.github.io/synapsys/pt/blog/mil-sil-hil-control-deployment#resumo" class="hash-link" aria-label="Link direto para Resumo" title="Link direto para Resumo">​</a></h2>
<table><thead><tr><th>Etapa</th><th>O que muda</th></tr></thead><tbody><tr><td>MIL → SIL</td><td><code>SharedMemoryTransport</code> → <code>ZMQTransport</code>, dividir em dois processos</td></tr><tr><td>SIL → HIL</td><td><code>PlantAgent</code> → <code>HardwareAgent(MinhaInterfaceDAQ())</code></td></tr><tr><td>Algoritmo de controle</td><td><strong>Não muda</strong></td></tr></tbody></table>
<p>Veja o exemplo SIL completo em
<a href="https://github.com/synapsys-lab/synapsys/tree/main/examples/advanced/02_sil_ai_controller" target="_blank" rel="noopener noreferrer"><code>examples/advanced/02_sil_ai_controller/</code></a>.</p>]]></content>
        <author>
            <name>Oséias D. Farias</name>
            <uri>https://oseiasdfarias.github.io</uri>
        </author>
        <category label="Post" term="Post"/>
        <category label="Tutorial" term="Tutorial"/>
        <category label="SIL" term="SIL"/>
        <category label="HIL" term="HIL"/>
        <category label="Simulation" term="Simulation"/>
        <category label="Python" term="Python"/>
        <category label="Control Theory" term="Control Theory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Controle MIMO de um Quadrotor com Neural-LQR]]></title>
        <id>https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr</id>
        <link href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr"/>
        <updated>2026-04-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Como modelar um quadrotor linearizado de 12 estados, projetar um LQR MIMO, aumentá-lo com um MLP residual e simular a malha fechada em 3D — um estudo de caso de nível de pesquisa usando Synapsys.
]]></summary>
        <content type="html"><![CDATA[<div align="center"><p><img decoding="async" loading="lazy" src="https://raw.githubusercontent.com/synapsys-lab/synapsys/main/website/static/img/examples/06_quadcopter_3d.gif" alt="Rastreamento 3D do Quadrotor" class="img_ev3q"></p></div>
<p>Um quadrotor possui quatro rotores, seis graus de liberdade de corpo rígido e dinâmica
rotacional totalmente acoplada — é o benchmark MIMO da robótica aérea. Este post
percorre o pipeline completo de projeto: física → linearização → LQR → residual
Neural-LQR → simulação 3D.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="modelo-em-espaço-de-estados">Modelo em espaço de estados<a href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr#modelo-em-espa%C3%A7o-de-estados" class="hash-link" aria-label="Link direto para Modelo em espaço de estados" title="Link direto para Modelo em espaço de estados">​</a></h2>
<p>A linearização de 12 estados em torno do equilíbrio de hover utiliza posição
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x, y, z)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0359em">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.044em">z</span><span class="mclose">)</span></span></span></span>, velocidade <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mover accent="true"><mi>x</mi><mo>˙</mo></mover><mo separator="true">,</mo><mover accent="true"><mi>y</mi><mo>˙</mo></mover><mo separator="true">,</mo><mover accent="true"><mi>z</mi><mo>˙</mo></mover><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(\dot x, \dot y, \dot z)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal">x</span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.1111em"><span class="mord">˙</span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.0359em">y</span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.0833em"><span class="mord">˙</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1944em"><span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.044em">z</span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.0833em"><span class="mord">˙</span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>, ângulos de Euler
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>ϕ</mi><mo separator="true">,</mo><mi>θ</mi><mo separator="true">,</mo><mi>ψ</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(\phi, \theta, \psi)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">ϕ</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0359em">ψ</span><span class="mclose">)</span></span></span></span> e taxas angulares <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi>q</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(p, q, r)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0359em">q</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0278em">r</span><span class="mclose">)</span></span></span></span>.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> lqr</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> quadcopter_dynamics </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> build_matrices</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> C</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> D </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> build_matrices</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)"># A: 12×12, B: 12×4</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> C</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> D</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">f"Estável: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string-interpolation interpolation">planta</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation">is_stable</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)"># False — integradores na posição</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="projeto-lqr-mimo">Projeto LQR MIMO<a href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr#projeto-lqr-mimo" class="hash-link" aria-label="Link direto para Projeto LQR MIMO" title="Link direto para Projeto LQR MIMO">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Q </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">diag</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token number" style="color:rgb(181, 206, 168)">10.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">10.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">20.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)"># x, y, z</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">     </span><span class="token comment" style="color:rgb(106, 153, 85)"># ẋ, ẏ, ż</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token number" style="color:rgb(181, 206, 168)">20.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">20.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">10.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)"># φ, θ, ψ</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token number" style="color:rgb(181, 206, 168)">2.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">2.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">2.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">     </span><span class="token comment" style="color:rgb(106, 153, 85)"># p, q, r</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">R </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">eye</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">4</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">K</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> P </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> lqr</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Q</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> R</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">f"Shape de K: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string-interpolation interpolation">K</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation">shape</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">   </span><span class="token comment" style="color:rgb(106, 153, 85)"># (4, 12)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">A_cl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> A </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain"> B @ K</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">f"Estável em malha fechada: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string-interpolation interpolation">np</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation builtin" style="color:rgb(86, 156, 214)">all</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation interpolation">np</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation">real</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation interpolation">np</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation">linalg</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token string-interpolation interpolation">eigvals</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation interpolation">A_cl</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token string-interpolation interpolation"> </span><span class="token string-interpolation interpolation operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token string-interpolation interpolation"> </span><span class="token string-interpolation interpolation number" style="color:rgb(181, 206, 168)">0</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="neural-lqr-residual">Neural-LQR Residual<a href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr#neural-lqr-residual" class="hash-link" aria-label="Link direto para Neural-LQR Residual" title="Link direto para Neural-LQR Residual">​</a></h2>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>u</mi><mo>=</mo><mo>−</mo><mi>K</mi><mi>e</mi><mo>+</mo><munder><munder><mrow><mtext>MLP</mtext><mo stretchy="false">(</mo><mi>e</mi><mo stretchy="false">)</mo></mrow><mo stretchy="true">⏟</mo></munder><mtext>residual</mtext></munder></mrow><annotation encoding="application/x-tex">u = -Ke + \underbrace{\text{MLP}(e)}_{\text{residual}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">u</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.0715em">K</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:2.3341em;vertical-align:-1.5841em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.75em"><span style="top:-1.4159em"><span class="pstrut" style="height:3em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">residual</span></span></span></span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.75em"><span class="svg-align" style="top:-2.102em"><span class="pstrut" style="height:3em"></span><span class="stretchy" style="height:0.548em;min-width:1.6em"><span class="brace-left" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMinYMin slice"><path d="M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z"></path></svg></span><span class="brace-center" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMidYMin slice"><path d="M199572 214
c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z"></path></svg></span><span class="brace-right" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMaxYMin slice"><path d="M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z"></path></svg></span></span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord text"><span class="mord">MLP</span></span><span class="mopen">(</span><span class="mord mathnormal">e</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.898em"><span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5841em"><span></span></span></span></span></span></span></span></span></span>
<p>A camada de saída do MLP é <strong>inicializada com zeros</strong> — na inicialização, o
controlador é <em>exatamente</em> LQR. O residual adiciona correção apenas após treinamento,
garantindo estabilidade provável desde o início.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> torch</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">nn </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> nn</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MLPResidual</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Module</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">__init__</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_estados</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">int</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_entradas</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">int</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token builtin" style="color:rgb(86, 156, 214)">super</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">__init__</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">net </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Sequential</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Linear</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">n_estados</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">64</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Tanh</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Linear</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">64</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">64</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">        nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Tanh</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Linear</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">64</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_entradas</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">init</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros_</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">net</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">weight</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        nn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">init</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros_</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">net</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">bias</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">forward</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Tensor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Tensor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">net</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">mlp </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> MLPResidual</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">n_estados</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">12</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> n_entradas</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token number" style="color:rgb(181, 206, 168)">4</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">lei_neural_lqr</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">with</span><span class="token plain"> torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">no_grad</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        e_t </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">tensor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dtype</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">torch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">float32</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">K @ e</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">+</span><span class="token plain"> mlp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">e_t</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">numpy</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="simulação-em-malha-fechada">Simulação em malha fechada<a href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr#simula%C3%A7%C3%A3o-em-malha-fechada" class="hash-link" aria-label="Link direto para Simulação em malha fechada" title="Link direto para Simulação em malha fechada">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">agents </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SyncMode</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">broker </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> MessageBroker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Topic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> SharedMemoryBackend</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">dt </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.02</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta_d </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> c2d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">planta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">dt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">topics </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">Topic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/estado"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> shape</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">12</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Topic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/u"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> shape</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">4</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">broker </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> MessageBroker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">for</span><span class="token plain"> t </span><span class="token keyword" style="color:rgb(86, 156, 214)">in</span><span class="token plain"> topics</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    broker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">declare_topic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">t</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">broker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">add_backend</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SharedMemoryBackend</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"quad_bus"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> topics</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> create</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">ref </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1.5</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ndarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> lei_neural_lqr</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">ref </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain"> y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">sync </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> SyncEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">SyncMode</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">LOCK_STEP</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">dt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">PlantAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"quad"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">None</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           channel_y</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/estado"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> channel_u</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/u"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> broker</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">broker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">False</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">ControllerAgent</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"ctrl"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> lei</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">None</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sync</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                channel_y</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/estado"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> channel_u</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"quad/u"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> broker</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">broker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">start</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">blocking</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">broker</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">close</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="resultados">Resultados<a href="https://synapsys-lab.github.io/synapsys/pt/blog/quadcopter-mimo-neural-lqr#resultados" class="hash-link" aria-label="Link direto para Resultados" title="Link direto para Resultados">​</a></h2>
<div align="center"><p><img decoding="async" loading="lazy" src="https://raw.githubusercontent.com/synapsys-lab/synapsys/main/website/static/img/examples/06_quadcopter_telemetry.gif" alt="Telemetria do Quadrotor" class="img_ev3q"></p></div>
<ul>
<li><strong>Erro de posição</strong> &lt; 0,08 m RMS após a primeira órbita</li>
<li><strong>Ângulos de Euler</strong> dentro de ±5° durante manobras agressivas</li>
<li><strong>Entradas de controle</strong> suaves — o custo do atuador em <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi></mrow><annotation encoding="application/x-tex">R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.0077em">R</span></span></span></span> funcionou</li>
</ul>
<p>O código completo está em
<a href="https://github.com/synapsys-lab/synapsys/tree/main/examples/advanced/06_quadcopter_mimo" target="_blank" rel="noopener noreferrer"><code>examples/advanced/06_quadcopter_mimo/</code></a>.</p>]]></content>
        <author>
            <name>Oséias D. Farias</name>
            <uri>https://oseiasdfarias.github.io</uri>
        </author>
        <category label="Artigo" term="Artigo"/>
        <category label="Research" term="Research"/>
        <category label="MIMO" term="MIMO"/>
        <category label="LQR" term="LQR"/>
        <category label="Neural-LQR" term="Neural-LQR"/>
        <category label="Simulation" term="Simulation"/>
        <category label="Python" term="Python"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Estabilizando um Pêndulo Invertido com LQR]]></title>
        <id>https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr</id>
        <link href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Um guia completo: derive o modelo linearizado em espaço de estados de um pêndulo invertido, projete um controlador LQR, simule a resposta em malha fechada e discretize para deployment embarcado — tudo em Python com Synapsys.
]]></summary>
        <content type="html"><![CDATA[<p>O pêndulo invertido é o benchmark canônico do controle não-linear — instável, simples
o suficiente para modelar analiticamente, mas rico o suficiente para revelar todo o
fluxo de projeto LQR. Este post deriva o modelo linearizado a partir da física e mostra
como estabilizá-lo com Synapsys em poucas dezenas de linhas de Python.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="física-e-linearização">Física e linearização<a href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr#f%C3%ADsica-e-lineariza%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para Física e linearização" title="Link direto para Física e linearização">​</a></h2>
<p>Uma haste rígida de massa <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span> e comprimento <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>L</mi></mrow><annotation encoding="application/x-tex">L</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">L</span></span></span></span> é articulada em um carrinho.
Seja <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>θ</mi></mrow><annotation encoding="application/x-tex">\theta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span></span></span></span> o ângulo em relação à vertical. Linearizando em torno de <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>θ</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\theta = 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">0</span></span></span></span>:</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mover accent="true"><mi>θ</mi><mo>¨</mo></mover><mo>=</mo><mfrac><mi>g</mi><mi>L</mi></mfrac><mi>θ</mi><mo>−</mo><mfrac><mn>1</mn><mrow><mi>m</mi><msup><mi>L</mi><mn>2</mn></msup></mrow></mfrac><mi>u</mi></mrow><annotation encoding="application/x-tex">\ddot{\theta} = \frac{g}{L}\theta - \frac{1}{mL^2}u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9313em"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9313em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span></span><span style="top:-3.2634em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.1667em"><span class="mord">¨</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em"><span style="top:-2.314em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord mathnormal">L</span></span></span><span style="top:-3.23em"><span class="pstrut" style="height:3em"></span><span class="frac-line" style="border-bottom-width:0.04em"></span></span><span style="top:-3.677em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:2.0074em;vertical-align:-0.686em"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em"><span style="top:-2.314em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em"><span style="top:-2.989em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.23em"><span class="pstrut" style="height:3em"></span><span class="frac-line" style="border-bottom-width:0.04em"></span></span><span style="top:-3.677em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathnormal">u</span></span></span></span></span>
<p>Escolhendo o vetor de estados <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mo stretchy="false">[</mo><mi>θ</mi><mo separator="true">,</mo><mtext>  </mtext><mover accent="true"><mi>θ</mi><mo>˙</mo></mover><msup><mo stretchy="false">]</mo><mi mathvariant="normal">⊤</mi></msup></mrow><annotation encoding="application/x-tex">x = [\theta,\; \dot{\theta}]^\top</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.1813em;vertical-align:-0.25em"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9313em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.0278em">θ</span></span><span style="top:-3.2634em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.0556em"><span class="mord">˙</span></span></span></span></span></span></span><span class="mclose"><span class="mclose">]</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span></span></span></span> e a força do carrinho <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">u</span></span></span></span>:</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mover accent="true"><mi>x</mi><mo>˙</mo></mover><mo>=</mo><munder><munder><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi><mi mathvariant="normal">/</mi><mi>L</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mo stretchy="true">⏟</mo></munder><mi>A</mi></munder><mtext> </mtext><mi>x</mi><mo>+</mo><munder><munder><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mn>1</mn><mi mathvariant="normal">/</mi><mo stretchy="false">(</mo><mi>m</mi><msup><mi>L</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mo stretchy="true">⏟</mo></munder><mi>B</mi></munder><mtext> </mtext><mi>u</mi><mo separator="true">,</mo><mspace width="2em"></mspace><mi>y</mi><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mn>0</mn></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">\dot{x} = \underbrace{\begin{bmatrix}0 &amp; 1 \\ g/L &amp; 0\end{bmatrix}}_{A}\, x
         + \underbrace{\begin{bmatrix}0 \\ -1/(mL^2)\end{bmatrix}}_{B}\, u,
\qquad
y = \begin{bmatrix}1 &amp; 0\end{bmatrix} x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6679em"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal">x</span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.1111em"><span class="mord">˙</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:3.7264em;vertical-align:-2.2764em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span style="top:-1.1736em"><span class="pstrut" style="height:3.45em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">A</span></span></span></span><span style="top:-3.45em"><span class="pstrut" style="height:3.45em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span class="svg-align" style="top:-1.852em"><span class="pstrut" style="height:3.45em"></span><span class="stretchy" style="height:0.548em;min-width:1.6em"><span class="brace-left" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMinYMin slice"><path d="M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z"></path></svg></span><span class="brace-center" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMidYMin slice"><path d="M199572 214
c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z"></path></svg></span><span class="brace-right" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMaxYMin slice"><path d="M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z"></path></svg></span></span></span><span style="top:-3.45em"><span class="pstrut" style="height:3.45em"></span><span class="mord"><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span style="top:-3.61em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em">g</span><span class="mord">/</span><span class="mord mathnormal">L</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em"></span><span class="arraycolsep" style="width:0.5em"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span style="top:-3.61em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">1</span></span></span><span style="top:-2.41em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size3">]</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.598em"><span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2764em"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:3.7264em;vertical-align:-2.2764em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span style="top:-1.1736em"><span class="pstrut" style="height:3.45em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0502em">B</span></span></span></span><span style="top:-3.45em"><span class="pstrut" style="height:3.45em"></span><span class="minner munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span class="svg-align" style="top:-1.852em"><span class="pstrut" style="height:3.45em"></span><span class="stretchy" style="height:0.548em;min-width:1.6em"><span class="brace-left" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMinYMin slice"><path d="M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z"></path></svg></span><span class="brace-center" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMidYMin slice"><path d="M199572 214
c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z"></path></svg></span><span class="brace-right" style="height:0.548em"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMaxYMin slice"><path d="M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z"></path></svg></span></span></span><span style="top:-3.45em"><span class="pstrut" style="height:3.45em"></span><span class="mord"><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em"><span style="top:-3.61em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">0</span></span></span><span style="top:-2.41em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">−</span><span class="mord">1/</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size3">]</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.598em"><span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.2764em"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:2em"></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.0359em">y</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em"></span><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size1">[</span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.85em"><span style="top:-3.01em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35em"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em"></span><span class="arraycolsep" style="width:0.5em"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.85em"><span style="top:-3.01em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35em"><span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size1">]</span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">x</span></span></span></span></span>
<p>Para <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi><mo>=</mo><mn>0</mn><mo separator="true">,</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">m = 0,5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">5</span></span></span></span> kg, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>L</mi><mo>=</mo><mn>0</mn><mo separator="true">,</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">L = 0,3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">L</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">3</span></span></span></span> m, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mn>9</mn><mo separator="true">,</mo><mn>81</mn></mrow><annotation encoding="application/x-tex">g = 9,81</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.0359em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em"></span><span class="mord">9</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">81</span></span></span></span> m/s²:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> np</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ss</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">m</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> L</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> g </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.5</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.3</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">9.81</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">A </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">      </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain">   </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">g</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">L</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain">    </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token plain">   </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">B </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token plain">           </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">m</span><span class="token operator" style="color:rgb(212, 212, 212)">*</span><span class="token plain">L</span><span class="token operator" style="color:rgb(212, 212, 212)">**</span><span class="token number" style="color:rgb(181, 206, 168)">2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">C </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">D </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> C</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> D</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">planta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">is_stable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">      </span><span class="token comment" style="color:rgb(106, 153, 85)"># False — polos em ±√(g/L) = ±5,72 rad/s</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="projeto-lqr">Projeto LQR<a href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr#projeto-lqr" class="hash-link" aria-label="Link direto para Projeto LQR" title="Link direto para Projeto LQR">​</a></h2>
<p>O LQR encontra o ganho de realimentação de estados <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.0715em">K</span></span></span></span> que minimiza:</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>J</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi mathvariant="normal">∞</mi></msubsup><mrow><mo fence="true">(</mo><msup><mi>x</mi><mi mathvariant="normal">⊤</mi></msup><mi>Q</mi><mtext> </mtext><mi>x</mi><mo>+</mo><msup><mi>u</mi><mi mathvariant="normal">⊤</mi></msup><mi>R</mi><mtext> </mtext><mi>u</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">J = \int_0^\infty \left(x^\top Q\, x + u^\top R\, u\right)\mathrm{d}t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.0962em">J</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:2.3262em;vertical-align:-0.9119em"></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4143em"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span><span style="top:-3.8129em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">∞</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9119em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size1">(</span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em"><span style="top:-3.113em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span><span class="mord mathnormal">Q</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em"><span style="top:-3.113em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0077em">R</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">u</span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathrm">d</span><span class="mord mathnormal">t</span></span></span></span></span>
<p><strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Q</mi></mrow><annotation encoding="application/x-tex">Q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal">Q</span></span></span></span> grande</strong> penaliza erro de estado (rápido, agressivo). <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi></mrow><annotation encoding="application/x-tex">R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.0077em">R</span></span></span></span> grande</strong> penaliza
esforço de controle (lento, conservador):</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">algorithms </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> lqr</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Q </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">diag</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">100.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">   </span><span class="token comment" style="color:rgb(106, 153, 85)"># penaliza ângulo pesadamente</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">R </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0.1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">K</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> P </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> lqr</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Q</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> R</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">f"K = </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string-interpolation interpolation">K</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token string-interpolation string" style="color:rgb(206, 145, 120)">"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">            </span><span class="token comment" style="color:rgb(106, 153, 85)"># K = [[33.2  5.8]]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">A_cl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> A </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain"> B @ K</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">linalg</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">eigvals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A_cl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">   </span><span class="token comment" style="color:rgb(106, 153, 85)"># autovalores no semiplano esquerdo</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="simulação">Simulação<a href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr#simula%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para Simulação" title="Link direto para Simulação">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> c2d</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> matplotlib</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">pyplot </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> plt</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">cl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> ss</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">A_cl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> C</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> D</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">t </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">linspace</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">3</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">600</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">x0 </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0.2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">       </span><span class="token comment" style="color:rgb(106, 153, 85)"># θ₀ = 0,2 rad (≈ 11°)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">u_zero </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token builtin" style="color:rgb(86, 156, 214)">len</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">t</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">t_out</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> y </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> cl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">simulate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">t</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> u_zero</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> x0</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">x0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">plot</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">t_out</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> y</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">xlabel</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Tempo (s)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">ylabel</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"θ (rad)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Pêndulo Invertido — estabilização LQR de θ₀ = 0,2 rad"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">grid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> plt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">show</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>O ângulo retorna a zero em aproximadamente 1,5 s sem sobressinal.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="discretização-para-deployment-embarcado">Discretização para deployment embarcado<a href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr#discretiza%C3%A7%C3%A3o-para-deployment-embarcado" class="hash-link" aria-label="Link direto para Discretização para deployment embarcado" title="Link direto para Discretização para deployment embarcado">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">dt </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.01</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)"># 100 Hz</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">planta_d </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> c2d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">planta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> dt</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain">dt</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)"># Redesenhar K no tempo discreto</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">K_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> _ </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> lqr</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">A</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">B</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> Q</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> R</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)"># Laço de controle embarcado</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">x </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">zeros</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">for</span><span class="token plain"> _ </span><span class="token keyword" style="color:rgb(86, 156, 214)">in</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(86, 156, 214)">range</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">n_steps</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    u </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">K_d @ x</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    x</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> y </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> planta_d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">evolve</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">x</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="resumo-das-apis">Resumo das APIs<a href="https://synapsys-lab.github.io/synapsys/pt/blog/inverted-pendulum-lqr#resumo-das-apis" class="hash-link" aria-label="Link direto para Resumo das APIs" title="Link direto para Resumo das APIs">​</a></h2>
<table><thead><tr><th>Etapa</th><th>API Synapsys</th></tr></thead><tbody><tr><td>Modelagem</td><td><code>ss(A, B, C, D)</code></td></tr><tr><td>Verificação de estabilidade</td><td><code>planta.is_stable()</code>, <code>planta.poles()</code></td></tr><tr><td>Projeto LQR</td><td><code>lqr(A, B, Q, R)</code> → retorna <code>(K, P)</code></td></tr><tr><td>Simulação</td><td><code>cl.simulate(t, u, x0=x0)</code></td></tr><tr><td>Discretização</td><td><code>c2d(planta, dt=0.01)</code></td></tr><tr><td>Laço embarcado</td><td><code>planta_d.evolve(x, u)</code></td></tr></tbody></table>
<p>O notebook completo está em <a href="https://github.com/synapsys-lab/synapsys/blob/main/examples/quickstart_en.ipynb" target="_blank" rel="noopener noreferrer"><code>examples/quickstart_en.ipynb</code></a>.</p>]]></content>
        <author>
            <name>Oséias D. Farias</name>
            <uri>https://oseiasdfarias.github.io</uri>
        </author>
        <category label="Artigo" term="Artigo"/>
        <category label="Tutorial" term="Tutorial"/>
        <category label="LQR" term="LQR"/>
        <category label="Control Theory" term="Control Theory"/>
        <category label="Simulation" term="Simulation"/>
        <category label="Python" term="Python"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bem-vindo ao Blog Synapsys]]></title>
        <id>https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog</id>
        <link href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog"/>
        <updated>2026-04-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Apresentando o Blog Synapsys — um espaço para tutoriais, insights de pesquisa e guias práticos para engenheiros e pesquisadores de sistemas de controle.
]]></summary>
        <content type="html"><![CDATA[<p>Bem-vindo ao <strong>Blog Synapsys</strong> — um espaço dedicado à engenharia de sistemas de controle,
pesquisa acadêmica e aplicações reais da biblioteca Synapsys.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="o-que-você-encontrará-aqui">O que você encontrará aqui<a href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog#o-que-voc%C3%AA-encontrar%C3%A1-aqui" class="hash-link" aria-label="Link direto para O que você encontrará aqui" title="Link direto para O que você encontrará aqui">​</a></h2>
<p>Este blog é voltado para <strong>pesquisadores, estudantes de pós-graduação e engenheiros</strong> que
trabalham na interseção da teoria clássica de controle com software moderno. Cada post
focará em um problema concreto e mostrará como resolvê-lo do início ao fim com Synapsys.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="séries-planejadas">Séries planejadas<a href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog#s%C3%A9ries-planejadas" class="hash-link" aria-label="Link direto para Séries planejadas" title="Link direto para Séries planejadas">​</a></h3>
<table><thead><tr><th>Série</th><th>O que cobre</th></tr></thead><tbody><tr><td><strong>Teoria de Controle na Prática</strong></td><td>Modelagem, análise e projeto a partir dos primeiros princípios</td></tr><tr><td><strong>Da Simulação ao Hardware</strong></td><td>MIL → SIL → HIL passo a passo</td></tr><tr><td><strong>Controle Aumentado por IA</strong></td><td>Neural-LQR, políticas RL e integração com PyTorch</td></tr><tr><td><strong>Snippets de Pesquisa</strong></td><td>Posts curtos conectando funcionalidades da biblioteca a artigos publicados</td></tr><tr><td><strong>Notas de Release</strong></td><td>O que há de novo em cada versão com exemplos práticos</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="gostinho-rápido-resposta-ao-degrau-em-5-linhas">Gostinho rápido: resposta ao degrau em 5 linhas<a href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog#gostinho-r%C3%A1pido-resposta-ao-degrau-em-5-linhas" class="hash-link" aria-label="Link direto para Gostinho rápido: resposta ao degrau em 5 linhas" title="Link direto para Gostinho rápido: resposta ao degrau em 5 linhas">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> synapsys</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">api </span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> tf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> feedback</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> step</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">G </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> tf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">   </span><span class="token comment" style="color:rgb(106, 153, 85)"># G(s) = 1 / (s² + 2s + 1)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">T </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> feedback</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">G</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">           </span><span class="token comment" style="color:rgb(106, 153, 85)"># realimentação negativa unitária</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">t</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> y </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">T</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">            </span><span class="token comment" style="color:rgb(106, 153, 85)"># simula resposta ao degrau</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>O ganho DC da malha fechada converge para <strong>1,0</strong>, com frequência natural <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ω</mi><mi>n</mi></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\omega_n = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em">ω</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span> rad/s
e <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ζ</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\zeta = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.0738em">ζ</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span> (criticamente amortecido) — como esperado pelo denominador.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Instalar</div><div class="admonitionContent_BuS1"><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">pip </span><span class="token function" style="color:rgb(220, 220, 170)">install</span><span class="token plain"> synapsys   </span><span class="token comment" style="color:rgb(106, 153, 85)"># ou: uv add synapsys</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copiar código para a área de transferência" title="Copiar" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="por-que-synapsys">Por que Synapsys?<a href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog#por-que-synapsys" class="hash-link" aria-label="Link direto para Por que Synapsys?" title="Link direto para Por que Synapsys?">​</a></h2>
<p>A maioria das bibliotecas Python de controle foca em análise. Synapsys adiciona uma
<strong>camada de simulação e deployment</strong>: agentes que rodam em tempo real, um barramento
de comunicação independente de transporte, e uma abstração de hardware que torna
MIL/SIL/HIL uma mudança de configuração, não uma reescrita.</p>
<p>Foi construída junto com pesquisa de pós-graduação em sistemas de controle multi-agente
e é projetada para ser legível, testável e citável academicamente.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fique-conectado">Fique conectado<a href="https://synapsys-lab.github.io/synapsys/pt/blog/welcome-to-synapsys-blog#fique-conectado" class="hash-link" aria-label="Link direto para Fique conectado" title="Link direto para Fique conectado">​</a></h2>
<ul>
<li>Dê um watch no repositório no <a href="https://github.com/synapsys-lab/synapsys" target="_blank" rel="noopener noreferrer">GitHub</a> para novos releases</li>
<li>Abra uma <a href="https://github.com/synapsys-lab/synapsys/issues" target="_blank" rel="noopener noreferrer">issue</a> se tiver um tema que gostaria de ver abordado</li>
</ul>
<p>O primeiro post técnico — <strong>Estabilizando um Pêndulo Invertido com LQR</strong> — vem a seguir.</p>]]></content>
        <author>
            <name>Oséias D. Farias</name>
            <uri>https://oseiasdfarias.github.io</uri>
        </author>
        <category label="Post" term="Post"/>
        <category label="Release" term="Release"/>
        <category label="Python" term="Python"/>
        <category label="Control Theory" term="Control Theory"/>
    </entry>
</feed>