hand_control/README-en.md

145 lines
6.8 KiB
Markdown
Raw Normal View History

2015-07-20 19:25:54 +00:00
# Installation #
This package was developped with the Indigo version of ROS.
## Dependencies installation ##
```
#!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 ros-indigo-freenect-stack ros-indigo-ardrone-autonomy libncursesw5-dev
```
## Package installation ##
### Catkin workspace creation ###
For instance :
```
#!sh
source /opt/ros/indigo/setup.bash
mkdir -p ~/hand_control_ws/src
cd ~/hand_control_ws/src
catkin_init_workspace
```
### Code location ###
If necessary, rename the folder with the file named `hand_control`, and move it in `~/hand_control_ws/src/` or in the subfolder `src` of your catkin workspace.
2015-07-20 19:25:54 +00:00
## Compilation ##
You're now able to compile :
2015-07-20 19:25:54 +00:00
```
#!sh
cd ~/hand_control_ws # or your catkin workspace
2015-07-20 19:25:54 +00:00
catkin_make
```
Then you can run the following commands to be able to use the ROS commands. If necessary replace "hand_control_ws" by the name of your catkin workspace.
2015-07-20 19:25:54 +00:00
```
#!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
```
# Use #
2015-07-20 19:25:54 +00:00
## Connection and setting up of the Kinect ##
2015-07-20 19:25:54 +00:00
1. Connect the Kinect (under voltage) to the computer via USB ;
2. Put the Kinect on the ground, pointed toward the ceilling ; be aware that your arm must be perpendicular to the Kinect in order to control the drone properly ;
2015-07-20 19:25:54 +00:00
2. Lancer le "launchfile" kinect_commander.launch : `roslaunch hand_control kinect_commander.launch` ;
3. Vérifier les paramètres du filtre :
- lancer rviz : `rosrun rqt_rviz rqt_rviz`
- visualiser la sortie du filtrage (topic : `/filter/output` ; frame : `/camera_depth_optical_frame`) et repérer la main ;
- lancer rqt_reconfigure : `rosrun rqt_reconfigure rqt_reconfigure` pour :
- modifier les paramètres du filtre jusquà ne voir que les points de la main/gant/pancarte sur rviz (voir ci-dessous).
- modifier le paramètre `neutral_alt` du nœud `commander` à la hauteur souhaitée (en mètres). Cest la hauteur de la main qui correspondra à limmobilité de laltitude.
### Paramètres du filtre ###
Les paramètres du filtre (modifiables avec `dynamic_reconfigure` et en particulier `rqt_reconfigure`) sont :
* `z_max` : en mètres, altitude maximale de la main, doit être inférieure à la hauteur du plafond.
* pour un gant ou un carton *coloré* (vert, bleu etc.), on a généralement :
- `hue` : par exemple 220 (bleu ciel) ou 150 (vert) ou 0 (rose/rouge) ;
- `delta_hue` : entre 10 et 20 ;
- `sat/val_min` : 0.0 ;
- `sat/val_max` : 1.0 ;
* pour un gant *noir* :
- `hue` : 0 ;
- `delta_hue` : 180 ;
- `sat_min` : 0.0 ;
- `sat_max` : 1.0 ;
- `val_min` : 0.0 ;
- `val_max` : 0.3 (à modifier à votre convenance);
### Autres paramètres ###
Toujours avec `rqt_reconfigure`, cette fois pour le nœud `estimator` :
- `reverse` : échange x et y (axes de la Kinect) (valeur par défaut pour une utilisation normale : faux [décoché])
- `reverse_angle` : modifie laxe choisi pour calculer langle de la main (valeur par défaut pour un utilisation normale : faux [décoché])
## Connexion au drone et pilotage ##
* Connecter lordinateur au réseau wifi du drone ;
* Lancer le "launchfile" ardrone.launch : `roslaunch hand_control ardrone.launch` ;
* Pour décoller :
- soit `rostopic pub /ardrone/takeoff std_msgs/Empty` ;
- soit lancer le nœud keyboard_cmd : `rosrun hand_control keyboard_cmd` et utiliser la touche *t* du clavier.
* Pour atterrir :
- soit `rostopic pub /ardrone/land std_msgs/Empty` ;
- soit, avec keyboard_cmd, utiliser la touche *b* du clavier.
* Arrêt durgence :
- soit `rostopic pub /ardrone/reset std_msgs/Empty` ;
- soit, avec keyboard_cmd, utiliser la touche *g* du clavier.
### Commande à la main ###
* Avancer/reculer & translations latérales : inclinaison de la main ;
* Tourner (rotation autours de laxe z) : angle de laxe de la main avec laxe parallèle au sol et perpendiculaire à la Kinect ;
* Monter/descendre : altitude de la main.
### Options et paramètres de la commande ###
Pour éditer les options de la commande, lancer si ce nest déjà fait `rosrun rqt_reconfigure rqt_reconfigure` :
- `max_curvature` : non utilisé pour linstantt ;
- `x/y/z/theta_minimal_deviation` : seuils à partir desquels le mouvement de la main est pris en compte. Tout mettre à 0.0 rend le comportement complétement linéaire.
* x, y : entre 0. et 1. (il sagit des composantes x et y de la normale au plan);
* z : en mètre ;
* theta : en degrés.
- `neutral_alt` : hauteur de la main qui correspond à limmobilité de laltitude du drone ;
- `min_points_number` : nombre minimal de points (du nuage de points qui a servi à régresser le plan reçu) nécessaire pour quune commande soit envoyé au drone.
- `angle/x/y/z_vel` : coefficients de proportionnalité à appliquer aux données en entrée pour établir la commande envoyée au drone. Les augmenter augmentera la vitesse du drone.
- `up_fact` : coefficient de proportionnalité à appliquer à la commande augmentant laltitude du drone, par rapport à la commande équivalente la diminuant (pour corriger leffet de la gravité).
### Notes sur `keyboard_cmd` ###
Il permet de publier des commandes sur le topic `cmd_vel` et ainsi de piloter le drone. Il est prévu pour les claviers azerty. Pour le lancer :
```
#!sh
rosrun hand_control keyboard_cmd
```
Pour augmenter/diminuer les vitesses (expliqué sur laffichage du programme) : touches a,z,e,r et w,x,c,v
Laffichage des informations reçues du drone nest mise à jour quà loccasion de lappui sur une touche.
Pour quitter : Ctr+C, et appui sur "Entrée" pour retrouver laffichage de la console.
# Problème(s) rencontré(s) — Améliorations souhaitables #
- Si des commandes sont publiées sur `cmd_vel` (depuis la Kinect par exemple) après le lancement du fichier `ardrone.launch` et avant le décollage du drone, alors, après le décollage, de drone semble obéir aux commandes publiées avant le décollage.
- Comme écrit plus haut, laffichage des informations reçues du drone sur `keyboard_cmd` nest mise à jour quà loccasion de lappui sur une touche, et peut donc rester fixe quand on nutilise pas la commande au clavier.
- Le décollage/atterrissage nest pas possible à commander avec la main. Il faut utiliser le clavier (`keyboard_cmd` ou `rostopic pub`) à la place. Il est possible de de remédier à cela en créant deux nouveaux seuils, minimaux et maximaux, pour la hauteur de la main : une main très basse ferait atterrir le drone, une main très haute le ferait décoller.