11 changed files with 1 additions and 180 deletions
@ -1,15 +0,0 @@ |
|||
# Pilote ROS du drone |
|||
|
|||
Nous utilisons [ardrone_autonomy](https://github.com/AutonomyLab/ardrone_autonomy/tree/master#sending-commands-to-ar-drone) |
|||
|
|||
La doc officielle est [ici](http://ardrone-autonomy.readthedocs.org/en/latest/index.html) |
|||
|
|||
Voir aussi le guide du développeur (section Téléchargement) |
|||
|
|||
À partir des deux inclinaisons du plan (roll & pitch, roulis et tangage) nous stimulons linear.x et linear.y qui sont traduits par le pilote en roulis et tangage pour permettre le mouvement. |
|||
|
|||
La variation d’altitude du plan doit stimuler linear.z. |
|||
|
|||
Il reste à voir si l’on veut contrôler angular.z. |
|||
|
|||
Les commandes doivent être envoyés à 30Hz (cf guide du développeur p.11) |
|||
@ -1,37 +0,0 @@ |
|||
# Installation de ROS et des packages nécessaires # |
|||
## Installation de ROS Indigo ## |
|||
cf. [wiki ROS](http://wiki.ros.org/indigo/Installation/Ubuntu) : |
|||
|
|||
``` |
|||
#!sh |
|||
|
|||
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list' |
|||
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add - |
|||
sudo apt-get update |
|||
sudo apt-get install ros-indigo-desktop-full |
|||
``` |
|||
## Installation des packages nécessaires ## |
|||
|
|||
### libfreenect / freenect_stack ### |
|||
|
|||
``` |
|||
#!sh |
|||
|
|||
sudo apt-get install ros-indigo-freenect-stack |
|||
``` |
|||
|
|||
### ardrone_autonomy ### |
|||
|
|||
``` |
|||
#!sh |
|||
|
|||
sudo apt-get install ros-indigo-ardrone-autonomy |
|||
``` |
|||
|
|||
### ncurses ### |
|||
|
|||
``` |
|||
#!sh |
|||
|
|||
sudo apt-get install libncursesw5-dev |
|||
``` |
|||
@ -1,18 +0,0 @@ |
|||
# 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. |
|||
@ -1,18 +0,0 @@ |
|||
# Message Plan # |
|||
## Description ## |
|||
|
|||
``` |
|||
#! |
|||
|
|||
geometry_msgs/Point normal |
|||
float64 altitude |
|||
float64 curvature |
|||
``` |
|||
essayer : |
|||
|
|||
|
|||
``` |
|||
#!bash |
|||
|
|||
rosmsg show hand_control/Plan |
|||
``` |
|||
@ -1,7 +0,0 @@ |
|||
# Nœud *filtre* # |
|||
## Description ## |
|||
* topic souscrit : **/filtre/input** (pcl::PointCloud<pcl::PointXYZRGB> sous forme sensor_msgs/PointCloud2) |
|||
* topic publié : **/filtre/output** (pcl::PointCloud<pcl::PointXYZRGB> sous forme sensor_msgs/PointCloud2) |
|||
* paramètre : **/filtre/zmax** (double) |
|||
|
|||
Publie sur */filtre/output* le PointCloud publié sur */filtre/input*, débarrassé des points tels que *z < /filtre/zmax* |
|||
@ -1,8 +0,0 @@ |
|||
# Nœud **keyboard_azerty.py** # |
|||
## Description ## |
|||
C’est une modification de *teleop_twist_keyboard.py* du package *teleop_twist_keyboard* |
|||
|
|||
Topic publié : |
|||
- **/cmd_vel** (geometry_msgs/Twist) |
|||
|
|||
Il permet de contrôler au clavier l’altitude, les translations du drone dans le plan parallèle au sol, et la rotation du drone autour de l’axe vertical. |
|||
@ -1,4 +0,0 @@ |
|||
# Nœud *normal_estimator* # |
|||
## Description ## |
|||
- topic souscrit : **/estimator/input** (pcl::PointCloud<pcl::PointXYZRGB> sous forme de sensor_msgs/PointCloud2) |
|||
- topic publié : **/estimator/output** (hand_control/Plan) |
|||
@ -1,13 +0,0 @@ |
|||
# Nœud *pcl_displayer* # |
|||
## Description ## |
|||
- topic souscrit : **/input** (pcl::PointCloud<PointXYZRGB> sous forme de sensor_msgs::PointCloud2) |
|||
|
|||
Affiche sous forme de log ROS et dans la console ROS (avec ROS_INFO) les PointClouds publiés sur **/displayer/input**. |
|||
|
|||
## Exemple ## |
|||
|
|||
``` |
|||
#!sh |
|||
|
|||
rosrun hand_control pcl_displayer input:=/filtre/output |
|||
``` |
|||
@ -1,15 +0,0 @@ |
|||
# Nœud *random_pcl_publisher* # |
|||
## Description ## |
|||
|
|||
- topic publié : **/random/output** (pcl::PointCloud<PointXYZRGB> sous forme de sensor_msgs/PointCloud2) |
|||
- paramètres : |
|||
- **/random/freq** (double) : fréquence de publication d’un PointCloud sur */random/output/* |
|||
- **/random/length** (int) : longueur et largeur du PointCloud généré |
|||
- **/random/max** (double) : valeur maximale de x, y et z. |
|||
- **/random/min** (double) : valeur minimale de x, y et z. |
|||
|
|||
Ce nœud publie à la fréquence */random/freq* un PointCloud de PointXYZRGB où les valeurs des coordonnées x, y et z suivent chacune une loi uniforme sur [/random/min ; /random/max]. La couleur des points est r=g=255, b=0. |
|||
|
|||
## Implémentation ## |
|||
|
|||
On utilise pcl::common::UniformGenerator de <pcl/common/random.h> et pcl::common::CloudGenerator de <pcl/common/generate.h> |
|||
@ -1,43 +0,0 @@ |
|||
# Obtention des PointCloud |
|||
|
|||
## Obtention "à la main" des PointCloud : pilote et nodelets |
|||
### 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. |
|||
|
|||
### 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) fournis par [image_pipeline](http://wiki.ros.org/image_pipeline?distro=indigo). |
|||
|
|||
Les topics publiés sont au format sensor_msgs/PointCloud2, c’est normal. |
|||
|
|||
## Obtention "automatique" des PointCloud : freenect_launch ou openni_launch |
|||
|
|||
[freenect_launch](http://wiki.ros.org/freenect_launch) ou [openni_launch](http://wiki.ros.org/openni_launch) fournissent directement pleins de nodelets, qui publient les PointClouds qui nous intéressent. |
|||
|
|||
## 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) |
|||
|
|||
Loading…
Reference in new issue