void AudioPolicyService::AudioCommandThread::AudioCommand::dump(char* buffer, size_t size) { snprintf(buffer, size, " %02d %06d.%03d %01u %p\n", mCommand, (int)ns2s(mTime), (int)ns2ms(mTime)%1000, mWaitStatus, mParam); }
bool RealLidar2D::measure(const nanosecond& time, const Point2D& pose, Measure &valueSensed, Measure &valueIdeal) noexcept { if (time - timeLastMeasure_ < samplingTime_) return false; auto applyRes = [](double const &value, double const &resolution) -> double { if (resolution == .0) return value; return resolution*int(value/resolution); }; auto rangeLimit = [&](double const &value) -> double { if (value < rangeMin_) return rangeMin_; if (rangeMax_ < value) return rangeMax_; return value; }; auto angleLimit = [&](double const &value) -> double { return value<.0? 2.*pi+value : std::fmod(value,2.*pi) ; }; double const rangeNoise{rangeDistribution(generator)}; double const angleNoise{angleDistribution(generator)}; valueIdeal.m[1] = angleLimit(ns2s(time)*scanSpeed_); if (scanAngle_ == .0 || valueIdeal.m[1] <= scanAngle_ || 2.*pi-scanAngle_ <= valueIdeal.m[1]) { Lidar2D const *lidar = this; valueIdeal.m[0] = lidar->measure(valueIdeal.m[1],pose); valueSensed.m[0] = applyRes(rangeLimit(valueIdeal.m[0] + rangeNoise),rangeResolution_); valueSensed.m[1] = applyRes(angleLimit(valueIdeal.m[1] + angleNoise),angleResolution_); return true; } valueIdeal.m[0] = .0; valueSensed.m[0] = applyRes(rangeLimit(rangeNoise),rangeResolution_); valueSensed.m[1] = applyRes(angleLimit(valueIdeal.m[1] + angleNoise),angleResolution_); return true; }