Update: Wir haben hier unseren Code und unser Papier für unser neues Vision-System veröffentlicht, das bei der Amazon Robotics Challenge 2017 den 1. Platz in der Stauaufgabe belegte.
Dieses Repository enthält Toolbox-Code für unser Vision-System, das bei der Amazon Picking Challenge 2016 den 3. und 4. Platz belegte. Enthält RGB-D-Realsense-Sensortreiber (Standalone- und ROS-Paket), Deep-Learning-ROS-Paket für die 2D-Objektsegmentierung (Training und Tests), ROS-Paket für die 6D-Posenschätzung. Dies ist die Referenzimplementierung von Modellen und Code für unseren Artikel:
Andy Zeng, Kuan-Ting Yu, Shuran Song, Daniel Suo, Ed Walker Jr., Alberto Rodriguez und Jianxiong Xiao
Internationale IEEE-Konferenz für Robotik und Automatisierung (ICRA) 2017
Die Lagerautomatisierung hat in den letzten Jahren großes Interesse geweckt, vielleicht am sichtbarsten durch die Amazon Picking Challenge (APC). Um ein vollständig autonomes Pick-and-Place-System zu erreichen, ist ein robustes Bildverarbeitungssystem erforderlich, das Objekte und ihre 6D-Posen zuverlässig erkennt. Aufgrund der überfüllten Umgebung, der Selbstokklusion, des Sensorrauschens und der großen Vielfalt an Objekten ist eine Lösung jedoch für den Einsatz im Lager nicht geeignet. In diesem Artikel stellen wir ein Vision-System vor, das auf der APC 2016 den 3. bzw. 4. Platz bei den Stau- und Kommissionieraufgaben belegte. Unser Ansatz nutzt Multi-View-RGB-D-Daten und datengesteuertes, selbstüberwachtes Lernen zur Bewältigung die oben genannten Schwierigkeiten. Genauer gesagt segmentieren und beschriften wir zunächst mehrere Ansichten einer Szene mit einem vollständig faltenden neuronalen Netzwerk und passen dann vorab gescannte 3D-Objektmodelle an die resultierende Segmentierung an, um die 6D-Objektpose zu erhalten. Das Training eines tiefen neuronalen Netzwerks für die Segmentierung erfordert normalerweise eine große Menge an Trainingsdaten mit manuellen Beschriftungen. Wir schlagen eine selbstüberwachte Methode vor, um ohne mühsame manuelle Segmentierung einen großen beschrifteten Datensatz zu generieren, der problemlos auf weitere Objektkategorien skaliert werden könnte. Wir zeigen, dass unser System die 6D-Pose von Objekten in einer Vielzahl von Szenarien zuverlässig schätzen kann.
Wenn Sie diesen Code für Ihre Arbeit nützlich finden, denken Sie bitte darüber nach, Folgendes zu zitieren:
@inproceedings{zeng2016multi,
title={Multi-view Self-supervised Deep Learning for 6D Pose Estimation in the Amazon Picking Challenge},
author={Zeng, Andy and Yu, Kuan-Ting and Song, Shuran and Suo, Daniel and Walker Jr, Ed and Rodriguez, Alberto and Xiao, Jianxiong},
booktitle={ICRA},
year={2016}
}
Dieser Code wird unter der Simplified BSD-Lizenz veröffentlicht (Einzelheiten finden Sie in der LIZENZ-Datei).
Alle relevanten Datensatzinformationen und Downloads finden Sie hier.
Wenn Sie Fragen haben oder Fehler finden, lassen Sie es mich bitte wissen: Andy Zeng andyz[at]princeton[dot]edu
Schätzt 6D-Objektposen anhand der Beispielszenendaten (in data/sample
) mit vorberechneten Objektsegmentierungsergebnissen aus dem Deep Learning FCN ROS-Paket:
git clone https://github.com/andyzeng/apc-vision-toolbox.git
(Hinweis: Die Größe des Quell-Repositorys beträgt ~300 MB, das Klonen kann eine Weile dauern)cd apc-vision-toolbox/ros-packages/catkin_ws/src/pose_estimation/src/
mdemo
aus Ein Matlab ROS-Paket zum Schätzen von 6D-Objektpositionen durch Modellanpassung mit ICP an RGB-D-Objektsegmentierungsergebnissen. 3D-Punktwolkenmodelle von Objekten und Behältern finden Sie hier.
ros_packages/.../pose_estimation
in Ihr Catkin-Workspace-Quellverzeichnis (z. B. catkin_ws/src
).pose_estimation/src/make.m
um benutzerdefinierte ROS-Nachrichten für Matlab zu kompilierenpose_estimation/src
: nvcc -ptx KNNSearch.cu
roscore
startenpose_estimation/src/startService.m
aus. Bei jedem Aufruf (siehe Dienstanforderungsformat beschrieben pose_estimation/srv/EstimateObjectPose.srv
) führt der Dienst Folgendes aus:roscore
im Terminalmkdir /path/to/your/data/tmp
rosrun marvin_convnet detect _read_directory:="/path/to/your/data/tmp"
pose_estimation/src
demo.m
startService.m
demo.m
Eine eigenständige ausführbare C++-Datei zum Streamen und Erfassen von Daten (RGB-D-Frames und 3D-Punktwolken) in Echtzeit mit librealsense. Getestet auf Ubuntu 14.04 und 16.04 mit einer Intel® RealSense™ F200 Kamera.
Siehe realsense_standalone
cd realsense_standalone
./compile.sh
Führen Sie nach dem Kompilieren ./stream
aus, um mit dem Streaming von RGB-D-Frames vom Realsense-Gerät zu beginnen. Drücken Sie bei aktivem Stream-Fenster die Leertaste, um den aktuellen RGB-D-Frame zu erfassen und auf der Festplatte zu speichern. Relevante Kamerainformationen und aufgenommene RGB-D-Bilder werden in einem zufällig benannten Ordner unter data
gespeichert.
Wenn Ihr Realsense-Gerät angeschlossen ist, aber nicht erkannt wird, versuchen Sie es mit einem anderen USB-Anschluss. Wenn dies fehlschlägt, führen Sie das folgende Skript aus, während das Gerät vom Stromnetz getrennt ist, um Ihre USB-Anschlüsse zu aktualisieren:
sudo ./scripts/resetUSBports.sh
Ein C++-ROS-Paket zum Streamen und Erfassen von Daten (RGB-D-Frames und 3D-Punktwolken) in Echtzeit mit librealsense. Getestet auf Ubuntu 14.04 und 16.04 mit einer Intel® RealSense™ F200 Kamera.
Dieses ROS-Paket gibt es in zwei verschiedenen Versionen. Welche Version installiert wird, hängt von der verfügbaren Software Ihres Systems ab:
Siehe ros-packages/realsense_camera
ros_packages/.../realsense_camera
in Ihr Catkin-Workspace-Quellverzeichnis (z. B. catkin_ws/src
).realsense_camera/CMakeLists.txt
entsprechend Ihren jeweiligen Abhängigkeitencatkin_make
devel/setup.sh
roscore
startenrosrun realsense_camera capture
/realsense_camera
gibt Daten vom Sensor zurück (Antwortdatenformat beschrieben in realsense_camera/srv/StreamSensor.srv
).rosrun realsense_camera capture _display:=True
Ein C++-ROS-Paket für Deep-Learning-basierte Objektsegmentierung mithilfe von FCNs (Fully Convolutional Networks) mit Marvin, einem leichten, reinen GPU-Framework für neuronale Netzwerke. Dieses Paket leitet RGB-D-Daten über ein vorab trainiertes ConvNet weiter, um Ergebnisse der Objektsegmentierung abzurufen. Die neuronalen Netze werden offline mit Marvin trainiert (siehe FCN-Training mit Marvin).
Siehe ros-packages/marvin_convnet
Das Realsense ROS-Paket muss zuerst kompiliert werden.
CUDA 7.5 und cuDNN 5. Möglicherweise müssen Sie sich bei NVIDIA registrieren. Im Folgenden finden Sie einige zusätzliche Schritte zum Einrichten von cuDNN 5. HINWEIS Wir empfehlen dringend, dass Sie verschiedene Versionen von cuDNN in verschiedenen Verzeichnissen installieren (z. B. /usr/local/cudnn/vXX
), da unterschiedliche Softwarepakete möglicherweise unterschiedliche Versionen erfordern.
LIB_DIR=lib $( [[ $( uname ) == " Linux " ]] && echo 64 )
CUDNN_LIB_DIR=/usr/local/cudnn/v5/ $LIB_DIR
echo LD_LIBRARY_PATH= $LD_LIBRARY_PATH : $CUDNN_LIB_DIR >> ~ /.profile && ~ /.profile
tar zxvf cudnn * .tgz
sudo cp cuda/ $LIB_DIR / * $CUDNN_LIB_DIR /
sudo cp cuda/include/ * /usr/local/cudnn/v5/include/
ros_packages/.../marvin_convnet
in Ihr Catkin-Workspace-Quellverzeichnis (z. B. catkin_ws/src
).realsense_camera/CMakeLists.txt
entsprechend Ihren jeweiligen Abhängigkeitencatkin_make
devel/setup.sh
ros_packages/.../marvin_convnet/models/competition/
und führen Sie das Bash-Skript ./download_weights.sh
aus, um unsere trainierten Gewichte für die Objektsegmentierung herunterzuladen (trainiert auf unserem Trainingsdatensatz).marvin_convnet/src/detect.cu
: Geben Sie oben in der Datei den Dateipfad zur .json-Datei der Netzwerkarchitektur und die .marvin-Gewichte an.tmp
in apc-vision-toolbox/data
(z. B. apc-vision-toolbox/data/tmp
). Hier liest/schreibt marvin_convnet RGB-D-Daten. Das Format der Daten in tmp
folgt dem Format der Szenen in unseren Datensätzen und dem Format der von Realsense Standalone gespeicherten Daten.save_images
und detect
. Ersteres ruft RGB-D-Daten aus dem Realsense ROS-Paket ab und schreibt auf die Festplatte im tmp
-Ordner, während letzteres von der Festplatte im tmp
-Ordner liest, die RGB-D-Daten über das FCN weiterleitet und die Antwortbilder auf der Festplatte speichertrosrun marvin_convnet save_images _write_directory:= " /path/to/your/data/tmp " _camera_service_name:= " /realsense_camera "
rosrun marvin_convnet detect _read_directory:= " /path/to/your/data/tmp " _service_name:= " /marvin_convnet "
tmp
-Ordner): rosservice call /marvin_convnet [ " elmers_washable_no_run_school_glue " , " expo_dry_erase_board_eraser " ] 0 0
Code und Modelle zum Trainieren der Objektsegmentierung mithilfe von FCNs (Fully Convolutional Networks) mit Marvin, einem leichten, reinen GPU-Framework für neuronale Netzwerke. Enthält .json-Dateien für die Netzwerkarchitektur in convnet-training/models
und eine Marvin-Datenschicht in convnet-training/apc.hpp
die zufällig RGB-D-Bilder (RGB und HHA) aus unserem Segmentierungstrainingsdatensatz abtastet.
Siehe convnet-training
/usr/local/cudnn/vXX
), da unterschiedliche Softwarepakete möglicherweise unterschiedliche Versionen erfordern. LIB_DIR=lib $( [[ $( uname ) == " Linux " ]] && echo 64 )
CUDNN_LIB_DIR=/usr/local/cudnn/v5/ $LIB_DIR
echo LD_LIBRARY_PATH= $LD_LIBRARY_PATH : $CUDNN_LIB_DIR >> ~ /.profile && ~ /.profile
tar zxvf cudnn * .tgz
sudo cp cuda/ $LIB_DIR / * $CUDNN_LIB_DIR /
sudo cp cuda/include/ * /usr/local/cudnn/v5/include/
convnet-training/
models/train_shelf_color.json
models/weights/
und führen Sie das Bash-Skript ./download_weights.sh
aus, um vorab trainierte VGG-Gewichte auf ImageNet herunterzuladen (weitere vorab trainierte Gewichte finden Sie bei Marvin).convnet-training/
und führen Sie im Terminal ./compile.sh
aus, um Marvin zu kompilieren../marvin train models/rgb-fcn/train_shelf_color.json models/weights/vgg16_imagenet_half.marvin
aus, um ein Segmentierungsmodell für RGB-D-Daten mit Objekten im Regal zu trainieren (für Objekte im Behälter verwenden Sie Netzwerkarchitekturmodelle models/rgb-fcn/train_shelf_color.json
). Code, der zur Durchführung der Experimente in unserer Arbeit verwendet wird; testet das vollständige Vision-System anhand des Benchmark-Datensatzes „Shelf & Tote“.
Siehe evaluation
apc-vision-toolbox/data/benchmark
(z. B. apc-vision-toolbox/data/benchmark/office
, „apc-vision-toolbox/data/benchmark/“). „Lager“ usw.)evaluation/getError.m
die Variable benchmarkPath
so, dass sie auf den Dateipfad Ihres Benchmark-Dataset-Verzeichnisses verweistevaluation/predictions.mat
bereitgestellt. Um die Genauigkeit dieser Vorhersagen anhand der Grundwahrheitsbezeichnungen des Benchmark-Datensatzes „Shelf & Tote“ zu berechnen, führen Sie evaluation/getError.m
aus Ein WebGL-basiertes Online-Tool zum Kommentieren von Ground-Truth-6D-Objektposen auf RGB-D-Daten. Folgt einer Implementierung von RGB-D Annotator mit kleinen Änderungen. Hier ist ein Download-Link zu unserer genauen Kopie des Annotators.