From 1ec5cd031be15dacfd98934481ae53df097b8dea Mon Sep 17 00:00:00 2001 From: Louis-Guillaume DUBOIS Date: Tue, 21 Apr 2015 19:21:24 +0200 Subject: [PATCH] division de Recherche et doc en plusieurs fichiers --- Home.md | 2 ++ Recherche et documentation.md | 27 ++--------------------- Traitement signal Kinect.md | 40 +++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 Traitement signal Kinect.md diff --git a/Home.md b/Home.md index 02e9538..5325a3b 100644 --- a/Home.md +++ b/Home.md @@ -3,7 +3,9 @@ * [Installation de ROS](Installation de ROS) * [Installation de PCL](Installation de PCL) +* [Obtention du plan à partir de la Kinect](Traitement signal Kinect) * [Recherche et documentation](Recherche et documentation) + ## Documentation sur BibteX [Par V. Prêtre](http://www.metz.supelec.fr/metz/personnel/pretre/Bienvenue.php) diff --git a/Recherche et documentation.md b/Recherche et documentation.md index 1747553..bee96a5 100644 --- a/Recherche et documentation.md +++ b/Recherche et documentation.md @@ -7,32 +7,9 @@ Un etherpad est disponible à l'url suivante : [http://etherpad.rezometz.org/p/h Bibliothèques à regarder : - -- [PCL (PointCloud)](http://www.pointclouds.org/) : beaucoup, beaucoup de choses... - * [les tutoriels](http://www.pointclouds.org/documentation/tutorials/) - * [pcl::NormalEstimation](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation.html) & [pcl::NormalEstimationOMP](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation_o_m_p.html) pour régresser un plan - - en particulier [computePointNormal](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation.html#afa0dd0bf400977f40eb91f08750bfa17) qui sert l’équation du plan sur un plateau - - explication [ici](http://www.pointclouds.org/documentation/tutorials/normal_estimation.php#normal-estimation) - * [pcl::ConditionalRemoval](http://docs.pointclouds.org/trunk/classpcl_1_1_conditional_removal.html) pour filtrer les points (critère de profondeur (plus simple a priori) ou couleur) -- AR Drone : + * - AR Drone : * [ardrone_autonomy](https://github.com/AutonomyLab/ardrone_autonomy/tree/master#sending-commands-to-ar-drone) -Pour l’interface Kinect on a le choix entre : - - -- l’interface fournie par les packages ROS : - - * [OpenKinect / libfreenect](https://github.com/OpenKinect) avec [freenect_stack](http://wiki.ros.org/freenect_stack) qui publie des sensor_msgs::Image - * puis conversion des sensor_msgs::Image en sensor_msgs::PointCloud2 avec [depth_image_proc/point_cloud_xyz](http://wiki.ros.org/depth_image_proc) ou [depth_image_proc/point_cloud_xyzrgb](http://wiki.ros.org/depth_image_proc) - * puis utilisation avec [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo) (conversion automatique sensor_msgs/PointCloud2 => PointCloud<>), sinon conversion manuelle avec [pcl::fromPCLPointCloud2](http://docs.pointclouds.org/trunk/namespacepcl.html#a89aca82e188e18a7c9a71324e9610ec9) ou [pcl::fromROSMsg](http://docs.pointclouds.org/trunk/namespacepcl.html#a22b3a98851964a79fafa7b9e543b3c75) - * puis traitement des PointCloud<> par PCL - -- [moins bien] l’interface fournie par PCL, qui récupère directement un PointCloud utilisable par PCL à partir de la Kinect : - - * [openni_wrapper::DeviceKinect](http://docs.pointclouds.org/trunk/classopenni__wrapper_1_1_device_kinect.html) & [openni_wrapper::OpenNIDevice](http://docs.pointclouds.org/trunk/classopenni__wrapper_1_1_open_n_i_device.html) pour parler à la Kinect - * openni_grabber : [tuto](http://www.pointclouds.org/documentation/tutorials/openni_grabber.php#openni-grabber), [doc](http://docs.pointclouds.org/trunk/classpcl_1_1_open_n_i_grabber.html) -Publication & Souscription à des topics de PointCloud avec [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo) - ### Important ### Avant de coder, regarder : @@ -57,4 +34,4 @@ Il vous faut donc dans un premier temps : J'ai sorti une kinect, elle est posée sur un des bureaux de la smartroom. -Pour rappel, à la fin du projet, je vous demanderais de me remettre un rapport et de faire une soutenance. \ No newline at end of file +Pour rappel, à la fin du projet, je vous demanderais de me remettre un rapport et de faire une soutenance. diff --git a/Traitement signal Kinect.md b/Traitement signal Kinect.md new file mode 100644 index 0000000..fabf0f1 --- /dev/null +++ b/Traitement signal Kinect.md @@ -0,0 +1,40 @@ +# Obtention des PointCloud + +## Pilote ROS de la Kinect + +Le pilote [freenect_stack](http://wiki.ros.org/freenect_stack), qui utilise [OpenKinect / libfreenect](https://github.com/OpenKinect) ne publie que des sensor_msgs::Image inutilisable par PCL. + +Il faut donc trouver comment convertir ces données brutes en données traitables par PCL. + +## Conversion en PointCloud + +Pour cela nous utilisons les nodelets [depth_image_proc/point_cloud_xyz](http://wiki.ros.org/depth_image_proc) ou [depth_image_proc/point_cloud_xyzrgb](http://wiki.ros.org/depth_image_proc) founis par [image_pipeline](http://wiki.ros.org/image_pipeline?distro=indigo). + +Les topics publiés sont au format sensor_msgs/PointCloud2, c’est normal. + +## Récupération et publication des PointCloud sur les topics + +La façon la plus simple de récupérer les PointCloud (classe de PCL) à partir des messages de type sensor_msgs/PointCloud2 publiés par les nodelets d’image_pipeline est d’utiliser [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo). Cf. leurs exemples de publishers et subscribers. + +De là même manière avec pcl_ros on publie des sensor_msgs/PointCloud2 de façon transparente à partir de PointCloud. + +Pour information, la conversion manuelle est possible avec [pcl::fromROSMsg](http://docs.pointclouds.org/trunk/namespacepcl.html#a22b3a98851964a79fafa7b9e543b3c75) ou [pcl::fromPCLPointCloud2](http://docs.pointclouds.org/trunk/namespacepcl.html#a89aca82e188e18a7c9a71324e9610ec9) + +# Traitement des PointCloud avec PCL + +## Filtrage selon z ou selon la couleur + +Utiliser [pcl::ConditionalRemoval](http://docs.pointclouds.org/trunk/classpcl_1_1_conditional_removal.html) dans un nœud. + +## Régression du plan + +Utiliser [pcl::NormalEstimation](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation.html) & [pcl::NormalEstimationOMP](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation_o_m_p.html) : + +- en particulier [computePointNormal](http://docs.pointclouds.org/trunk/classpcl_1_1_normal_estimation.html#afa0dd0bf400977f40eb91f08750bfa17) qui sert l’équation du plan sur un plateau : (a,b,c,d) tels que a.x + b.y + c.z + d = 0. +- explication [ici](http://www.pointclouds.org/documentation/tutorials/normal_estimation.php#normal-estimation) + +# Alternative pour la récupération des PointCloud + +* [openni_wrapper::DeviceKinect](http://docs.pointclouds.org/trunk/classopenni__wrapper_1_1_device_kinect.html) & [openni_wrapper::OpenNIDevice](http://docs.pointclouds.org/trunk/classopenni__wrapper_1_1_open_n_i_device.html) pour parler à la Kinect +* openni_grabber : [tuto](http://www.pointclouds.org/documentation/tutorials/openni_grabber.php#openni-grabber), [doc](http://docs.pointclouds.org/trunk/classpcl_1_1_open_n_i_grabber.html) +