ros2_control - rolling
Loading...
Searching...
No Matches
control_toolbox
control_toolbox
include
control_toolbox
dither.hpp
1
// Copyright (c) 2009, Willow Garage, Inc.
2
//
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions are met:
5
//
6
// * Redistributions of source code must retain the above copyright
7
// notice, this list of conditions and the following disclaimer.
8
//
9
// * Redistributions in binary form must reproduce the above copyright
10
// notice, this list of conditions and the following disclaimer in the
11
// documentation and/or other materials provided with the distribution.
12
//
13
// * Neither the name of the Willow Garage nor the names of its
14
// contributors may be used to endorse or promote products derived from
15
// this software without specific prior written permission.
16
//
17
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
// POSSIBILITY OF SUCH DAMAGE.
28
29
// \author Kevin Watts
30
31
#ifndef CONTROL_TOOLBOX__DITHER_HPP_
32
#define CONTROL_TOOLBOX__DITHER_HPP_
33
34
#include <math.h>
35
#include <cstdlib>
36
#include <ctime>
37
#include <random>
38
39
#include "rcutils/logging_macros.h"
40
41
namespace
control_toolbox
42
{
43
/***************************************************/
53
class
Dither
54
{
55
public
:
56
Dither
();
57
62
double
update
();
63
64
/*
65
*\brief Dither gets an amplitude, must be >0 to initialize
66
*
67
*\param amplitude Amplitude of white noise output
68
*\param seed Random seed for white noise
69
*/
70
bool
init(
const
double
& amplitude,
const
double
& seed)
71
{
72
if
(amplitude < 0.0)
73
{
74
RCUTILS_LOG_ERROR(
"Dither amplitude not set properly. Amplitude must be >0."
);
75
return
false
;
76
}
77
78
amplitude_ = amplitude;
79
80
// seed generator for reproducible sequence of random numbers
81
generator_.seed(
static_cast<
unsigned
int
>
(seed));
82
83
return
true
;
84
}
85
86
/*
87
*\brief Generate a random number with random_device for non-deterministic random numbers
88
*/
89
static
double
generateRandomSeed()
90
{
91
std::random_device rdev{};
92
return
static_cast<
double
>
(rdev());
93
}
94
95
private
:
96
double
amplitude_;
97
double
saved_value_;
98
bool
has_saved_value_;
99
std::mt19937 generator_;
100
};
101
}
// namespace control_toolbox
102
103
#endif
// CONTROL_TOOLBOX__DITHER_HPP_
control_toolbox::Dither
Gives white noise at specified amplitude.
Definition
dither.hpp:54
control_toolbox::Dither::update
double update()
Get next Gaussian white noise point. Called in RT loop.
Definition
dither.cpp:40
control_toolbox
Definition
dither.hpp:42
Generated by
1.9.8