|
33 | 33 |
|
34 | 34 | #include "gz/sensors/ThermalCameraSensor.hh" |
35 | 35 | #include "gz/sensors/ImageGaussianNoiseModel.hh" |
| 36 | +#include "gz/sensors/ImageNoise.hh" |
36 | 37 | #include "gz/sensors/RenderingEvents.hh" |
37 | 38 | #include "gz/sensors/SensorFactory.hh" |
38 | 39 |
|
@@ -319,12 +320,20 @@ bool ThermalCameraSensor::CreateCamera() |
319 | 320 | // Add gaussian noise to camera sensor |
320 | 321 | if (noiseSdf.Type() == sdf::NoiseType::GAUSSIAN) |
321 | 322 | { |
322 | | - this->dataPtr->noises[noiseType] = |
323 | | - NoiseFactory::NewNoiseModel(noiseSdf, "camera"); |
| 323 | + // Skip applying noise if mean and stddev are 0 - this avoids |
| 324 | + // doing an extra render pass in gz-rendering |
| 325 | + // Note ImageGaussianNoiseModel only uses mean and stddev and does not |
| 326 | + // use bias parameters. |
| 327 | + if (!math::equal(noiseSdf.Mean(), 0.0) || |
| 328 | + !math::equal(noiseSdf.StdDev(), 0.0)) |
| 329 | + { |
| 330 | + this->dataPtr->noises[noiseType] = |
| 331 | + ImageNoiseFactory::NewNoiseModel(noiseSdf, "thermal_camera"); |
324 | 332 |
|
325 | | - std::dynamic_pointer_cast<ImageGaussianNoiseModel>( |
326 | | - this->dataPtr->noises[noiseType])->SetCamera( |
327 | | - this->dataPtr->thermalCamera); |
| 333 | + std::dynamic_pointer_cast<ImageGaussianNoiseModel>( |
| 334 | + this->dataPtr->noises[noiseType])->SetCamera( |
| 335 | + this->dataPtr->thermalCamera); |
| 336 | + } |
328 | 337 | } |
329 | 338 | else if (noiseSdf.Type() != sdf::NoiseType::NONE) |
330 | 339 | { |
|
0 commit comments