NASA Astrobee Robot Software  Astrobee Version:
Flight software for the Astrobee robots operating inside the International Space Station.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
butterO3.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 
19 #ifndef IMU_INTEGRATION_BUTTERO3_H_
20 #define IMU_INTEGRATION_BUTTERO3_H_
21 
22 #include <imu_integration/filter.h>
23 
25 
26 #include <array>
27 
28 namespace imu_integration {
29 template <class Params>
30 class ButterO3 : public Filter {
31  public:
32  ButterO3() : initialized_(false) {}
33  // Returns filtered value and timestamp
34  double AddValue(const double value) final {
35  if (!initialized_) Initialize(value, Params::kGain);
36 
37  const int last_index = xv_.size() - 1;
38  // Shift input and output vals
39  for (int i = 0; i < last_index; ++i) {
40  xv_[i] = xv_[i + 1];
41  yv_[i] = yv_[i + 1];
42  }
43  // Add new values
44  xv_[last_index] = value / Params::kGain;
45  // Generate new output
46  yv_[last_index] = (xv_[0] + xv_[5]) + Params::kX14 * (xv_[1] + xv_[4]) + Params::kX23 * (xv_[2] + xv_[3]) +
47  (Params::kY2 * yv_[2]) + (Params::kY3 * yv_[3]) + (Params::kY4 * yv_[4]);
48  // Return most recent output
49  return yv_[last_index];
50  }
51 
52  private:
53  void Initialize(const double first_value, const double gain) {
54  for (auto& val : xv_) {
55  val = first_value / gain;
56  }
57  for (auto& val : yv_) {
58  val = first_value;
59  }
60 
61  initialized_ = true;
62  }
63 
64  // Notation taken from mkfilter site
65  // /www/usr/fisher/helpers/mkfilter
66  std::array<double, 6> xv_;
67  std::array<double, 6> yv_;
68  bool initialized_;
69 };
70 
72  static constexpr double kGain = 1.526307756e+03;
73  static constexpr double kX14 = 4.9560160746;
74  static constexpr double kX23 = 9.8680482239;
75  static constexpr double kY2 = 0.5457868345;
76  static constexpr double kY3 = -1.9654812209;
77  static constexpr double kY4 = 2.3989592965;
78 };
80 
82  static constexpr double kGain = 1.1572342485e+03;
83  static constexpr double kX14 = 3.9994195281;
84  static constexpr double kX23 = 6.9982585842;
85  static constexpr double kY2 = 5.4578683446e-01;
86  static constexpr double kY3 = -1.9654812209e+00;
87  static constexpr double kY4 = 2.3989592965e+00;
88 };
90 
92  static constexpr double kGain = 7.8754026491e+02;
93  static constexpr double kX14 = 3.0412147780e+00;
94  static constexpr double kX23 = 4.1236443339e+00;
95  static constexpr double kY2 = 5.4578683446e-01;
96  static constexpr double kY3 = -1.9654812209e+00;
97  static constexpr double kY4 = 2.3989592965e+00;
98 };
100 
101 // 125Hz
103  static constexpr double kGain = 8.092181701e+03;
104  static constexpr double kX14 = 3.9996372182;
105  static constexpr double kX23 = 6.9989116546;
106  static constexpr double kY2 = 0.7394265720;
107  static constexpr double kY3 = -2.4410797085;
108  static constexpr double kY4 = 2.6986876695;
109 };
111 
113  static constexpr double kGain = 9.170351272e+03;
114  static constexpr double kX14 = 4.3992967530;
115  static constexpr double kX23 = 8.1978902589;
116  static constexpr double kY2 = 0.7394265720;
117  static constexpr double kY3 = -2.4410797085;
118  static constexpr double kY4 = 2.6986876695;
119 };
121 
123  static constexpr double kGain = 5.957169629e+03;
124  static constexpr double kX14 = 3.2082237395;
125  static constexpr double kX23 = 4.6246712185;
126  static constexpr double kY2 = 0.7394265720;
127  static constexpr double kY3 = -2.4410797085;
128  static constexpr double kY4 = 2.6986876695;
129 };
131 
132 } // namespace imu_integration
133 
134 #endif // IMU_INTEGRATION_BUTTERO3_H_
imu_integration::ParamsButterO3S62_5Lp3N15_83::kY4
static constexpr double kY4
Definition: butterO3.h:97
filter.h
imu_integration::ParamsButterO3S62_5Lp3N29_16::kY4
static constexpr double kY4
Definition: butterO3.h:77
imu_integration::ParamsButterO3S125Lp3N41_66::kX14
static constexpr double kX14
Definition: butterO3.h:104
imu_integration::ParamsButterO3S62_5Lp3N20_83::kY3
static constexpr double kY3
Definition: butterO3.h:86
imu_integration::Filter
Definition: filter.h:23
logger.h
imu_integration::ParamsButterO3S125Lp3N33_33::kX23
static constexpr double kX23
Definition: butterO3.h:125
imu_integration::ParamsButterO3S62_5Lp3N15_83
Definition: butterO3.h:91
imu_integration::ParamsButterO3S125Lp3N46_66::kX23
static constexpr double kX23
Definition: butterO3.h:115
imu_integration::ParamsButterO3S62_5Lp3N29_16::kX23
static constexpr double kX23
Definition: butterO3.h:74
imu_integration::ParamsButterO3S125Lp3N33_33::kY4
static constexpr double kY4
Definition: butterO3.h:128
imu_integration::ParamsButterO3S125Lp3N33_33::kY2
static constexpr double kY2
Definition: butterO3.h:126
imu_integration::ParamsButterO3S62_5Lp3N15_83::kGain
static constexpr double kGain
Definition: butterO3.h:92
imu_integration::ParamsButterO3S125Lp3N41_66
Definition: butterO3.h:102
imu_integration::ParamsButterO3S62_5Lp3N20_83::kGain
static constexpr double kGain
Definition: butterO3.h:82
imu_integration::ParamsButterO3S125Lp3N33_33::kY3
static constexpr double kY3
Definition: butterO3.h:127
imu_integration::ParamsButterO3S125Lp3N33_33::kX14
static constexpr double kX14
Definition: butterO3.h:124
imu_integration::ParamsButterO3S125Lp3N46_66::kY3
static constexpr double kY3
Definition: butterO3.h:117
imu_integration::ButterO3::AddValue
double AddValue(const double value) final
Definition: butterO3.h:34
imu_integration::ParamsButterO3S62_5Lp3N29_16
Definition: butterO3.h:71
imu_integration::ParamsButterO3S125Lp3N46_66::kX14
static constexpr double kX14
Definition: butterO3.h:114
imu_integration
Definition: butterO1.h:26
imu_integration::ParamsButterO3S125Lp3N41_66::kY3
static constexpr double kY3
Definition: butterO3.h:107
imu_integration::ParamsButterO3S62_5Lp3N20_83
Definition: butterO3.h:81
imu_integration::ButterO3::ButterO3
ButterO3()
Definition: butterO3.h:32
imu_integration::ParamsButterO3S125Lp3N33_33
Definition: butterO3.h:122
imu_integration::ParamsButterO3S62_5Lp3N29_16::kY2
static constexpr double kY2
Definition: butterO3.h:75
imu_integration::ParamsButterO3S62_5Lp3N29_16::kX14
static constexpr double kX14
Definition: butterO3.h:73
imu_integration::ParamsButterO3S62_5Lp3N29_16::kY3
static constexpr double kY3
Definition: butterO3.h:76
imu_integration::ParamsButterO3S62_5Lp3N15_83::kX23
static constexpr double kX23
Definition: butterO3.h:94
imu_integration::ParamsButterO3S125Lp3N46_66::kGain
static constexpr double kGain
Definition: butterO3.h:113
imu_integration::ParamsButterO3S62_5Lp3N15_83::kY2
static constexpr double kY2
Definition: butterO3.h:95
imu_integration::ParamsButterO3S62_5Lp3N15_83::kX14
static constexpr double kX14
Definition: butterO3.h:93
imu_integration::ParamsButterO3S62_5Lp3N15_83::kY3
static constexpr double kY3
Definition: butterO3.h:96
imu_integration::ParamsButterO3S125Lp3N46_66::kY2
static constexpr double kY2
Definition: butterO3.h:116
imu_integration::ParamsButterO3S62_5Lp3N20_83::kX14
static constexpr double kX14
Definition: butterO3.h:83
imu_integration::ParamsButterO3S62_5Lp3N20_83::kY4
static constexpr double kY4
Definition: butterO3.h:87
imu_integration::ParamsButterO3S125Lp3N33_33::kGain
static constexpr double kGain
Definition: butterO3.h:123
imu_integration::ParamsButterO3S125Lp3N46_66
Definition: butterO3.h:112
imu_integration::ParamsButterO3S125Lp3N41_66::kY4
static constexpr double kY4
Definition: butterO3.h:108
imu_integration::ParamsButterO3S62_5Lp3N20_83::kY2
static constexpr double kY2
Definition: butterO3.h:85
imu_integration::ParamsButterO3S125Lp3N41_66::kGain
static constexpr double kGain
Definition: butterO3.h:103
imu_integration::ParamsButterO3S125Lp3N41_66::kX23
static constexpr double kX23
Definition: butterO3.h:105
imu_integration::ParamsButterO3S125Lp3N46_66::kY4
static constexpr double kY4
Definition: butterO3.h:118
imu_integration::ButterO3
Definition: butterO3.h:30
imu_integration::ParamsButterO3S62_5Lp3N29_16::kGain
static constexpr double kGain
Definition: butterO3.h:72
imu_integration::ParamsButterO3S125Lp3N41_66::kY2
static constexpr double kY2
Definition: butterO3.h:106
imu_integration::ParamsButterO3S62_5Lp3N20_83::kX23
static constexpr double kX23
Definition: butterO3.h:84