pid_controller.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2016 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H
20 #define GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H
21 
23 
24 #include <limits>
25 
26 /* \file Simple PID controller.
27  Implements a proportional-integral-derivative controller.
28  Used when we want to iteratively control a variable to converge some other
29  observed value to a 'set-point'.
30  Gains can be set to adjust sensitivity to current error (p), the integral
31  of error (i), and the derivative of error (d). */
32 
33 namespace grpc_core {
34 
36  public:
37  class Args {
38  public:
39  double gain_p() const { return gain_p_; }
40  double gain_i() const { return gain_i_; }
41  double gain_d() const { return gain_d_; }
42  double initial_control_value() const { return initial_control_value_; }
43  double min_control_value() const { return min_control_value_; }
44  double max_control_value() const { return max_control_value_; }
45  double integral_range() const { return integral_range_; }
46 
47  Args& set_gain_p(double gain_p) {
48  gain_p_ = gain_p;
49  return *this;
50  }
51  Args& set_gain_i(double gain_i) {
52  gain_i_ = gain_i;
53  return *this;
54  }
55  Args& set_gain_d(double gain_d) {
56  gain_d_ = gain_d;
57  return *this;
58  }
61  return *this;
62  }
65  return *this;
66  }
69  return *this;
70  }
73  return *this;
74  }
75 
76  private:
77  double gain_p_ = 0.0;
78  double gain_i_ = 0.0;
79  double gain_d_ = 0.0;
80  double initial_control_value_ = 0.0;
84  };
85 
86  explicit PidController(const Args& args);
87 
90  void Reset() {
91  last_error_ = 0.0;
92  last_dc_dt_ = 0.0;
93  error_integral_ = 0.0;
94  }
95 
98  double Update(double error, double dt);
99 
101  double last_control_value() const { return last_control_value_; }
102 
104  double error_integral() const { return error_integral_; }
105 
106  private:
107  double last_error_ = 0.0;
108  double error_integral_ = 0.0;
110  double last_dc_dt_ = 0.0;
111  const Args args_;
112 };
113 
114 } // namespace grpc_core
115 
116 #endif /* GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H */
grpc_core::PidController::PidController
PidController(const Args &args)
Definition: pid_controller.cc:27
grpc_core::PidController::Args::set_integral_range
Args & set_integral_range(double integral_range)
Definition: pid_controller.h:71
grpc_core::PidController::Args::set_min_control_value
Args & set_min_control_value(double min_control_value)
Definition: pid_controller.h:63
grpc_core::PidController::args_
const Args args_
Definition: pid_controller.h:111
grpc_core::PidController::Args::min_control_value
double min_control_value() const
Definition: pid_controller.h:43
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::PidController::Args::set_gain_p
Args & set_gain_p(double gain_p)
Definition: pid_controller.h:47
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_core::PidController::error_integral
double error_integral() const
Returns the current error integral (mostly for testing)
Definition: pid_controller.h:104
grpc_core::PidController::Args::set_max_control_value
Args & set_max_control_value(double max_control_value)
Definition: pid_controller.h:67
grpc_core::PidController::Args::gain_p
double gain_p() const
Definition: pid_controller.h:39
grpc_core::PidController::Args::min_control_value_
double min_control_value_
Definition: pid_controller.h:81
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
max
int max
Definition: bloaty/third_party/zlib/examples/enough.c:170
grpc_core::PidController::Args
Definition: pid_controller.h:37
grpc_core::PidController::Args::gain_d_
double gain_d_
Definition: pid_controller.h:79
grpc_core::PidController::Args::max_control_value
double max_control_value() const
Definition: pid_controller.h:44
grpc_core::PidController::Args::gain_p_
double gain_p_
Definition: pid_controller.h:77
min
#define min(a, b)
Definition: qsort.h:83
grpc_core::PidController::last_control_value_
double last_control_value_
Definition: pid_controller.h:109
grpc_core::PidController::Args::set_initial_control_value
Args & set_initial_control_value(double initial_control_value)
Definition: pid_controller.h:59
grpc_core::PidController::last_control_value
double last_control_value() const
Returns the last control value calculated.
Definition: pid_controller.h:101
grpc_core::PidController::Args::integral_range
double integral_range() const
Definition: pid_controller.h:45
grpc_core::PidController::Update
double Update(double error, double dt)
Definition: pid_controller.cc:30
grpc_core::PidController
Definition: pid_controller.h:35
grpc_core::PidController::Args::gain_i
double gain_i() const
Definition: pid_controller.h:40
grpc_core::PidController::Args::initial_control_value
double initial_control_value() const
Definition: pid_controller.h:42
grpc_core::PidController::Args::max_control_value_
double max_control_value_
Definition: pid_controller.h:82
grpc_core::PidController::Args::set_gain_d
Args & set_gain_d(double gain_d)
Definition: pid_controller.h:55
grpc_core::PidController::error_integral_
double error_integral_
Definition: pid_controller.h:108
grpc_core::PidController::Args::gain_i_
double gain_i_
Definition: pid_controller.h:78
grpc_core::PidController::Reset
void Reset()
Definition: pid_controller.h:90
grpc_core::PidController::last_dc_dt_
double last_dc_dt_
Definition: pid_controller.h:110
grpc_core::PidController::Args::set_gain_i
Args & set_gain_i(double gain_i)
Definition: pid_controller.h:51
grpc_core::PidController::Args::initial_control_value_
double initial_control_value_
Definition: pid_controller.h:80
grpc_core::PidController::Args::integral_range_
double integral_range_
Definition: pid_controller.h:83
grpc_core::PidController::Args::gain_d
double gain_d() const
Definition: pid_controller.h:41
grpc_core::PidController::last_error_
double last_error_
Definition: pid_controller.h:107
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:52