void GazeboRosSonar::Update()

in simulation_ws/src/rover/hector_gazebo_plugins/src/gazebo_ros_sonar.cpp [144:188]


void GazeboRosSonar::Update()
{
#if (GAZEBO_MAJOR_VERSION >= 8)
  common::Time sim_time = world->SimTime();
#else
  common::Time sim_time = world->GetSimTime();
#endif
  double dt = updateTimer.getTimeSinceLastUpdate().Double();

  // activate RaySensor if it is not yet active
  if (!sensor_->IsActive()) sensor_->SetActive(true);

#if (GAZEBO_MAJOR_VERSION >= 8)
  range_.header.stamp.sec  = (world->SimTime()).sec;
  range_.header.stamp.nsec = (world->SimTime()).nsec;
#else
  range_.header.stamp.sec  = (world->GetSimTime()).sec;
  range_.header.stamp.nsec = (world->GetSimTime()).nsec;
#endif

  // find ray with minimal range
  range_.range = std::numeric_limits<sensor_msgs::Range::_range_type>::max();
#if (GAZEBO_MAJOR_VERSION > 6)
  int num_ranges = sensor_->LaserShape()->GetSampleCount() * sensor_->LaserShape()->GetVerticalSampleCount();
#else
  int num_ranges = sensor_->GetLaserShape()->GetSampleCount() * sensor_->GetLaserShape()->GetVerticalSampleCount();
#endif
  for(int i = 0; i < num_ranges; ++i) {
#if (GAZEBO_MAJOR_VERSION > 6)
    double ray = sensor_->LaserShape()->GetRange(i);
#else
    double ray = sensor_->GetLaserShape()->GetRange(i);
#endif
    if (ray < range_.range) range_.range = ray;
  }

  // add Gaussian noise (and limit to min/max range)
  if (range_.range < range_.max_range) {
    range_.range = sensor_model_(range_.range, dt);
    if (range_.range < range_.min_range) range_.range = range_.min_range;
    if (range_.range > range_.max_range) range_.range = range_.max_range;
  }

  publisher_.publish(range_);
}