Table des matières

Tutoriel ROS / Bridge-Mocap

Installer ros-electric-desktop-full : http://www.ros.org/wiki/electric/Installation/Ubuntu

Installer la Stack Bridge Mocap↔Messages ROS via git :

git clone https://github.com/laas/motion_analysis_mocap.git

Puis mettre à jour le sous-module evart-client (depuis le répertoire de la stack motion_analysis_mocap) :

git submodule init
git submodule update

Installer le module:

rosmake --rosdep-install motion_analysis_mocap

Nous pouvons désormais lancer ROS et utiliser le bridge en mode console:

Lancer roscore (http://www.ros.org/wiki/roscore) (lance ROS Master + Parameter Server + Rosout)

roscore

Lancer le bridge :

roslaunch evart_bridge start.launch (lance le node evart (On peut aussi lancer l'exécutable evart directement)

Pour afficher la console ROS (http://www.ros.org/wiki/rxconsole) et voir les messages échangés.

rxconsole

Nous pouvons vérifier que notre noeud est bien lancé:

rosnode list

doit renvoyer

/evart
/rosout

Lister les topics disponibles actuellement:

rostopic list

/rosout
/rosout_agg
/tf

Pour récupérer les informations renvoyées par le mocap nous devons créer un nouveau topic dédié. Pour ce faire le bridge fournit un service spécifique auquel nous devons envoyer une requête.

Le bridge propose plusieurs services que nous pouvons lister:

rosservice list

/evart/get_loggers
/evart/list_segments
/evart/set_logger_level
/evart/track_segments
/rosout/get_loggers
/rosout/set_logger_level

Le service list_segments nous permet de connaître les objets (frame) qui sont actuellement observés par le mocap:

rosservice call /evart/list_segments

bodies: 
- 
  name: left-foot
  segments: 
    - 
      name: origin
      parent: 4294967295
  dofs: []
- 
  name: helmet
  segments: 
    - 
      name: origin
      parent: 4294967295
  dofs: []
- 
  name: table
  segments: 
    - 
      name: origin
      parent: 4294967295
  dofs: []
- 
  name: laas-box
  segments: 
    - 
      name: origin
      parent: 4294967295
  dofs: []

Pour créer le topic nous permettant de recevoir les informations de position et d'attitude concernant la table nous devons donc envoyer une requête au service track_segments en spécifiant l'objet que nous souhaitons tracker (ici le body table et le segment origin):

rosservice call /evart/track_segments table origin

Le topic correspondant doit apparaître:

rostopic list

/evart/table/origin
/rosout
/rosout_agg
/tf

Nous pouvons désormais récupérer les données concernant l'objet choisi:

rostopic echo /evart/table/origin

Pour connaître le type de messages qui sont publiés par le bridge pour ce topic:

rostopic info /evart/table/origin

Type: geometry_msgs/TransformStamped 

Publishers:   (ce topic est fourni par le bridge (evart))
 * /evart (http://shiva:42010/)
Subscribers: None  (Pour l'instant aucun noeud ROS n'est abonné au topic)

Nous pouvons examiner plus précisément la strucure du message utilisé :

rosmsg show geometry_msgs/TransformStamped

Header header
  uint32 seq
  time stamp
  string frame_id
string child_frame_id
geometry_msgs/Transform transform
    geometry_msgs/Vector3 translation
    float64 x
    float64 y
    float64 z
  geometry_msgs/Quaternion rotation
    float64 x
    float64 y
    float64 z
    float64 w

Il est possible d'afficher ces données grâce à l'outil ROS rxplot (http://www.ros.org/wiki/rxplot). Nous pouvons par exemple afficher en 3D la position de l'objet dans le repère monde du mocap:

rxplot --mode=3d /evart/table/origin/transform/translation/x:y:z/

Créer son package:

Créer un dossier qui servira de worspace: http://www.ros.org/wiki/ROS/Tutorials/InstallingandConfiguringROSEnvironment#Create_a_ROS_Workspace

Puis depuis ce dernier :

roscreate-pkg MonPackage std_msgs roscpp
Created package directory /home/shiva/ros_workspace/MonPackage
Created include directory /home/shiva/ros_workspace/MonPackage/include/MonPackage
Created cpp source directory /home/shiva/ros_workspace/MonPackage/src
Created package file /home/shiva/ros_workspace/MonPackage/Makefile
Created package file /home/shiva/ros_workspace/MonPackage/manifest.xml
Created package file /home/shiva/ros_workspace/MonPackage/CMakeLists.txt
Created package file /home/shiva/ros_workspace/MonPackage/mainpage.dox

Build du package:

rosmake MonPackage

Pour ajouter des sources à son package et créer des nodes (ou exécutable), les placer dans le fichier MonPackage/src

Ajouter ensuite dans le fichier CMakeLists.txt autogénéré la ligne correspondant au noeud que l'on veut créer:

rosbuild_add_executable(MonExe src/MonExe.cpp)

Puis lancer un make dans le répertoire du pakage.

Et Voilà !

format quaternions

http://bulletphysics.com/ftp/pub/test/physics/Bullet_User_Manual.pdf

http://www.ros.org/wiki/bullet

http://www.continuousphysics.com/Bullet/BulletFull/index.html

http://www.continuousphysics.com/Bullet/BulletFull/btQuaternion_8h_source.html

http://www.continuousphysics.com/Bullet/BulletFull/classbtQuadWord.html