src
sine_sweep.cpp
Go to the documentation of this file.
1
/*********************************************************************
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2008, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of the Willow Garage nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*********************************************************************/
34
35
// Original version: Melonee Wise <mwise@willowgarage.com>
36
37
#include <math.h>
38
#include <
control_toolbox/sine_sweep.h
>
39
40
namespace
control_toolbox
{
41
42
SineSweep::SineSweep
()
43
{
44
K_
=0.0;
45
L_
=0.0;
46
amplitude_
=0.0;
47
duration_
=
ros::Duration
(0.0);
48
cmd_
= 0.0;
49
}
50
51
SineSweep::~SineSweep
()
52
{
53
}
54
55
bool
SineSweep::init
(
double
start_freq,
double
end_freq,
double
duration,
double
amplitude)
56
{
57
if
(start_freq > end_freq)
58
return
false
;
59
if
(duration < 0 || amplitude < 0)
60
return
false
;
61
62
amplitude_
= amplitude;
63
duration_
=
ros::Duration
(duration);
64
//calculate the angular fequencies
65
start_angular_freq_
=2*M_PI*start_freq;
66
end_angular_freq_
=2*M_PI*end_freq;
67
68
//calculate the constants
69
K_
= (
start_angular_freq_
*duration)/log(
end_angular_freq_
/
start_angular_freq_
);
70
L_
= (duration)/log(
end_angular_freq_
/
start_angular_freq_
);
71
72
//zero out the command
73
cmd_
= 0.0;
74
75
return
true
;
76
}
77
78
double
SineSweep::update
(
ros::Duration
dt)
79
{
80
if
(dt<=
duration_
)
81
{
82
cmd_
=
amplitude_
*sin(
K_
*(exp((dt.
toSec
())/(
L_
))-1));
83
}
84
else
85
{
86
cmd_
=0.0;
87
}
88
89
return
cmd_
;
90
}
91
}
92
control_toolbox::SineSweep::start_angular_freq_
double start_angular_freq_
Definition:
sine_sweep.h:94
control_toolbox::SineSweep::update
double update(ros::Duration dt)
Update the SineSweep loop with nonuniform time step size.
Definition:
sine_sweep.cpp:78
control_toolbox::SineSweep::L_
double L_
Definition:
sine_sweep.h:97
control_toolbox::SineSweep::amplitude_
double amplitude_
Definition:
sine_sweep.h:92
control_toolbox::SineSweep::cmd_
double cmd_
Definition:
sine_sweep.h:98
control_toolbox
Definition:
dither.h:46
control_toolbox::SineSweep::~SineSweep
~SineSweep()
Destructor.
Definition:
sine_sweep.cpp:51
control_toolbox::SineSweep::K_
double K_
Definition:
sine_sweep.h:96
control_toolbox::SineSweep::init
bool init(double start_freq, double end_freq, double duration, double amplitude)
Intializes everything and calculates the constants for the sweep.
Definition:
sine_sweep.cpp:55
sine_sweep.h
control_toolbox::SineSweep::SineSweep
SineSweep()
Constructor.
Definition:
sine_sweep.cpp:42
control_toolbox::SineSweep::end_angular_freq_
double end_angular_freq_
Definition:
sine_sweep.h:95
DurationBase< Duration >::toSec
double toSec() const
ros::Duration
control_toolbox::SineSweep::duration_
ros::Duration duration_
Definition:
sine_sweep.h:93
control_toolbox
Author(s): Melonee Wise, Sachin Chitta, John Hsu
autogenerated on Wed May 11 2022 02:11:48