00001 #ifndef GAZEBO_ROS_IR_SENSOR_HH 00002 #define GAZEBO_ROS_IR_SENSOR_HH 00003 00004 #include <string> 00005 00006 #include <boost/bind.hpp> 00007 #include <boost/thread.hpp> 00008 00009 #include <ros/ros.h> 00010 #include <ros/advertise_options.h> 00011 #include "std_msgs/Float32.h" 00012 00013 #include <sdf/Param.hh> 00014 #include <gazebo/physics/physics.hh> 00015 #include <gazebo/transport/TransportTypes.hh> 00016 #include <gazebo/msgs/MessageTypes.hh> 00017 #include <gazebo/common/Time.hh> 00018 #include <gazebo/common/Plugin.hh> 00019 #include <gazebo/common/Events.hh> 00020 #include <gazebo/sensors/SensorTypes.hh> 00021 #include <gazebo/plugins/RayPlugin.hh> 00022 #include <gazebo_plugins/gazebo_ros_utils.h> 00023 00024 #include <gazebo_plugins/PubQueue.h> 00025 00026 namespace gazebo { 00027 class GazeboRosIrSensor : public RayPlugin { 00028 // \brief Constructor 00029 public: GazeboRosIrSensor(); 00030 00031 // \brief Destructor 00032 public: ~GazeboRosIrSensor(); 00033 00034 // \brief Load the plugin 00035 // \param take in SDF root element 00036 public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf); 00037 00038 // \brief Keep track of number of connections 00039 private: int ir_sensor_connect_count_; 00040 private: void IrSensorConnect(); 00041 private: void IrSensorDisconnect(); 00042 00043 // Pointer to the model 00044 GazeboRosPtr gazebo_ros_; 00045 private: std::string world_name_; 00046 private: physics::WorldPtr world_; 00047 00048 // \brief The parent sensor 00049 private: sensors::RaySensorPtr parent_ray_sensor_; 00050 00051 // \brief pointer to ros node 00052 private: ros::NodeHandle *rosnode_; 00053 private: ros::Publisher pub_; 00054 private: PubQueue<std_msgs::Float32>::Ptr pub_queue_; 00055 00056 // \brief topic name 00057 private: std::string topic_name_; 00058 00059 // \brief frame transform name, should match link name 00060 private: std::string frame_name_; 00061 00062 // \brief tf prefix 00063 private: std::string tf_prefix_; 00064 00065 // \brief for setting ROS name space 00066 private: std::string robot_namespace_; 00067 00068 // deferred load in case ros is blocking 00069 private: sdf::ElementPtr sdf; 00070 private: void LoadThread(); 00071 private: boost::thread deferred_load_thread_; 00072 private: unsigned int seed; 00073 00074 private: gazebo::transport::NodePtr gazebo_node_; 00075 private: gazebo::transport::SubscriberPtr ir_sensor_scan_sub_; 00076 private: void OnScan(ConstLaserScanStampedPtr &_msg); 00077 00078 // \brief prevent blocking 00079 private: PubMultiQueue pmq; 00080 }; 00081 } 00082 #endif