632 lines
No EOL
41 KiB
HTML
632 lines
No EOL
41 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<html class="writer-html5" lang="de" >
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>Mein zweites Programm — CompLib 0.2.3 Dokumentation</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--[if lt IE 9]>
|
|
<script src="../_static/js/html5shiv.min.js"></script>
|
|
<![endif]-->
|
|
|
|
|
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|
<script src="../_static/jquery.js"></script>
|
|
<script src="../_static/underscore.js"></script>
|
|
<script src="../_static/doctools.js"></script>
|
|
<script src="../_static/translations.js"></script>
|
|
|
|
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
|
|
|
|
|
<link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
|
|
<link rel="search" title="Suche" href="../search.html" />
|
|
<link rel="next" title="Mein drittes Programm" href="thridProgram.html" />
|
|
<link rel="prev" title="Mein erstes Programm" href="firstProgram.html" />
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav">
|
|
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search" >
|
|
|
|
|
|
|
|
<a href="../index.html">
|
|
|
|
|
|
|
|
|
|
<img src="../_static/compair-logo-white.svg" class="logo" alt="Logo"/>
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
|
<input type="text" name="q" placeholder="Dokumentation durchsuchen" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul class="current">
|
|
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Erste Schritte</a><ul class="current">
|
|
<li class="toctree-l2"><a class="reference internal" href="wifi.html">WLAN-Verbindung herstellen</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="codeServer.html">Programmierumgebung</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="firstProgram.html">Mein erstes Programm</a></li>
|
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Mein zweites Programm</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="#motoren-ansteuern">Motoren ansteuern</a></li>
|
|
<li class="toctree-l3"><a class="reference internal" href="#gerade-fahren">Gerade fahren</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="#mehr-fahren">Mehr fahren</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="thridProgram.html">Mein drittes Programm</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../software/installation.html">Installationsanweisungen</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../faq.html">FAQ</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../other/usage.html">Beispiele</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../lib/index.html">compLib</a></li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" aria-label="top navigation">
|
|
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="../index.html">CompLib</a>
|
|
|
|
</nav>
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
|
|
<div class="rst-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
|
|
<ul class="wy-breadcrumbs">
|
|
|
|
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
|
|
|
<li><a href="index.html">Erste Schritte</a> »</li>
|
|
|
|
<li>Mein zweites Programm</li>
|
|
|
|
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
<a href="../_sources/gettingStarted/secondProgram.rst.txt" rel="nofollow"> Quelltext anzeigen</a>
|
|
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<div class="section" id="mein-zweites-programm">
|
|
<h1>Mein zweites Programm<a class="headerlink" href="#mein-zweites-programm" title="Link zu dieser Überschrift">¶</a></h1>
|
|
<div class="section" id="motoren-ansteuern">
|
|
<h2>Motoren ansteuern<a class="headerlink" href="#motoren-ansteuern" title="Link zu dieser Überschrift">¶</a></h2>
|
|
<p>Um die Motoren des Roboters zu steuern, müssen wir zunächst das entsprechende Python-Modul am Anfang der Datei importieren. Dann können wir Motor.power(port, power) verwenden, um den Motor zu steuern.
|
|
Dies ist auch ein guter Punkt, um sich mit der Dokumentation vertraut zu machen: Besuchen wir <a class="reference external" href="https://lib.comp-air.at/lib/Motor.html#compLib.Motor.Motor.power">https://lib.comp-air.at/lib/Motor.html#compLib.Motor.Motor.power</a>. Hier werden die beiden relevanten Parameter beschrieben.</p>
|
|
<p>Als Beispiel wollen wir den rechten Motor für fünf Sekunden auf volle Geschwindigkeit setzen:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># motor.py</span>
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
</div>
|
|
<div class="section" id="gerade-fahren">
|
|
<h2>Gerade fahren<a class="headerlink" href="#gerade-fahren" title="Link zu dieser Überschrift">¶</a></h2>
|
|
<p>Um geradeaus zu fahren, müssen wir beide Motoren auf dieselbe Geschwindigkeit einstellen.
|
|
Aber Achtung! Der rechte Motor muss umgedreht werden! Das liegt daran, dass einer nach rechts und einer nach links zeigt, sie sind also technisch gesehen gespiegelt.
|
|
Wenn wir nun diesen Code ausführen, wird der Roboter 5 Sekunden lang vorwärts fahren:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># motor.py</span>
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p><strong>Erläuterung</strong></p>
|
|
<div class="line-block">
|
|
<div class="line">In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">2</span></code> wird das python-Paket <code class="docutils literal notranslate"><span class="pre">time</span></code> importiert. Wir brauchen es später, um auf die Fahrt des Roboters zu warten. Z.B.: <code class="docutils literal notranslate"><span class="pre">time.sleep(5)</span></code></div>
|
|
<div class="line">In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">3</span></code> importieren wir die notwendigen Funktionen aus dem <code class="docutils literal notranslate"><span class="pre">Motor</span></code>-Modul der compLib.</div>
|
|
<div class="line">In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">5</span></code> stellen wir den <code class="docutils literal notranslate"><span class="pre">rechten</span></code> Motor so ein, dass er vorwärts fährt. Da der Motor rückwärts eingebaut ist, müssen wir den Wert auf <code class="docutils literal notranslate"><span class="pre">-100</span></code> setzen.</div>
|
|
<div class="line">In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">6</span></code> stellen wir den <code class="docutils literal notranslate"><span class="pre">linken</span></code> Motor auf Vorwärtsfahrt ein. Hier können wir den Wert <code class="docutils literal notranslate"><span class="pre">100</span></code> verwenden, da der Motor in der richtigen Richtung eingebaut ist.</div>
|
|
<div class="line">In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">7</span></code> müssen wir warten, bis der Roboter die Fahrbefehle tatsächlich ausführt. In diesem Fall warten wir <code class="docutils literal notranslate"><span class="pre">5</span></code> Sekunden lang.</div>
|
|
</div>
|
|
<p>Danach wird das Programm beendet und der Roboter bleibt stehen.</p>
|
|
<div class="section" id="mehr-fahren">
|
|
<h3>Mehr fahren<a class="headerlink" href="#mehr-fahren" title="Link zu dieser Überschrift">¶</a></h3>
|
|
<p>Jetzt ist es Zeit für einige komplexere Bewegungen. Um unseren Code modular und leicht lesbar zu halten, werden wir jede Aktion in eine eigene Funktion packen.</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">4</span></code> definieren wir die Funktion <code class="docutils literal notranslate"><span class="pre">driveForward()</span></code>, die den Roboter mit voller Geschwindigkeit zwei Sekunden vorwärts bewegt.</p>
|
|
<p>Jetzt werden wir eine Funktion für das Rückwärtsfahren definieren:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">9</span></code> haben wir die Funktion <code class="docutils literal notranslate"><span class="pre">driveBackward()</span></code> definiert, die den Roboter zwei Sekunden lang rückwärts fahren lässt.</p>
|
|
<p>Jetzt können wir diese beiden Funktionen aufrufen und vorwärts und dann wieder rückwärts fahren:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">()</span>
|
|
<span class="n">driveBackward</span><span class="p">()</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Wenn wir diesen Code ausführen, sollte der Roboter zunächst zwei Sekunden vorwärts und dann wieder zwei Sekunden rückwärts fahren und ungefähr an der gleichen Position wie beim Start anhalten.</p>
|
|
<p>Zwischen den Zeilen <code class="docutils literal notranslate"><span class="pre">14</span></code> und <code class="docutils literal notranslate"><span class="pre">15</span></code> brauchen wir kein <code class="docutils literal notranslate"><span class="pre">time.sleep(2)</span></code>, da der sleep-Befehl bereits in den Funktionen integriert ist.</p>
|
|
<p>Jetzt wollen wir, dass der Roboter erst vorwärts fährt, dann zwei Sekunden stillsteht und dann wieder rückwärts in seine Ausgangsposition fährt.</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">()</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">driveBackward</span><span class="p">()</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Wenn wir den obigen Code ausführen, bleibt der Roboter nicht zwei Sekunden lang stehen, sondern fährt nach der Funktion <code class="docutils literal notranslate"><span class="pre">driveForward()</span></code> noch zwei Sekunden lang weiter. Warum passiert das? Um das zu verstehen, müssen wir wie der Roboter denken!</p>
|
|
<p><strong>Erläuterung</strong></p>
|
|
<div class="line-block">
|
|
<div class="line">1. (<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">14</span></code>) Die Funktion Vorwärtsfahrt wird aufgerufen</div>
|
|
<div class="line-block">
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">5</span></code>) Motor 1 wird auf -100 gesetzt</div>
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">6</span></code>) Motor 4 wird auf 100 gesetzt</div>
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">7</span></code>) Zwei Sekunden warten und Motor 1 mit der Geschwindigkeit -100 und Motor 4 mit der Geschwindigkeit 100 bewegen (z.B. vorwärts fahren)</div>
|
|
</div>
|
|
</div>
|
|
<div class="line-block">
|
|
<div class="line">2. (<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">15</span></code>) Zwei Sekunden warten, die Motoren sind immer noch auf -100 und 100 eingestellt, also fahren wir weiter vorwärts</div>
|
|
</div>
|
|
<div class="line-block">
|
|
<div class="line">3. (<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">16</span></code>) Die Funktion Rückwärtsfahren wird aufgerufen</div>
|
|
<div class="line-block">
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">5</span></code>) Motor 1 wird auf 100 gesetzt</div>
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">6</span></code>) Motor 4 wird auf -100 gesetzt</div>
|
|
<div class="line">(<code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">7</span></code>) Warte zwei Sekunden und bewege Motor 1 mit der Geschwindigkeit 100 und Motor 4 mit der Geschwindigkeit -100 (z.B. Rückwärtsfahren)</div>
|
|
</div>
|
|
</div>
|
|
<div class="line-block">
|
|
<div class="line">4. Das Programm ist beendet, und alle Motordrehzahlen werden auf 0 gesetzt.</div>
|
|
</div>
|
|
<p>Wir sehen also, dass wir die Motoren nach der Vorwärts- oder Rückwärtsfunktion wieder auf Geschwindigkeit <code class="docutils literal notranslate"><span class="pre">0</span></code> setzen müssen, wenn wir den Roboter anhalten wollen. Für diesen Anwendungsfall können wir eine neue Funktion <code class="docutils literal notranslate"><span class="pre">stopMotors()</span></code> schreiben, die die Geschwindigkeit für Motor <code class="docutils literal notranslate"><span class="pre">0</span></code> und <code class="docutils literal notranslate"><span class="pre">3</span></code> auf <code class="docutils literal notranslate"><span class="pre">0</span></code> setzt:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">stopMotors</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Wenn wir nun vorwärts fahren, dann zwei Sekunden warten und dann wieder rückwärts fahren wollen, können wir die Funktionen wie folgt aufrufen:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">stopMotors</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">()</span>
|
|
<span class="n">stopMotors</span><span class="p">()</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">driveBackward</span><span class="p">()</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Und endlich bekommen wir die Bewegung, die wir uns wünschen.</p>
|
|
<p><strong>More Optimizations</strong></p>
|
|
<p>Während der Code für sehr einfache Bewegungen funktioniert, wollen wir normalerweise nicht, dass unsere Funktionen entscheiden, wie lange wir vorwärts fahren. Vielleicht müssen wir manchmal vier Sekunden vorwärts fahren, und manchmal nur eine Sekunde.</p>
|
|
<p>Nehmen wir an, wir wollen vier Sekunden vorwärts fahren. Wir wissen, dass <code class="docutils literal notranslate"><span class="pre">driveForward()</span></code> den Roboter zwei Sekunden vorwärts bewegen wird. Also können wir die Funktion einfach zwei Mal aufrufen!</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">()</span>
|
|
<span class="n">driveForward</span><span class="p">()</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Was aber, wenn wir uns nur eine Sekunde vorwärts bewegen wollen? Oder vielleicht drei Sekunden? Mit der Funktion <code class="docutils literal notranslate"><span class="pre">driveForward()</span></code> können wir das im Moment nicht machen.</p>
|
|
<p>Stattdessen werden wir die Funktion so umschreiben, dass sie einen Parameter akzeptiert, der die Zeit angibt.</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">(</span><span class="n">seconds</span><span class="p">):</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>Und mit dieser neuen Funktion können wir drei Sekunden lang vorwärts fahren.
|
|
Wie funktioniert das nun?</p>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">4</span></code> definieren wir die Funktion <code class="docutils literal notranslate"><span class="pre">driveForward</span></code> und sagen, dass sie einen Parameter <code class="docutils literal notranslate"><span class="pre">seconds</span></code> benötigt. Dieser Parameter ist im Grunde eine Variable, die wir uns zum Zeitpunkt der Definition wie einen Platzhalter vorstellen können. Wenn wir die Funktion definieren, wissen wir noch nicht, welchen Wert <code class="docutils literal notranslate"><span class="pre">seconds</span></code> haben wird.</p>
|
|
<p>Später in <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">9</span></code>, wenn wir die Funktion aufrufen, übergeben wir den Wert <code class="docutils literal notranslate"><span class="pre">3</span></code> an die Funktion und unser Platzhalter <code class="docutils literal notranslate"><span class="pre">seconds</span></code> wird den Wert <code class="docutils literal notranslate"><span class="pre">3</span></code> haben. Der Roboter wird also drei Sekunden vorwärts fahren.</p>
|
|
<p>Vielleicht wollen wir auch, dass der Roboter mit verschiedenen Geschwindigkeiten fahren kann. Wir können also einen weiteren Parameter mit dem Namen <code class="docutils literal notranslate"><span class="pre">speed</span></code> anlegen. Dann werden wir ein Programm schreiben, das den Roboter drei Sekunden mit voller Geschwindigkeit und dann fünf Sekunden mit halber Geschwindigkeit fahren lässt.</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">(</span><span class="n">seconds</span><span class="p">,</span> <span class="n">speed</span><span class="p">):</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">speed</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">speed</span><span class="p">)</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">driveForward</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">9</span></code> wird der Platzhalter <code class="docutils literal notranslate"><span class="pre">seconds</span></code> auf <code class="docutils literal notranslate"><span class="pre">3</span></code> und die <code class="docutils literal notranslate"><span class="pre">Geschwindigkeit</span></code> auf <code class="docutils literal notranslate"><span class="pre">100</span></code> gesetzt.
|
|
In <code class="docutils literal notranslate"><span class="pre">Zeile</span> <span class="pre">10</span></code> wird der Platzhalter <code class="docutils literal notranslate"><span class="pre">seconds</span></code> auf <code class="docutils literal notranslate"><span class="pre">5</span></code> und die <code class="docutils literal notranslate"><span class="pre">Geschwindigkeit</span></code> auf <code class="docutils literal notranslate"><span class="pre">50</span></code> gesetzt.</p>
|
|
<p><strong>Bewährte Praktiken</strong>
|
|
Nun werden wir uns einige weitere Optimierungen und bewährte Verfahren ansehen.</p>
|
|
<p><strong>1. Wir sollten den Schlafbefehl nicht in die Fahrfunktion einbauen.</strong></p>
|
|
<p>Wir haben das bis jetzt getan, um ein Gefühl dafür zu bekommen, wie Funktionen funktionieren, und der Einfachheit halber. Später, wenn Sie anfangen, komplexere Programme zu schreiben, sollten Sie dies vermeiden.</p>
|
|
<p>Das Beispiel von oben, in dem wir vorwärts und rückwärts gefahren sind und zwei Sekunden gewartet haben, sollte also wie folgt aussehen:</p>
|
|
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">compLib.Motor</span> <span class="kn">import</span> <span class="n">Motor</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveForward</span><span class="p">(</span><span class="n">speed</span><span class="p">):</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">speed</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">speed</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">driveBackward</span><span class="p">(</span><span class="n">speed</span><span class="p">):</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">speed</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="n">speed</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">stopMotors</span><span class="p">():</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">Motor</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
|
|
<span class="n">driveForward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span> <span class="c1"># Set the motors to forward</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># Let the robot drive for 2 seconds</span>
|
|
<span class="n">stopMotors</span><span class="p">()</span> <span class="c1"># Now stop the robot</span>
|
|
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># Wait another 2 seconds, robot is not moving</span>
|
|
|
|
<span class="n">driveBackward</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span> <span class="c1"># Now set the motors to a backwards speed</span>
|
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># Let the robot continue driving for 2 seconds</span>
|
|
<span class="n">stopMotors</span><span class="p">()</span> <span class="c1"># And finally stop it again</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p><strong>Warum ist das so wichtig?</strong></p>
|
|
<p>Normalerweise schlafen wir nicht sehr viel und führen in dieser Zeit andere Verarbeitungen durch. Zum Beispiel könnten wir ein Bild von der Kamera verarbeiten oder die IR-Sensoren auslesen. Wenn wir also eine Funktion wie <code class="docutils literal notranslate"><span class="pre">driveForward()</span></code> aufrufen, können wir davon ausgehen, dass sie im Hintergrund abläuft und wir andere Aufgaben erledigen, während sich der Roboter bewegt, anstatt nur darauf zu warten, dass er fertig wird.</p>
|
|
<p><strong>2. Fahren Sie nicht zu langsam.</strong></p>
|
|
<p>Wenn du die Fahrgeschwindigkeit auf eine sehr kleine Zahl einstellst, kann es sein, dass sich der Roboter gar nicht mehr bewegt, weil die Motoren eine bestimmte Menge an Energie benötigen, um den Roboter überhaupt zu bewegen.</p>
|
|
<p><strong>3. Fahren Sie nicht zu schnell.</strong></p>
|
|
<p>Wenn du die Fahrgeschwindigkeit auf eine sehr hohe Zahl einstellst (z. B. <code class="docutils literal notranslate"><span class="pre">100</span></code>), könnte dein Roboter zu schnell für seine Sensoren sein. Dies wird später wichtig sein, wenn wir versuchen, eine schwarze Linie zu erkennen, aber zu schnell über sie fahren.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
|
|
|
<a href="thridProgram.html" class="btn btn-neutral float-right" title="Mein drittes Programm" accesskey="n" rel="next">Weiter <span class="fa fa-arrow-circle-right"></span></a>
|
|
|
|
|
|
<a href="firstProgram.html" class="btn btn-neutral float-left" title="Mein erstes Programm" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Zurück</a>
|
|
|
|
</div>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
|
|
© Copyright 2022, Verein zur Förderung von Wissenschaft und Technik an Schulen (F-WuTS)
|
|
|
|
</p>
|
|
</div>
|
|
|
|
|
|
|
|
Erstellt mit <a href="http://sphinx-doc.org/">Sphinx</a> mit einem
|
|
|
|
<a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
|
|
|
|
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.Navigation.enable(true);
|
|
});
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |