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 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à !
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