436 lines
14 KiB
Plaintext
436 lines
14 KiB
Plaintext
# SOME DESCRIPTIVE TITLE
|
|
# Copyright (C) YEAR Free Software Foundation, Inc.
|
|
# This file is distributed under the same license as the PACKAGE package.
|
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
msgid ""
|
|
msgstr ""
|
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
"Report-Msgid-Bugs-To: \n"
|
|
"POT-Creation-Date: DATE\n"
|
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
"Language: de\n"
|
|
"MIME-Version: 1.0\n"
|
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
"Content-Transfer-Encoding: 8bit\n"
|
|
"X-Generator: Translate Toolkit 1.11.0\n"
|
|
|
|
#. type: Title-text
|
|
#: ../scene.txt:1
|
|
#, no-wrap
|
|
msgid "Remote control #4"
|
|
msgstr "Fernsteuerung 4"
|
|
|
|
#. type: Resume-text
|
|
#: ../scene.txt:2
|
|
#, no-wrap
|
|
msgid "Remote control a bot without using an information exchange post by defining a class for the orders."
|
|
msgstr "Definieren Sie eine neue Klasse, um einen Roboter fernzusteuern."
|
|
|
|
#. type: ScriptName-text
|
|
#: ../scene.txt:3
|
|
#, no-wrap
|
|
msgid "Remote4"
|
|
msgstr "Steuerung4"
|
|
|
|
#. type: \b; header
|
|
#: ../help/help.E.txt:1
|
|
#, no-wrap
|
|
msgid "Exercise"
|
|
msgstr ""
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:2
|
|
#, no-wrap
|
|
msgid "Remote control a slave robot without using an <a object|exchange>information exchange post</a>. The robot should pass over the 6 blue crosses. You must use a <code><a cbot|static>static</a></code> variable to pass the orders to the slave bot."
|
|
msgstr "Steuern Sie einen Slave-Roboter ohne Verwendung eines <a object|exchange>Infoservers</a> fern. Der Roboter muss alle 6 blauen Kreuze passieren. Sie müssen eine <code><a cbot|static>statische</a></code> Variable verwenden, um den Slave Befehle zu erteilen."
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:4
|
|
#, no-wrap
|
|
msgid "The two main actors of this exercise are:"
|
|
msgstr "Die beiden Hauptakteure dieser Übung sind:"
|
|
|
|
#. type: Bullet: '1)'
|
|
#: ../help/help.E.txt:5
|
|
#, no-wrap
|
|
msgid "The <a object|botgr>wheeled grabber</a> without an energy pack and therefore immobile. This is the master you should program so it will transmit orders to the slave."
|
|
msgstr "Der <a object|botgr>Radtransporter</a>, der keine Batterie hat und dadurch unbeweglich ist. Dies ist der Master den Sie so programmieren sollen, dass er Befehle zum Slave sendet."
|
|
|
|
#. type: Bullet: '2)'
|
|
#: ../help/help.E.txt:6
|
|
#, no-wrap
|
|
msgid "The slave <a object|bottr>practice bot</a> which is already programmed and just waits for orders from the master."
|
|
msgstr "Der Slave-<a object|bottr>Übungsroboter</a> ist schon mit einer Programmierung versehen und wartet auf Befehle vom Master."
|
|
|
|
#. type: \b; header
|
|
#: ../help/help.E.txt:8
|
|
#, no-wrap
|
|
msgid "The slave"
|
|
msgstr "Der Slave"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:9
|
|
#, no-wrap
|
|
msgid "First of all we must understand how the program of the slave works. The <a cbot|class>class</a> <code>order</code> contains two members: <code>m_type</code> is the order to execute (move or turn) and <code>m_param</code> is the distance to move or the rotation angle:"
|
|
msgstr "Zu allererst müssen wir klären, wie der Slave funktioniert. Die <a cbot|class>Klasse</a> <code>order</code> besitzt zwei Variablen: <code>m_type</code> ist der auszuführende Befehl (bewegen oder drehen) und <code>m_param</code> ist die Entfernung oder der Drehungswinkel:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:11
|
|
#, no-wrap
|
|
msgid "<c/><s/><a cbot|public>public</a> <a cbot|class>class</a> order"
|
|
msgstr "<c/><s/><a cbot|public>public</a> <a cbot|class>class</a> order"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:12
|
|
#, no-wrap
|
|
msgid ""
|
|
"{\n"
|
|
"\t<a cbot|int>int</a> m_type = <a cbot|nan>nan</a>;\n"
|
|
"\t<a cbot|float>float</a> m_param;\n"
|
|
"}"
|
|
msgstr ""
|
|
"{\n"
|
|
"\t<a cbot|int>int</a> m_type = <a cbot|nan>nan</a>;\n"
|
|
"\t<a cbot|float>float</a> m_param;\n"
|
|
"}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:17
|
|
#, no-wrap
|
|
msgid "A second <a cbot|class>class</a> <code>exchange</code> contains the mechanism for exchanging the orders. We declare a <code><a cbot|static>static</a></code> class member <code>m_order</code> which will contain the order to be executed. The word <code>static</code> insures that the member <code>m_order</code> is shared between all instances of the <a cbot|class>class</a> exchange."
|
|
msgstr "Eine zweite <a cbot|class>Klasse</a>, <code>exchange</code>, enthält die Mechanismen zum Austausch von Befehlen. Wir deklarieren eine <code><a cbot|static>statische</a></code> Klassenvariable <code>m_order</code>, die den auszuführenden Befehl enthalten wird. Das Wort <code>static</code> stellt sicher, dass auf die Variable <code>m_order</code> von allen Instanzen der <a cbot|class>Klasse</a> <code>exchange</code> zugegriffen werden kann."
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:19
|
|
#, no-wrap
|
|
msgid "<c/><s/><a cbot|public>public</a> <a cbot|class>class</a> exchange"
|
|
msgstr "<c/><s/><a cbot|public>public</a> <a cbot|class>class</a> exchange"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:20
|
|
#, no-wrap
|
|
msgid ""
|
|
"{\n"
|
|
"\t<a cbot|static>static</a> <a cbot|private>private</a> order m_order = new order;"
|
|
msgstr ""
|
|
"{\n"
|
|
"\t<a cbot|static>static</a> <a cbot|private>private</a> order m_order = new order;"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:23
|
|
#, no-wrap
|
|
msgid "<n/>The <code>put</code> method will be used by the master robot for transmitting an order. As long as <code>m_order</code> is different from <code><a cbot|nan>nan</a></code>, the slave has not finished the order and the <code>put</code> method will return <code>false</code> and will do nothing:"
|
|
msgstr "<n/>Die Methode <code>put</code> wird vom Master dazu verwendet, Befehle zu übermitteln. Solange <code>m_order</code> nicht <code><a cbot|nan>nan</a></code> ist, hat der Slave seinen Befehl noch nicht abgearbeitet und die Methode <code>put</code> gibt <code>false</code> zurück und tut sonst nichts:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:25
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t<a cbot|synchro>synchronized</a> <a cbot|bool>bool</a> put(order a)"
|
|
msgstr "<c/><s/>\t<a cbot|synchro>synchronized</a> <a cbot|bool>bool</a> put(order a)"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:26
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t{\n"
|
|
"\t\tif ( m_order.m_type == nan )\n"
|
|
"\t\t{\n"
|
|
"\t\t\tm_order = a;\n"
|
|
"\t\t\treturn true;\n"
|
|
"\t\t}\n"
|
|
"\t\telse\n"
|
|
"\t\t{\n"
|
|
"\t\t\treturn false;\n"
|
|
"\t\t}\n"
|
|
"\t}"
|
|
msgstr ""
|
|
"\t{\n"
|
|
"\t\tif ( m_order.m_type == nan )\n"
|
|
"\t\t{\n"
|
|
"\t\t\tm_order = a;\n"
|
|
"\t\t\treturn true;\n"
|
|
"\t\t}\n"
|
|
"\t\telse\n"
|
|
"\t\t{\n"
|
|
"\t\t\treturn false;\n"
|
|
"\t\t}\n"
|
|
"\t}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:38
|
|
#, no-wrap
|
|
msgid "Another method <code>get</code> will be used by the slave to retrieve the orders. This method returns the order to be executed:"
|
|
msgstr "Eine andere Methode, <code>get</code>, wird vom Slave dazu benutzt, Befehle abzuholen. Diese Methode gibt den Befehl zurück, der abgearbeitet werden soll:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:40
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t<a cbot|synchro>synchronized</a> order get()"
|
|
msgstr "<c/><s/>\t<a cbot|synchro>synchronized</a> order get()"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:41
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t{\n"
|
|
"\t\treturn m_order;\n"
|
|
"\t}"
|
|
msgstr ""
|
|
"\t{\n"
|
|
"\t\treturn m_order;\n"
|
|
"\t}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:45
|
|
#, no-wrap
|
|
msgid "A third method <code>delete</code> will be used by the slave to indicate that the order has been executed:"
|
|
msgstr "Eine dritte Methode, <code>delete</code>, verwendet der Slave, um anzuzeigen, dass er den Befehl ausgeführt hat:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:47
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t<a cbot|synchro>synchronized</a> void delete()"
|
|
msgstr "<c/><s/>\t<a cbot|synchro>synchronized</a> void delete()"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:48
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t{\n"
|
|
"\t\tm_order.m_type = nan;\n"
|
|
"\t}\n"
|
|
"}"
|
|
msgstr ""
|
|
"\t{\n"
|
|
"\t\tm_order.m_type = nan;\n"
|
|
"\t}\n"
|
|
"}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:53
|
|
#, no-wrap
|
|
msgid "The main program of the slave contains an instance of the class <code>exchange</code> called <code>list</code>. We put () after the word <code>list</code> in order to create an instance of the class <code>exchange</code>."
|
|
msgstr "Das Hauptprogramm des Slaves enthält eine Instanz der Klasse <code>exchange</code> namens <code>list</code>. Wir setzen Klammern () hinter das Wort <code>list</code>, um eine Instanz der Klasse <code>exchange</code> zu erzeugen."
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:55
|
|
#, no-wrap
|
|
msgid "<c/><s/><a cbot|extern>extern</a> void object::Slave3( )"
|
|
msgstr "<c/><s/><a cbot|extern>extern</a> void object::Slave3( )"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:56
|
|
#, no-wrap
|
|
msgid ""
|
|
"{\n"
|
|
"\texchange list();\n"
|
|
"\torder todo;"
|
|
msgstr ""
|
|
"{\n"
|
|
"\texchange list();\n"
|
|
"\torder todo;"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:60
|
|
#, no-wrap
|
|
msgid "The outer <code>while</code> loop lasts for ever. The inner <code>while</code> loop waits for an order by using the <code>get</code> method of the <code>exchange</code> class. As soon as <code>get</code> returns a value different from <code>nan</code>, the while loop stops."
|
|
msgstr "Die äußere <code>while</code>-Schleife wird nie verlassen. Die innere <code>while</code>-Schleife wartet auf einen Befehl, wobei die Methode <code>get</code> der Klasse <code>exchange</code> verwendet wird. Sobald <code>get</code> einen Wert zurückgibt, der nicht <code>nan</code> ist, wird die Schleife verlassen."
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:62
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t<a cbot|while>while</a> ( true )"
|
|
msgstr "<c/><s/>\t<a cbot|while>while</a> ( true )"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:63
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t{\n"
|
|
"\t\t<a cbot|while>while</a> ( true )\n"
|
|
"\t\t{\n"
|
|
"\t\t\ttodo = list.get();\n"
|
|
"\t\t\tif ( todo.m_type != nan ) break;\n"
|
|
"\t\t\twait(1);\n"
|
|
"\t\t}"
|
|
msgstr ""
|
|
"\t{\n"
|
|
"\t\t<a cbot|while>while</a> ( true )\n"
|
|
"\t\t{\n"
|
|
"\t\t\ttodo = list.get();\n"
|
|
"\t\t\tif ( todo.m_type != nan ) break;\n"
|
|
"\t\t\twait(1);\n"
|
|
"\t\t}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:71
|
|
#, no-wrap
|
|
msgid "Now we have received the order in the <code>todo</code> variable. All we have to do is execute it:"
|
|
msgstr "Nun haben wir einen Befehl empfangen, der in der Variablen <code>todo</code> steht. Wir müssen ihn nur noch ausführen:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:73
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t\tif ( todo.m_type == 1 )"
|
|
msgstr "<c/><s/>\t\tif ( todo.m_type == 1 )"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:74
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t\t{\n"
|
|
"\t\t\tmove(todo.m_param);\n"
|
|
"\t\t}\n"
|
|
"\t\telse if ( todo.m_type == 2 )\n"
|
|
"\t\t{\n"
|
|
"\t\t\tturn(todo.m_param);\n"
|
|
"\t\t}\n"
|
|
"\t\telse\n"
|
|
"\t\t{\n"
|
|
"\t\t\tmessage(\"Unknown order\");\n"
|
|
"\t\t}"
|
|
msgstr ""
|
|
"\t\t{\n"
|
|
"\t\t\tmove(todo.m_param);\n"
|
|
"\t\t}\n"
|
|
"\t\telse if ( todo.m_type == 2 )\n"
|
|
"\t\t{\n"
|
|
"\t\t\tturn(todo.m_param);\n"
|
|
"\t\t}\n"
|
|
"\t\telse\n"
|
|
"\t\t{\n"
|
|
"\t\t\tmessage(\"Unbekannter Befehl\");\n"
|
|
"\t\t}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:86
|
|
#, no-wrap
|
|
msgid "As soon as the execution of the order is finished, we must call the <code>delete</code> method so the master knows that another order can be sent:"
|
|
msgstr "Wenn wir einen Befehl vollständig bearbeitet haben, müssen wir die Methode <code>delete</code> aufrufen, damit der Master weiß, dass er den nächsten Befehl senden kann:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:88
|
|
#, no-wrap
|
|
msgid "<c/><s/>\t\tlist.delete();"
|
|
msgstr "<c/><s/>\t\tlist.delete();"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:89
|
|
#, no-wrap
|
|
msgid ""
|
|
"\t}\n"
|
|
"}"
|
|
msgstr ""
|
|
|
|
#. type: \b; header
|
|
#: ../help/help.E.txt:92
|
|
#, no-wrap
|
|
msgid "The master"
|
|
msgstr "Der Master"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:93
|
|
#, no-wrap
|
|
msgid "In the master we write an function called <code>SendOrder</code> which will send an order to the slave:"
|
|
msgstr "Für den Master schreiben wir eine Funktion namens <code>SendOrder</code>, die einen Befehl zum Slave sendet:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:95
|
|
#, no-wrap
|
|
msgid "<c/><s/>void object::SendOrder(float order, float param)"
|
|
msgstr "<c/><s/>void object::SendOrder(float order, float param)"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:96
|
|
#, no-wrap
|
|
msgid ""
|
|
"{\n"
|
|
"\texchange list();\n"
|
|
"\torder todo();\n"
|
|
"\t\n"
|
|
"\ttodo.m_type = order;\n"
|
|
"\ttodo.m_param = param;\n"
|
|
"\t\n"
|
|
"\twhile ( list.put(todo) == false )\n"
|
|
"\t{\n"
|
|
"\t\twait(1);\n"
|
|
"\t}\n"
|
|
"}"
|
|
msgstr ""
|
|
"{\n"
|
|
"\texchange list();\n"
|
|
"\torder todo();\n"
|
|
"\t\n"
|
|
"\ttodo.m_type = order;\n"
|
|
"\ttodo.m_param = param;\n"
|
|
"\t\n"
|
|
"\twhile ( list.put(todo) == false )\n"
|
|
"\t{\n"
|
|
"\t\twait(1);\n"
|
|
"\t}\n"
|
|
"}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:109
|
|
#, no-wrap
|
|
msgid ""
|
|
"The <code>while</code> loop waits until a pending order has been terminated, that is the slaved has exited from the <code>get</code> method and the <code>delete</code> method has been called.\n"
|
|
"Now the main program of the master is very simple:"
|
|
msgstr ""
|
|
"Die <code>while</code>-Schleife wartet ab, bis ein früher gesendeter Befehl bearbeitet wurde, der Slave also die Methode <code>get</code> verlassen und <code>delete</code> aufgerufen hat.\n"
|
|
"Das Hauptprogramm für den Master ist nun sehr einfach:"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:112
|
|
#, no-wrap
|
|
msgid "<c/><s/>extern void object::Remote4( )"
|
|
msgstr "<c/><s/>extern void object::Remote4( )"
|
|
|
|
#. type: Source code
|
|
#: ../help/help.E.txt:113
|
|
#, no-wrap
|
|
msgid ""
|
|
"{\n"
|
|
"\tSendOrder(1, 20); // move(20);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 20); // move(20);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"\tSendOrder(2,-90); // turn(-90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"}"
|
|
msgstr ""
|
|
"{\n"
|
|
"\tSendOrder(1, 20); // move(20);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 20); // move(20);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"\tSendOrder(2, 90); // turn(90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"\tSendOrder(2,-90); // turn(-90);\n"
|
|
"\tSendOrder(1, 10); // move(10);\n"
|
|
"}"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:125
|
|
#, no-wrap
|
|
msgid "<format key><key help/></format> show these instruction at any time."
|
|
msgstr "Mit <format key><key help/></format> können Sie diese Anweisungen jederzeit einsehen."
|
|
|
|
#. type: \t; header
|
|
#: ../help/help.E.txt:128
|
|
#, no-wrap
|
|
msgid "See also"
|
|
msgstr "Siehe auch"
|
|
|
|
#. type: Plain text
|
|
#: ../help/help.E.txt:129
|
|
#, no-wrap
|
|
msgid "<a command>Controls</a> and <a cbot>programming</a>."
|
|
msgstr "Die <a cbot>CBOT-Sprache</a>, die <a cbot|type>Variablentypen</a> und die <a cbot|category>Kategorien</a>."
|