Eclipse Juno C++/Python development with ROS

Update

Nach der Installation von Eclipse müssen die Entwicklungswerkzeuge für C/C++ und PyDev (optional) installiert werden. Eine alternative Möglichkeit ist, die Eclipse-CDT-Entwicklungsumgebung manuell herunterzuladen und zu installieren. Dann ist allerdings kein upgrade der Eclipse-Anwendung mit apt-get mehr möglich.

Eclipse starten

Alt+F2 -> eclipse
oder in Terminal:

eclipse &

Im Menü „Help“ -> „Install New Software“

In der Adressleiste „Work with:“ Update Site auswählen, aktuell „Juno„.

Folgende Entwicklungswerkzeuge anwählen und „Next“ betätigen.

C/C++

Autotools Support for CDT (Incubation)
C/C++ Development Tools
Eclipse EGit

Python

PyDev
Falls PyDev nicht angeboten wird, kann über den Add-Button ein Repositorium angegeben werden. Dort folgende Angaben machen:
Name = PyDev
Location = http://pydev.org/updates
Wieder „Next“ betätigen und „Lizenzbestimmungen“ lesen &
akzeptieren. „Finish“. Meistens ist nach Abschluss ein Neustart fällig.

HINWEIS: ROS-Fuerte verwendet Python 2.7, also muss der Python-Interpreter 2.7 dementsprechend ausgewählt werden.

Eclipse Editor

Während Eclipse neu startet, kann man ein vorhandenes ROS-Paket in ein Eclipse-Projekt umzuwandeln. Ein ROS-Paket muss vorhanden sein und wird standardmäßig mit dem Befehl roscreate-pkg erstellt.

ROS-Paket

Zuerst wird ein ROS-Paket erstellt und anschließend der Pfad zu dem erstellten ROS-Paket in den Umgebungsvariblen der Benutzer-Shell gespeichert. Wichtig ist, dass der letzte Befehl, welcher die Umgebungsvariablen initiiert, ausgeführt wird bevor die Umwandlung in ein Eclipse-Projekt vorgenommen wird, da sonst die Umwandlung mit Fehlern abbricht.

roscreate-pkg tutorial_opencv2 image_transport roscpp std_msgs opencv2 cv_bridge gscam arbotix_msgs arbotix_python
cd tutorial_opencv2
echo "export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:"$(pwd) >> ~/.bashrc
source ~/.bashrc

HINWEIS: Eine Blanko-Migration eines ROS-Pakets in ein Eclipse-Projekt ist nicht möglich. Es muss zuvor „rosmake“ benutzt und ein Kompilat im bin-Verzeichnis des ROS-Pakets erstellt worden sein, sonst führen die nächsten Schritte zu Fehlern in Eclipse. Auch wenn das Kompilat irgendwann gelöscht wird, kann Eclipse kein neues erstellen – einfach nochmal „rosmake tutorial_opencv2″ in einem Terminal ausführen. Es müssen auch alle Abhängigkeiten der Datei manifest.xml aufgelöst sein.

In diesem Fall handelt es sich um den Ordner „tutorial_opencv2„. Die Umwandlung findet mit dem Befehl make eclipse-project statt. Danach findet man die Eclipse-typischen Projektdateien in selbigem Ordner. Möchte man die Umwandlung also rückgängig machen, sollte man vorher eine rekursive Kopie des ROS-Paket-Ordners „tutorial_opencv2“ erstellen.

roscd tutorial_opencv2
make eclipse-project

Import

War die Umwandlung in ein Eclipse-Projekt erfolgreich, kann mit dem Import des umgewandelten ROS-Pakets in Eclipse fortgesetzt werden.

"File" 
"Import..."
"Existing Projects into Workspace"
Next
"Select root directory" -> Browse -> ~/ros-workspace/tutorial_opencv2
Finish

Sobald der Importvorgang abgeschlossen ist, mit Str+B ein Build erzeugen und etwas warten bis die Bugs verschwinden. Wenn die Bugs nicht verschwinden, kann es an der fehlenden LD_LIBRARY_PATH-Variablen liegen.

Es kann auch vorkommen dass „Stacks“ oder „Dienste“ importiert werden, die gar keine include-Ordner enthalten und somit auch keine Header-Dateien anbieten (siehe Eclipse-Warnungen in Problems – Shift+Alt+Q x). Ich habe die Warnungen ignoriert, da nach dem Löschen der „fehlerhaften“ Verweise neue Fehler auftauchten, die vorher nicht da waren und eine Kompilierung unmöglich wurde. Entfernen kann man die nicht benötigten Include-Direktiven mit Alt+Enter auf dem Projektverzeichnis im Projekt Explorer von Eclipse und dann in der Kategorie „C/C++ Include Paths and Symbols“. Der selbe Weg gilt für das Hinzufügen fehlender Include-Dateien.

PATH-Variablen

Wenn der Befehl „make eclipse-project“ korrekt durchgeführt wurde, müssen keine PATH-Variablen angefügt werden, da diese automatisch erzeugt werden. Wenn nicht, dann müssen diese in den Projekt-Eigenschaften -> C/C++Make Project -> Environment angefügt werden. Den Inhalt einer Umgebungsvariable erfährt man in einem Terminal mit echo $NAME_DER_VARIABLE.

ROS_ROOT
ROS_PACKAGE_PATH
PYTHONPATH
PATH
LD_LIBRARY_PATH

 

Mögliche Abhilfte bei Problemen:

 

Include-Datei-Probleme:

im bin-Verzeichnis die ausführbare Datei löschen und im Terminal mit rosmake tutorial_opencv2 neu erstellen.
Abhängigkeiten in manifest.xml überprüfen.

rm bin/tutorial_opencv2
rosmake tutorial_opencv2

Indexer nicht aktiv:

in Eclipse -> Window -> Preferences -> Indexer -> Enable indexer

Zu viele Fehlermeldungen bezüglich nicht aufgelöster Include-Dateien:

zurück zu ROS-Paket-Erstellung, Projekt-Ordner löschen, Backup zurückspielen und von vorne beginnen.

Eclipse Debugger

Mit Eclipse können ROS-Programme im Einzelschritt beobachtet werden.

Konfiguration

Debug-Konfiguration starten

Run -> Debug Configurations
Doppelklick auf C/C++ Application
Name vergeben -> tutorial_opencv2

Umgebungsvariablen

Run -> Debug -> Environment

Folgende Umgebungsvariablen setzen – mit echo $NAME_DER_VARIABLE den Inhalt kopieren:

ROS_ROOT
ROS_MASTER_URI
ROS_PACKAGE_PATH

Als Favoriten anzeigen:

Run -> Debug -> Common -> Display in favorites menu -> Debug, Run

Apply-Button betätigen und dann Debug…

 

Eclipse EGit – Versionssystem

Für die Versionsverwaltung innerhalb Eclipse wird das Plug-In EGit verwendet. Damit kann auf einem leistungsstarken Computer entwickelt werden, um die Ergebnisse über das Netzwerk auf den Embedded-Computern zu laden.

 

Konfiguration

Im Arbeitsverzeichnis des importierten Eclipse-ROS-Projekts wird ein git-Repositorium initialisiert bzw. ein .git-Verzeichnis erstellt.

roscd tutorial_opencv2
git init

Im Arbeitsverzeichnis des importierten Eclipse-ROS-Projekts wird eine Datei mit zu ignorierenden Elementen erstellt. Die zu ignorierenden Elemente sollen alle unsichtbaren Dateien, das bin- und das build-Verzeichnis werden.

roscd tutorial_opencv2
vi .gitignore
bin/
build/
.*
/cmake_install.cmake

Für die erste Verwendung werden alle benötigten Dateien indiziert, eine neue Version erstellt und diese über ssh Remote verfügbar gemacht.

roscd tutorial_opencv2
git add *.cpp
git add CMakeLists.txt mainpage.doc Makefile manifest.xml
git commit -m 'Beschreibung für die erste Version'
git remote add MyGitRepo ssh://123.123.123.4/home/username/your_ros_workspace/tutorial_opencv2/.git

Ab sofort können entfernte Computer über das Netzwerk auf das Repositorium per ssh zugreifen.
Ein Beispiel für ein Raspberry Pi könnte etwa so aussehen:

roscd
git clone ssh://username@123.123.123.4/home/username/your_ros_workspace/tutorial_opencv2/.git
git status

Spätere Änderungen im Repositorium können einfach mit pull oder fetch und merge gezogen werden. Einige Grundlagen und Philosophie von Git kann man sich im Online-Buch durchlesen – hier. Wenn die Versionsverwaltung Lokal und Remote funktioniert, bindet man das System in Eclipse ein, um auch über eine grafische Oberfläche darauf zugreifen zu können.

Rechte Maustaste auf das importierte Eclipse-ROS-Projekt im
Projekt-Explorer. Im Menüpunkt „Team“ den Unterpunkt „Share Project“
aufrufen. Dann sollte Git als Plug-In angezeigt werden. Wenn nicht, muss
das EGit-Plugin wie oben beschrieben installiert werden. Nach der
Auswahl „Git“ als „repository type“ geht es zum nächsten Schritt, in dem
das zuvor mit git init erstellte Repositorium ausgewählt, aber nicht erstellt wird.

Configure git repository -> Select repository location -> tutorial_opencv2
Finish

Nützliche Fenster für die Arbeit mit git:

Window -> Show view -> Other -> Git -> Git Staging
Window -> Show view -> Other -> Git -> Git Repositories
Window -> Show view -> Other -> Team -> Synchronize
Window -> Show view -> Other -> Team -> History

Eclipse Kompiler

Mit Eclipse können ROS-Programme kompiliert werden.

Konfiguration

Eclipse soll rosmake für die Bauarbeiten verwenden. Alt+Enter oder rechte Maustaste auf das importierte Eclipse-ROS-Projekt im
Projekt-Explorer. Im Kontextmenü „Properties“ wählen.

C/C++ Make Project -> Make Builder -> Build Command -> /opt/ros/groovy/bin/rosmake
C/C++ Make Project -> Make Builder -> Workbench Build behavior -> Build -> Eintrag "all" entfernen.
C/C++ Make Project -> Make Builder -> Workbench Build behavior -> Clean -> Eintrag "clean" entfernen.

Ab sofort verhält sich der Build-Prozess in Eclipse wie im Terminal mit dem Befehl rosmake.

Schreibe einen Kommentar