00001 00002 00003 #ifndef _YOCS_AR_PAIR_TRACKING_CLIENT_HPP_ 00004 #define _YOCS_AR_PAIR_TRACKING_CLIENT_HPP_ 00005 #include <ros/ros.h> 00006 00007 #include <tf/tf.h> 00008 #include <tf/transform_listener.h> 00009 #include <tf/transform_broadcaster.h> 00010 00011 #include <ar_track_alvar_msgs/AlvarMarkers.h> 00012 #include <yocs_msgs/ARPairList.h> 00013 #include <yocs_math_toolkit/common.hpp> 00014 #include <yocs_math_toolkit/geometry.hpp> 00015 00016 00017 namespace yocs { 00018 00019 class ARPairTrackingClient { 00020 public: 00021 ARPairTrackingClient(); 00022 ~ARPairTrackingClient(); 00023 void globalMarkersCB(const ar_track_alvar_msgs::AlvarMarkers::ConstPtr& msg); 00024 void broadcastMarkersTF(); 00025 protected: 00026 void createMirrorMarkers(); 00027 void createTargets(); 00028 void notifyARPairTracker(); 00029 void publishMarkerTFs(const std::string prefix, const ar_track_alvar_msgs::AlvarMarkers& markers); 00030 void publishTargetTFs(const std::string prefix, const ar_track_alvar_msgs::AlvarMarkers& markers); 00031 private: 00032 ar_track_alvar_msgs::AlvarMarkers global_markers_, global_markers_mirrors_; 00033 ros::Subscriber sub_global_marker_; 00034 ros::Publisher pub_update_ar_pair_; 00035 00036 tf::TransformListener tf_listener_; 00037 tf::TransformBroadcaster tf_brcaster_; 00038 double tf_broadcast_freq_; 00039 00040 std::string global_frame_; 00041 std::string global_marker_prefix_; 00042 std::string target_frame_postfix_; 00043 double baseline_; 00044 double target_offset_; 00045 }; 00046 } 00047 00048 #endif