transformable_interactive_server.h
Go to the documentation of this file.
00001 #ifndef __TRANSFORMABLE_INTERACTIVE_SERVER_H__
00002 #define __TRANSFORMABLE_INTERACTIVE_SERVER_H__
00003 
00004 #include <ros/ros.h>
00005 #include <interactive_markers/interactive_marker_server.h>
00006 #include <jsk_interactive_marker/transformable_object.h>
00007 #include <std_msgs/Float32.h>
00008 #include <std_msgs/String.h>
00009 #include <std_srvs/Empty.h>
00010 #include <geometry_msgs/PoseStamped.h>
00011 #include <map>
00012 #include <jsk_rviz_plugins/OverlayText.h>
00013 #include <iostream>
00014 #include <sstream>
00015 #include <tf/transform_listener.h>
00016 #include <dynamic_reconfigure/server.h>
00017 #include <jsk_interactive_marker/InteractiveSettingConfig.h>
00018 #include <jsk_interactive_marker/GetTransformableMarkerPose.h>
00019 #include <jsk_interactive_marker/SetTransformableMarkerPose.h>
00020 #include <jsk_interactive_marker/GetTransformableMarkerColor.h>
00021 #include <jsk_interactive_marker/SetTransformableMarkerColor.h>
00022 #include <jsk_interactive_marker/GetTransformableMarkerFocus.h>
00023 #include <jsk_interactive_marker/SetTransformableMarkerFocus.h>
00024 #include <jsk_interactive_marker/GetMarkerDimensions.h>
00025 #include <jsk_interactive_marker/SetMarkerDimensions.h>
00026 #include <jsk_interactive_marker/GetType.h>
00027 #include <jsk_interactive_marker/GetTransformableMarkerExistence.h>
00028 #include <jsk_interactive_marker/MarkerDimensions.h>
00029 #include <jsk_interactive_marker/PoseStampedWithName.h>
00030 
00031 using namespace std;
00032 
00033 namespace jsk_interactive_marker
00034 {
00035   class TransformableInteractiveServer{
00036   public:
00037     TransformableInteractiveServer();
00038     ~TransformableInteractiveServer();
00039 
00040     void processFeedback( const visualization_msgs::InteractiveMarkerFeedbackConstPtr &feedback );
00041     void setRadius(std_msgs::Float32 msg);
00042     void setSmallRadius(std_msgs::Float32 msg);
00043     void setX(std_msgs::Float32 msg);
00044     void setY(std_msgs::Float32 msg);
00045     void setZ(std_msgs::Float32 msg);
00046 
00047     void setPose( const geometry_msgs::PoseStampedConstPtr &msg_ptr , bool for_interactive_control=false);
00048     void addPose(geometry_msgs::Pose msg);
00049     void addPoseRelative(geometry_msgs::Pose msg);
00050 
00051     void setControlRelativePose(geometry_msgs::Pose msg);
00052 
00053     void setColor(std_msgs::ColorRGBA msg);
00054 
00055     void insertNewBox( std::string frame_id, std::string name, std::string description );
00056     void insertNewCylinder( std::string frame_id, std::string name, std::string description );
00057     void insertNewTorus( std::string frame_id, std::string name, std::string description );
00058     void insertNewMesh( std::string frame_id, std::string name, std::string description , std::string mesh_resource, bool mesh_use_embedded_materials);
00059 
00060     void insertNewObject(TransformableObject* tobject, std::string name);
00061     void eraseObject(std::string name);
00062     void eraseAllObject();
00063     void eraseFocusObject();
00064 
00065     void run();
00066     void focusTextPublish();
00067     void focusPosePublish();
00068     void focusObjectMarkerNamePublish();
00069 
00070     void updateTransformableObject(TransformableObject* tobject);
00071 
00072     bool getPoseService(jsk_interactive_marker::GetTransformableMarkerPose::Request &req,jsk_interactive_marker::GetTransformableMarkerPose::Response &res, bool for_interactive_control);
00073     bool setPoseService(jsk_interactive_marker::SetTransformableMarkerPose::Request &req,jsk_interactive_marker::SetTransformableMarkerPose::Response &res, bool for_interactive_control);
00074     bool getColorService(jsk_interactive_marker::GetTransformableMarkerColor::Request &req,jsk_interactive_marker::GetTransformableMarkerColor::Response &res);
00075     bool setColorService(jsk_interactive_marker::SetTransformableMarkerColor::Request &req,jsk_interactive_marker::SetTransformableMarkerColor::Response &res);
00076     bool getFocusService(jsk_interactive_marker::GetTransformableMarkerFocus::Request &req,jsk_interactive_marker::GetTransformableMarkerFocus::Response &res);
00077     bool setFocusService(jsk_interactive_marker::SetTransformableMarkerFocus::Request &req,jsk_interactive_marker::SetTransformableMarkerFocus::Response &res);
00078     bool getTypeService(jsk_interactive_marker::GetType::Request &req,jsk_interactive_marker::GetType::Response &res);
00079     bool getExistenceService(jsk_interactive_marker::GetTransformableMarkerExistence::Request &req,jsk_interactive_marker::GetTransformableMarkerExistence::Response &res);
00080     bool setDimensionsService(jsk_interactive_marker::SetMarkerDimensions::Request &req,jsk_interactive_marker::SetMarkerDimensions::Response &res);
00081     bool getDimensionsService(jsk_interactive_marker::GetMarkerDimensions::Request &req,jsk_interactive_marker::GetMarkerDimensions::Response &res);
00082     bool hideService(std_srvs::Empty::Request& req,
00083                      std_srvs::Empty::Response& res);
00084     bool showService(std_srvs::Empty::Request& req,
00085                      std_srvs::Empty::Response& res);
00086     void publishMarkerDimensions();
00087 
00088     bool requestMarkerOperateService(jsk_rviz_plugins::RequestMarkerOperate::Request &req,jsk_rviz_plugins::RequestMarkerOperate::Response &res);
00089     virtual void configCallback(InteractiveSettingConfig &config, uint32_t level);
00090     void SetInitialInteractiveMarkerConfig( TransformableObject* tobject );
00091 
00092     void tfTimerCallback(const ros::TimerEvent&);
00093     bool setPoseWithTfTransformation(TransformableObject* tobject, geometry_msgs::PoseStamped pose_stamped, bool for_interactive_control=false);
00094     
00095     std::string focus_object_marker_name_;
00096     ros::NodeHandle* n_;
00097 
00098     boost::mutex mutex_;
00099 
00100     ros::Subscriber setcolor_sub_;
00101     ros::Subscriber setpose_sub_;
00102     ros::Subscriber setcontrolpose_sub_;
00103     ros::Subscriber addpose_sub_;
00104     ros::Subscriber addpose_relative_sub_;
00105     
00106     ros::Subscriber setcontrol_relative_sub_;
00107     
00108     ros::Subscriber set_r_sub_;
00109     ros::Subscriber set_sm_r_sub_;
00110     ros::Subscriber set_h_sub_;
00111     ros::Subscriber set_x_sub_;
00112     ros::Subscriber set_y_sub_;
00113     ros::Subscriber set_z_sub_;
00114     
00115     ros::ServiceServer hide_srv_;
00116     ros::ServiceServer show_srv_;
00117     ros::ServiceServer get_pose_srv_;
00118     ros::ServiceServer get_control_pose_srv_;
00119     ros::ServiceServer set_pose_srv_;
00120     ros::ServiceServer set_control_pose_srv_;
00121     ros::ServiceServer get_color_srv_;
00122     ros::ServiceServer set_color_srv_;
00123     ros::ServiceServer get_focus_srv_;
00124     ros::ServiceServer set_focus_srv_;
00125     ros::ServiceServer get_type_srv_;
00126     ros::ServiceServer get_exist_srv_;
00127     ros::ServiceServer set_dimensions_srv;
00128     ros::ServiceServer get_dimensions_srv;
00129     ros::Publisher marker_dimensions_pub_;
00130     ros::ServiceServer request_marker_operate_srv_;
00131 
00132     boost::shared_ptr <dynamic_reconfigure::Server<InteractiveSettingConfig> > config_srv_;
00133 
00134     ros::Subscriber setrad_sub_;
00135     ros::Publisher focus_name_text_pub_;
00136     ros::Publisher focus_pose_text_pub_;
00137     ros::Publisher focus_object_marker_name_pub_;
00138     ros::Publisher pose_pub_;
00139     ros::Publisher pose_with_name_pub_;
00140     interactive_markers::InteractiveMarkerServer* server_;
00141     map<string, TransformableObject*> transformable_objects_map_;
00142     boost::shared_ptr<tf::TransformListener> tf_listener_;
00143     int torus_udiv_;
00144     int torus_vdiv_;
00145     bool display_interactive_manipulator_;
00146     bool strict_tf_;
00147     int interactive_manipulator_orientation_;
00148     ros::Timer tf_timer;
00149   };
00150 }
00151 
00152 #endif


jsk_interactive_marker
Author(s): furuta
autogenerated on Sun Sep 13 2015 22:29:27