[[Vorlage(Archiviert)]]

##[[Vorlage(Getestet, Precise )]]
[[Vorlage(Fortgeschritten)]]
{{{#!vorlage Wissen
[:Anwendungen_hinzufügen:Anwendungen hinzufügen]
[:Pakete installieren: Installation von Programmen]
[:Paketquellen freischalten: Bearbeiten von Paketquellen]
[:Terminal: Ein Terminal öffnen]
[:Editor: Einen Editor öffnen]
[:sudo: Root-Rechte]
[:Benutzer_und_Gruppen: Benutzer und Gruppen]
}}}
[[Inhaltsverzeichnis()]]
Nxt-ROS ist eine Erweiterung für das [wikipedia:Robot_Operating_System:Roboter Betriebsystem ROS], das die Steuerung und eine Raumerfassung mithilfe des [:Archiv/Mindstorms:Lego nxt Bausteins] ermöglicht. Außerdem kann man einen mit dem Lego Digital Designer (ldd) designten Roboter [#Arbeiten-mit-ldd importieren], sodass der Roboter am PC 3D dargestellt werden kann und nicht noch aufwendig konfiguriert werden muss.   

=Installation=
Ros ist nicht in den Ubuntu Paketquellen vorhanden und muss deshalb von einer Fremdquelle installiert werden.
[[Vorlage(Fremd, packages.ros.org, "Fremdquellen können das System gefährden!")]]
##[[Vorlage(Fremdquelle, ]]
Für [:Precise:]
{{{sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'}}}
für [:Quantal:]
{{{
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu quantal main" > /etc/apt/sources.list.d/ros-latest.list'}}}
und für [:Saucy:]
{{{sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu raring main" > /etc/apt/sources.list.d/ros-latest.list'}}}

##[[Vorlage(Fremdquelle-auth, http://code.ros.org/packages/ros.key)]]
Den Authentifizierungsschlüssel kann man mit
{{{wget http://packages.ros.org/ros.key -O - | sudo apt-key add -}}} holen.

Nach der Aktualisierung der Paketinformation kann man nun ROS installieren.

Es gibt mehrere Versionen:


{{{#!vorlage Paketinstallation
ros-hydro-desktop-full, ppa, komplettes Programm
}}}
alternativ
{{{#!vorlage Paketinstallation
ros-hydro-desktop, ppa, abgespeckt Version
}}}
oder
{{{#!vorlage Paketinstallation
ros-hydro-ros-base, ppa, nur Grundprogramm ohne GUI
}}}

{{{#!vorlage Hinweis
Da ROS sehr umfangreich ist, werden dafür ca. 4 GB benötigt. Der Download kann dementsprechend lange dauern.
}}}


Im Anschluss muss `rosdep` initialisiert werden mit
{{{sudo rosdep init
rosdep update}}}

Ferner kann man noch
{{{#!vorlage Paketinstallation
python-rosinstall, ppa
}}}
installieren als Kommandozeilenwerkzeug.

Diese Anleitung folgt der Beschreibung in [http://wiki.ros.org/hydro/Installation/Ubuntu/ ROS-Wiki] {en}.


= Bedienung =
Hierfür sei auf die ausführliche Dokumentation im genannten Wiki [http://wiki.ros.org/ROS/Tutorials/ verwiesen] {en}

= Alter Teil =
Zuerst muss eine neue [:udev: udev]- Regel  '''/etc/udev/rules.d/70-lego.rules''', erstellt [5] [6] werden,
rosdep
{{{#!code
"BUS==\"usb\", ATTRS{idVendor}==\"0694\", GROUP=\"lego\", MODE=\"0660\"" > /tmp/70-lego.rules
}}}

und [:udev#Neustart-des-udev-Systems: udev neugestartet] werden.

Als nächstes muss man die Gruppe und seinen Benutzernamen der Gruppe `lego` hinzufügen [7].

=== Installieren ===
Zuerst müssen die Pakete 
 * '''python-setuptools'''
 * '''rosinstall'''
 * '''mercurial'''
installiert werden.

{{{#!vorlage Hinweis
Zusätzliche Fremdquellen müssen hinzugefügt sein (s.o.).
}}}

{{{#!vorlage Paketinstallation
python-setuptools
}}}

Danach wird '''rosinstall''' mit folgendem Befehl installiert
{{{#!vorlage Befehl
sudo easy_install -U rosinstall
}}}

und schließlich noch

{{{#!vorlage Paketinstallation
mercurial
}}}

Jetzt kann das eigentliche nxt-ROS heruntergeladen und gebaut werden.

{{{#!vorlage Befehl
rosinstall ~/nxtros /opt/ros/cturtle "http://www.ros.org/wiki/nxt/Installation?action=AttachFile&do=get&target=nxt-0.1.0.rosinstall"
}}}

Danach müssen mit dem Skript ''' ~/nxtros/setup.sh''' noch Variablen für ROS gesetzt werden

{{{#!vorlage Befehl
. ~/nxtros/setup.sh
}}}

und dann muss man schließlich noch die ROS-Erweiterung installieren.

{{{#!vorlage Befehl
rosmake nxt nxt_apps nxt_robots --rosdep-install
}}}

= Tests und Beispiele =
== Touch Sensor testen ==
[[Vorlage(Bildunterschrift, roscore.png, 450, "roscore", right)]]
{{{#!vorlage Befehl
rosmake nxt_python
}}}

{{{#!vorlage Befehl
roscore
}}}
Der nächste Befehl muss in einem neuen Terminal[4] durchgeführt werden.
Dazu muss ein Touch Sensor an PORT1 des nxt angeschlossen sein.

{{{#!vorlage Befehl
rosrun nxt_python touch_sensor_test.py
}}}
 
Jetzt sollte der Status des Touch Sensors angezeigt werden.

==Farbsensor testen==
{{{#!vorlage Befehl
roscore 
}}}

Auch hier muss dieser Befehl erneut in einem zusätzlichen, neuen Terminal[4] durchgeführt werden:

{{{#!vorlage Befehl
rosrun nxt_python color_sensor_test.py 
}}}

HIer sollten jetzt die Werte des Farbsensors angezeigt werden.

= Werkzeuge =
[[Vorlage(Bildunterschrift, nxtteleop.png, 450, "nxt teleop", right)]]
== Den nxt mit Tastatur/Joystick steuern ==
Hierzu wird das Modul `nxt teleop` benötigt. Dies wird mit folgendem Befehl gebaut:

{{{#!vorlage Befehl
rosmake nxt_teleop
}}}

{{{#!vorlage Hinweis
Der Übersichtlichkeit halber empfiehlt sich, ein Terminal mit mehreren Reitern zu öffnen[4]. 
}}}

Wenn in einem Terminal nun `roscore` und in einem Andern ein `rosrun` mit einem Roboter läuft, so kann man in einem zusätzlichen Terminal nun mit dem Befehl

{{{#!vorlage Befehl
roslaunch nxt_teleop teleop_keyboard.launch
}}}

die Steuerung über die Pfeiltasten oder mit 

{{{#!vorlage Befehl
roslaunch nxt_teleop teleop_joy.launch
}}}

über einen Joystick durchführen.

Alternativ kann das Programm [:joy2key:] verwendet werden, das Joystickeingaben in Tastatureingaben umwandelt.

== ldd ==
[[Vorlage(Bildunterschrift, ldd.jpg, 450, "Der Lego Digital Designer", right)]]
Der Lego Digital Designer kann bis Version 2.0 mit [:Wine:] ausgeführt werden. Für aktuellere Versionen wird eine [:Virtualisierung:] empfohlen.

Zum Umwandeln der Ldd- Dateien muss folgender Befehlssyntax verwendet werden:

{{{#!vorlage Befehl
rosrun nxt_lxf2urdf lxf2urdf.py <IHRROBOTER>.lxf <IHRROBOTER>.ldr > <AUSGABENAME>.urdf
}}}

Die abgebildete Beispieldateien [http://www.ros.org/wiki/nxt_lxf2urdf/Tutorials/Creating%20a%20simple%20robot%20model%20using%20lxf2urdf.py?action=AttachFile&do=get&target=robot.lxf robot.lxf] {dl} und [http://www.ros.org/wiki/nxt_lxf2urdf/Tutorials/Creating%20a%20simple%20robot%20model%20using%20lxf2urdf.py?action=AttachFile&do=get&target=robot.ldr robot.ldr] {dl} können vom [http://www.ros.org/wiki/ ROS-Wiki] {en} heruntergeladen werden. Sie sollten im [:Homeverzeichnis:] abgelegt werden.

Das Beispiel wird dann so konvertiert:

{{{#!vorlage Befehl
rosrun nxt_lxf2urdf lxf2urdf.py robot.lxf robot.ldr >robot.urdf
}}}

Um das erzeugte Skript auch ausführen zu können, muss man nun noch mit einem Editor[5] eine '''*.launch''' Datei mit den Informationen für den '''tf tree''' und die Datei, in der der Roboterbauplan enthalten ist, erstellen:

{{{#!code xml
<param name="robot_description" textfile="$(find learning_nxt)/robot.urdf"/>

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher">
    <param name="publish_frequency" value="100.0"/>
  </node>
}}}

Jetzt kann man die launch-Datei ausführen:[[Vorlage(Bildunterschrift, rviz.jpg, 450, "3D Darstellung mit rviz", right)]]

{{{#!vorlage Befehl
roslaunch learning_nxt robot.launch
}}}

Nun ist es auch möglich, den Roboter 3D in ROS darzustellen. Dazu ist lediglich der Befehl 

{{{#!vorlage Befehl
rosrun rviz rviz
}}}

nötig. Selbstverständlich kann man auch hier gleichzeitig '''nxt teleop''' zur Steuerung des Roboters nutzen.
Die Bewegunegn werden in '''rviz''' in Echtzeit nachempfunden. 

= Problembehebung = 
== hddtemp ==
Wenn es während der Installation von ROS zu einer Fehlermeldung kommt, kann man sie getrost mit nein beantworten. Man kann diese mit dem Befehl

{{{#!vorlage Befehl
echo "hddtemp hddtemp/daemon boolean false" | sudo debconf-set-selections
}}}
 
umgehen.

== Befehl nicht gefunden ==
Wenn beispielsweise bei einem `rosrun` oder `roslaunch` die Meldung `Befehl nicht gefunden` erscheint, muss man erneut das Skript '''~/nxtros/setup.sh''' ausführen.

== Fehlermeldung beim Starten ==
Wenn beim Starten eine Meldung wie

{{{
Traceback (most recent call last):
  File "/u/mwise/external_repos/foote-ros-pkg/nxt/trunk/nxt_python/sensor_tests/touch_sensor_test.py", line 21, in <module>
    sock = nxt.locator.find_one_brick()
  File "/u/mwise/external_repos/foote-ros-pkg/nxt/trunk/nxt_python/src/nxt/locator.py", line 57, in find_one_brick
    raise BrickNotFoundError
nxt.locator.BrickNotFoundError
}}}

erscheint, kann dies mehrere Ursachen haben
 * Der nxt Brick ist nicht angeschlossen und eingeschaltet
 * Die originale Lego Firmware ist nicht auf dem Brick installiert
 * Der Brick ist nicht mit einem USB-Kabel mit dem PC verbunden
 * Die [#Vorbereitung udev-Regel] wurde nicht erstellt 

= Links =
 * [http://www.ros.org/wiki/nxt Projektseite] {en}
 * [http://ldd.lego.com/ Webseite Lego Digital Designer] {en}
 * [:Archiv/Mindstorms:Lego Mindstorms] - Verwendung unter Ubuntu
  * [http://mindstorms.lego.com/en-us/support/files/default.aspx#Firmware Lego Mindstorms Firmware] {en} 
 * [[Anhang(nxt-ros-install_ubuntu-natty.sh)]] {dl} Installationsskript für Ubuntu 11.04 von [user:janma:]

# tag: Programmierung, Hardware, LEGO