2018-08-08 16:13:45 +02:00
|
|
|
/*
|
|
|
|
* Rviz interactive object.
|
|
|
|
* @author : antoine.harle@etu.upmc.Fr
|
|
|
|
* @see : RvizInterface.cpp/.hpp
|
|
|
|
*/
|
|
|
|
|
2018-06-26 18:27:30 +02:00
|
|
|
#ifndef INTERACTIVEOBJECT_HPP
|
|
|
|
#define INTERACTIVEOBJECT_HPP
|
|
|
|
|
|
|
|
#include <interactive_markers/interactive_marker_server.h>
|
|
|
|
#include <tf/tf.h>
|
|
|
|
|
|
|
|
#include <rviz_interface/StateSpace.h>
|
|
|
|
|
|
|
|
using namespace visualization_msgs;
|
|
|
|
|
|
|
|
class InteractiveObject
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
unsigned int _objectID; //Identifiant de l'objet
|
|
|
|
static unsigned int nextObjectID;
|
2018-07-02 11:09:50 +02:00
|
|
|
std::string _name; //Nom de l'objet
|
|
|
|
unsigned int _type; //Type de l'objet
|
|
|
|
bool _showVisuals; //Indique si les infos visuelles sont affichées
|
|
|
|
bool _followObject; //Indique si le marker suit l'objet
|
2018-06-26 18:27:30 +02:00
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
InteractiveMarker _int_marker; //Marker interactif
|
|
|
|
Marker _error_marker; //Marker visuel de zone d'erreur
|
|
|
|
|
|
|
|
interactive_markers::InteractiveMarkerServer* _server; //Serveur d'InteractiveMaker
|
|
|
|
|
|
|
|
rviz_interface::StateSpace _state; //Etat "mémoire"
|
|
|
|
|
|
|
|
//Publisher ROS
|
2018-06-26 18:27:30 +02:00
|
|
|
ros::Publisher* _objective_pub;
|
2018-06-29 18:22:49 +02:00
|
|
|
ros::Publisher* _visual_pub;
|
2018-06-26 18:27:30 +02:00
|
|
|
|
|
|
|
public:
|
2018-08-10 16:57:26 +02:00
|
|
|
InteractiveObject(interactive_markers::InteractiveMarkerServer* server, const std::string& name, unsigned int type, unsigned int shape, const tf::Vector3& position = tf::Vector3(0,0,0));
|
2018-06-26 18:27:30 +02:00
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Construit un InteractiveMarker
|
2018-08-10 16:57:26 +02:00
|
|
|
void createInteractiveMarker(Marker& marker, const tf::Vector3& position = tf::Vector3(0,0,0));
|
2018-06-26 18:27:30 +02:00
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Fonction callback du serveur d' InteractiveMarker
|
2018-06-26 18:27:30 +02:00
|
|
|
void processFeedback( const InteractiveMarkerFeedbackConstPtr &feedback );
|
2018-07-02 11:09:50 +02:00
|
|
|
|
|
|
|
//Ajoute une fonction bouton
|
2018-06-26 18:27:30 +02:00
|
|
|
void addButtoncontrol();
|
2018-07-02 11:09:50 +02:00
|
|
|
//Ajoute des controle pour 6DOF (Déplacement dans l'espace)
|
2018-06-26 18:27:30 +02:00
|
|
|
void add6DOFcontrol();
|
2018-07-02 11:47:26 +02:00
|
|
|
//Ajoute des controle pour 3DOF (Déplacement dans le plan x/z)
|
2018-06-26 18:27:30 +02:00
|
|
|
void add3DOFcontrol();
|
2018-07-02 11:47:26 +02:00
|
|
|
//Ajoute des controle pour 3DOF (Déplacement dans le plan)
|
|
|
|
void add3DOFcontrol(const tf::Vector3& normal);
|
2018-06-26 18:27:30 +02:00
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Ajoute des infos visuelles (Zone d'erreur)
|
2018-06-28 14:40:20 +02:00
|
|
|
void addVisuals();
|
2018-07-02 11:09:50 +02:00
|
|
|
//Rafraichis les infos visuelles
|
2018-06-29 18:22:49 +02:00
|
|
|
void updateVisuals();
|
2018-06-28 14:40:20 +02:00
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Met à jour la zone d'erreur
|
2018-06-28 14:40:20 +02:00
|
|
|
void setErrorArea(double error);
|
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Déplace le marker à une position donnée
|
2018-06-29 15:31:04 +02:00
|
|
|
void moveTo(const tf::Vector3& new_pos);
|
|
|
|
|
2018-07-02 11:09:50 +02:00
|
|
|
//Accesseurs
|
2018-07-02 18:13:46 +02:00
|
|
|
const std::string& name() const{ return _name;}
|
2018-07-02 11:09:50 +02:00
|
|
|
void setObjectivePublisher(ros::Publisher* objective_pub){ _objective_pub=objective_pub;}
|
|
|
|
void setVisualizationPublisher(ros::Publisher* visualization_pub){ _visual_pub=visualization_pub;}
|
2018-06-29 18:22:49 +02:00
|
|
|
InteractiveMarker& int_marker(){ return _int_marker;}
|
|
|
|
Marker& err_marker(){ return _error_marker;}
|
2018-06-26 18:27:30 +02:00
|
|
|
rviz_interface::StateSpace& state(){ return _state;}
|
2018-06-29 15:31:04 +02:00
|
|
|
bool isFollowing() const{ return _followObject;}
|
2018-06-29 18:22:49 +02:00
|
|
|
void follow(bool follow = true){ _followObject = follow;}
|
|
|
|
void showVisuals(bool showVisuals = true){ _showVisuals=showVisuals; updateVisuals();}
|
2018-06-26 18:27:30 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|