Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdr_robot/sensors/sensor_base.h>
00023
00024 namespace stdr_robot {
00025
00036 Sensor::Sensor(
00037 const nav_msgs::OccupancyGrid& map,
00038 const std::string& name,
00039 ros::NodeHandle& n,
00040 const geometry_msgs::Pose2D& sensorPose,
00041 const std::string& sensorFrameId,
00042 float updateFrequency)
00043 :
00044 _map(map),
00045 _namespace(name),
00046 _sensorPose(sensorPose),
00047 _sensorFrameId(sensorFrameId),
00048 _updateFrequency(updateFrequency),
00049 _gotTransform(false)
00050 {
00051 _timer = n.createTimer(
00052 ros::Duration(1/updateFrequency), &Sensor::checkAndUpdateSensor, this);
00053 _tfTimer = n.createTimer(
00054 ros::Duration(1/(2*updateFrequency)), &Sensor::updateTransform, this);
00055 }
00056
00057
00063 void Sensor::checkAndUpdateSensor(const ros::TimerEvent& ev)
00064 {
00065 if (!_gotTransform) {
00066 return;
00067 }
00068
00069 updateSensorCallback();
00070 }
00071
00076 void Sensor::updateTransform(const ros::TimerEvent&)
00077 {
00078 try {
00079 _tfListener.waitForTransform("map_static",
00080 _namespace + "_" + _sensorFrameId,
00081 ros::Time(0),
00082 ros::Duration(0.2));
00083 _tfListener.lookupTransform("map_static",
00084 _namespace + "_" + _sensorFrameId,
00085 ros::Time(0), _sensorTransform);
00086 _gotTransform = true;
00087 }
00088 catch (tf::TransformException ex) {
00089 ROS_DEBUG("%s",ex.what());
00090 }
00091 }
00092 }