Skip to content

Commit

Permalink
Addresses some comments.
Browse files Browse the repository at this point in the history
  • Loading branch information
francocipollone committed Aug 12, 2021
1 parent 5935721 commit d3fc7b4
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
4 changes: 3 additions & 1 deletion include/ignition/sensors/Sensor.hh
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#pragma warning(pop)
#endif

#include <chrono>
#include <memory>
#include <string>

Expand Down Expand Up @@ -185,7 +186,8 @@ namespace ignition
/// When different metrics need to be published this method
/// could be overriden by subclasses.
/// \param[in] _now Current time.
public: virtual void PublishMetrics(const ignition::common::Time &_now);
public: virtual void PublishMetrics(
const std::chrono::duration<double> &_now);

IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING
/// \internal
Expand Down
40 changes: 25 additions & 15 deletions src/Sensor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class ignition::sensors::SensorPrivate

/// \brief Publishes information about the performance of the sensor.
/// \param[in] _now Current simulation time.
public: void PublishMetrics(const ignition::common::Time &_now);
public: void PublishMetrics(const std::chrono::duration<double> &_now);

/// \brief id given to sensor when constructed
public: SensorId id;
Expand All @@ -67,10 +67,10 @@ class ignition::sensors::SensorPrivate
public: ignition::common::Time nextUpdateTime;

/// \brief Last steady clock time reading from last Update call.
public: std::chrono::time_point<std::chrono::steady_clock> lastClockTime;
public: std::chrono::time_point<std::chrono::steady_clock> lastRealTime;

/// \brief Last sim time at Update call.
public: ignition::common::Time lastUpdateTime{0};
public: std::chrono::duration<double> lastUpdateTime{0};

/// \brief Transport node.
public: ignition::transport::Node node;
Expand Down Expand Up @@ -214,18 +214,26 @@ bool SensorPrivate::SetTopic(const std::string &_topic)
}

//////////////////////////////////////////////////
void Sensor::PublishMetrics(const ignition::common::Time &_now)
void Sensor::PublishMetrics(const std::chrono::duration<double> &_now)
{
return this->dataPtr->PublishMetrics(_now);
}

void SensorPrivate::PublishMetrics(const ignition::common::Time &_now)
//////////////////////////////////////////////////
void SensorPrivate::PublishMetrics(const std::chrono::duration<double> &_now)
{
if(!this->performanceSensorMetricsPub)
{
const auto validTopic = transport::TopicUtils::AsValidTopic(
this->topic + "/performance_metrics");
if (validTopic.empty())
{
ignerr << "Failed to set metrics sensor topic [" << topic << "]" <<
std::endl;
return;
}
this->performanceSensorMetricsPub =
node.Advertise<msgs::PerformanceSensorMetrics>(
this->topic + "/performance_metrics");
node.Advertise<msgs::PerformanceSensorMetrics>(validTopic);
}
if (!performanceSensorMetricsPub ||
!performanceSensorMetricsPub.HasConnections())
Expand All @@ -237,20 +245,22 @@ void SensorPrivate::PublishMetrics(const ignition::common::Time &_now)
double simUpdateRate;
double realUpdateRate;
const auto clockNow = std::chrono::steady_clock::now();
if(this->lastUpdateTime > 0)
// If lastUpdateTime == 0 means it wasn't initialized yet.
if(this->lastUpdateTime.count() > 0)
{
const double diffSimUpdate = _now.Double() -
this->lastUpdateTime.Double();
const double diffSimUpdate = _now.count() -
this->lastUpdateTime.count();
simUpdateRate = 1.0 / diffSimUpdate;
const double diffRealUpdate =
std::chrono::duration_cast<std::chrono::milliseconds>(
clockNow - this->lastClockTime).count() * 1e-3;
realUpdateRate = 1.0 / diffRealUpdate;
std::chrono::duration_cast<std::chrono::duration<double>>(
clockNow - this->lastRealTime).count();
realUpdateRate = diffRealUpdate < std::numeric_limits<double>::epsilon() ?
std::numeric_limits<double>::infinity() : 1.0 / diffRealUpdate;
}

// Update last time values.
this->lastUpdateTime = _now;
this->lastClockTime = clockNow;
this->lastRealTime = clockNow;

// Fill performance sensor metrics message.
msgs::PerformanceSensorMetrics performanceSensorMetricsMsg;
Expand Down Expand Up @@ -324,7 +334,7 @@ bool Sensor::Update(const ignition::common::Time &_now,
result = this->Update(_now);

// Publish metrics
this->PublishMetrics(_now);
this->PublishMetrics(std::chrono::duration<double>(_now.Double()));

if (!_force && this->dataPtr->updateRate > 0.0)
{
Expand Down

0 comments on commit d3fc7b4

Please sign in to comment.