Merge branch 'master' into dev

This commit is contained in:
Louis-Guillaume DUBOIS 2015-04-22 13:01:56 +02:00
commit f36b613513
3 changed files with 30 additions and 51 deletions

View file

@ -12,6 +12,7 @@ Après avoir créé un espace de travail catkin :
#!sh
mkdir -p ~/hand_control_ws/src
cd ~/hand_control_ws/src
source /opt/ros/indigo/setup.bash
catkin_init_workspace
```
@ -20,6 +21,8 @@ vous devez cloner le dépôt de telle sorte que le dossier «hand_control» se s
```
#!sh
git clone git@bitbucket.org:_Luc_/handcontrol.git
# ou bien : git clone https://Username@bitbucket.org/_Luc_/handcontrol.git
# (changer Username)
mv -t ~/hand_control_ws/src handcontrol/* handcontrol/.git
rmdir handcontrol
```
@ -34,64 +37,18 @@ catkin_make
Puis pour faciliter le développement :
```
#!sh
source /opt/ros/indigo/setup.bash
source ~/hand_control_ws/devel/setup.bash
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
echo "source ~/hand_control_ws/devel/setup.bash" >> ~/.bashrc
```
Cf. le Wiki pour linstallation de ROS, PCL et des pilotes pour la Kinect et le drone.
## Recherche documentaire ##
Consulter le dossier /rechercheDoc
Un etherpad est disponible à l'url suivante : [http://etherpad.rezometz.org/p/handcontrol](http://etherpad.rezometz.org/p/handcontrol)
### Conclusion de la recherche ###
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 :
* [ardrone_autonomy](https://github.com/AutonomyLab/ardrone_autonomy/tree/master#sending-commands-to-ar-drone)
Pour linterface Kinect on a le choix entre :
- linterface 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)
- linterface 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 pcl::PCLPointCloud2 avec [pcl_conversions::moveToPCL](http://docs.ros.org/indigo/api/pcl_conversions/html/namespacepcl__conversions.html#a40366a910d7ce4ae63b121150381098d) du package [perception_pcl](http://wiki.ros.org/perception_pcl?distro=indigo), cf. [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo)
* puis utilisation avec [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo) (conversion automatique std_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)
Publication & Souscription à des topics de PointCloud avec [pcl_ros](http://wiki.ros.org/pcl_ros?distro=indigo)
### Important ###
Avant de coder, regarder :
- [les conventions décriture du code du projet ROS](http://wiki.ros.org/CppStyleGuide)
- [le guide du développeur](http://wiki.ros.org/DevelopersGuide)
## Mail du responsable de projet (extrait) ##
Donc sur le principe du projet :
- on place une kinect pointant vers le haut de laquelle on va extraire un nuage de points (PointCloud) correspondant à une main placée au dessus. D'ailleurs, je pense qu'on prendre un gant de couleur unie bien criarde pour facilement filtrer les points d'intérêt et ne s'intéresse qu'à ceux de la main.
- on régresse un plan sur le point cloud
- on utilise les paramètres du plan pour définir le roll, pitch, altitude d'un drone;
Il vous faut donc dans un premier temps :
- faire les tutoriels de ROS (jusqu'au tutoriel sur les publisher et subscribers en C++/Python); Pour installer ROS sur votre machine, c'est beaucoup plus simple à ma connaissance d'installer ubuntu (http://wiki.ros.org/)
- regarder comment on définit/utilise des launch files sous ROS, ce qui facilite grandement le lancement de plusieurs noeuds (http://wiki.ros.org/roslaunch)
- regarder et utiliser la kinect sous ROS en utilisant freenect; Notamment regarder les nœuds et ce qu'ils publient sur leurs topics (http://wiki.ros.org/freenect_camera), il y a notamment une image de profondeur et une image RGB;
- regarder et utiliser le drone sous ROS : (par exemple : http://wiki.ros.org/ardrone_driver)
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.
Cf. le [Wiki](https://bitbucket.org/_Luc_/handcontrol/wiki/Home) pour le reste de la documentation et le résultat des recherches.

View file

@ -0,0 +1,5 @@
<launch>
<include file="$(find hand_control)/launch/freenect-registered-xyzrgb.launch">
</include>
</launch>

View file

@ -0,0 +1,17 @@
<launch>
<include file="$(find freenect_launch)/launch/freenect.launch">
<!-- use device registration -->
<arg name="depth_registration" value="true" />
<arg name="rgb_processing" value="true" />
<arg name="ir_processing" value="false" />
<arg name="depth_processing" value="false" />
<arg name="depth_registered_processing" value="true" />
<arg name="disparity_processing" value="false" />
<arg name="disparity_registered_processing" value="false" />
<arg name="sw_registered_processing" value="false" />
<arg name="hw_registered_processing" value="true" />
</include>
</launch>