NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
butterO5.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_BUTTERO5_H_
20 #define IMU_INTEGRATION_BUTTERO5_H_
21 
22 #include <imu_integration/filter.h>
23 
25 
26 #include <array>
27 
28 namespace imu_integration {
29 template <class Params>
30 class ButterO5 : public Filter {
31  public:
32  ButterO5() : 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_[7]) + Params::kX16 * (xv_[1] + xv_[6]) + Params::kX25 * (xv_[2] + xv_[5]) +
47  Params::kX34 * (xv_[3] + xv_[4]) + (Params::kY2 * yv_[2]) + (Params::kY3 * yv_[3]) +
48  (Params::kY4 * yv_[4]) + (Params::kY5 * yv_[5]) + (Params::kY6 * yv_[6]);
49 
50  // Return most recent output
51  return yv_[last_index];
52  }
53 
54  private:
55  void Initialize(const double first_value, const double gain) {
56  for (auto& val : xv_) {
57  val = first_value / gain;
58  }
59  for (auto& val : yv_) {
60  val = first_value;
61  }
62 
63  initialized_ = true;
64  }
65 
66  // Notation taken from mkfilter site
67  // /www/usr/fisher/helpers/mkfilter
68  std::array<double, 8> xv_;
69  std::array<double, 8> yv_;
70  bool initialized_;
71 };
72 
74  static constexpr double kGain = 7.974174280e+04;
75  static constexpr double kX16 = 6.9560160746;
76  static constexpr double kX25 = 20.7800803730;
77  static constexpr double kX34 = 34.5601607460;
78  static constexpr double kY2 = 0.3750929134;
79  static constexpr double kY3 = -2.2411521809;
80  static constexpr double kY4 = 5.3982113474;
81  static constexpr double kY5 = -6.5588143289;
82  static constexpr double kY6 = 4.0250747177;
83 };
85 
87  static constexpr double kGain = 1.444638217e+07;
88  static constexpr double kX16 = 6.9560160746;
89  static constexpr double kX25 = 20.7800803730;
90  static constexpr double kX34 = 34.5601607460;
91  static constexpr double kY2 = 0.7221701429;
92  static constexpr double kY3 = -3.8457619644;
93  static constexpr double kY4 = 8.2000057707;
94  static constexpr double kY5 = -8.7511375257;
95  static constexpr double kY6 = 4.6747148135;
96 };
98 
100  static constexpr double kGain = 4.274918013e+08;
101  static constexpr double kX16 = 6.9560160746;
102  static constexpr double kX25 = 20.7800803730;
103  static constexpr double kX34 = 34.5601607460;
104  static constexpr double kY2 = 0.8498599655;
105  static constexpr double kY3 = -4.3875359464;
106  static constexpr double kY4 = 9.0628533836;
107  static constexpr double kY5 = -9.3625201736;
108  static constexpr double kY6 = 4.8373424748;
109 };
111 
113  static constexpr double kGain = 6.0459547194e+04;
114  static constexpr double kX16 = 5.9994195281e+00;
115  static constexpr double kX25 = 1.5997097640e+01;
116  static constexpr double kX34 = 2.4994195281e+01;
117  static constexpr double kY2 = 3.7509291343e-01;
118  static constexpr double kY3 = -2.2411521809e+00;
119  static constexpr double kY4 = 5.3982113474e+00;
120  static constexpr double kY5 = -6.5588143289e+00;
121  static constexpr double kY6 = 4.0250747177e+00;
122 };
124 
126  static constexpr double kGain = 4.1144934894e+04;
127  static constexpr double kX16 = 5.0412147780e+00;
128  static constexpr double kX25 = 1.1206073890e+01;
129  static constexpr double kX34 = 1.5412147780e+01;
130  static constexpr double kY2 = 3.7509291343e-01;
131  static constexpr double kY3 = -2.2411521809e+00;
132  static constexpr double kY4 = 5.3982113474e+00;
133  static constexpr double kY5 = -6.5588143289e+00;
134  static constexpr double kY6 = 4.0250747177e+00;
135 };
137 
139  static constexpr double kGain = 1.556798187e+06;
140  static constexpr double kX16 = 5.9996372182;
141  static constexpr double kX25 = 15.9981860910;
142  static constexpr double kX34 = 24.9963721820;
143  static constexpr double kY2 = 0.6135091304;
144  static constexpr double kY3 = -3.3668482801;
145  static constexpr double kY4 = 7.4066054096;
146  static constexpr double kY5 = -8.1654743335;
147  static constexpr double kY6 = 4.5121464160;
148 };
150 
152  static constexpr double kGain = 1.764219683e+06;
153  static constexpr double kX16 = 6.3992967530;
154  static constexpr double kX25 = 17.9964837650;
155  static constexpr double kX34 = 28.9929675300;
156  static constexpr double kY2 = 0.6135091304;
157  static constexpr double kY3 = -3.3668482801;
158  static constexpr double kY4 = 7.4066054096;
159  static constexpr double kY5 = -8.1654743335;
160  static constexpr double kY6 = 4.5121464160;
161 };
163 
165  static constexpr double kGain = 1.146058161e+06;
166  static constexpr double kX16 = 5.2082237395;
167  static constexpr double kX25 = 12.0411186980;
168  static constexpr double kX34 = 17.0822373950;
169  static constexpr double kY2 = 0.6135091304;
170  static constexpr double kY3 = -3.3668482801;
171  static constexpr double kY4 = 7.4066054096;
172  static constexpr double kY5 = -8.1654743335;
173  static constexpr double kY6 = 4.5121464160;
174 };
176 } // namespace imu_integration
177 
178 #endif // IMU_INTEGRATION_BUTTERO5_H_
imu_integration::ParamsButterO5S125Lp3N33_33::kY2
static constexpr double kY2
Definition: butterO5.h:169
imu_integration::ParamsButterO5S62_5Lp3N20_83::kY2
static constexpr double kY2
Definition: butterO5.h:117
imu_integration::ParamsButterO5S125Lp3N33_33::kX16
static constexpr double kX16
Definition: butterO5.h:166
imu_integration::ParamsButterO5S62_5Lp1N29_16::kX25
static constexpr double kX25
Definition: butterO5.h:89
filter.h
imu_integration::ParamsButterO5S62_5Lp3N20_83::kX34
static constexpr double kX34
Definition: butterO5.h:116
imu_integration::ParamsButterO5S125Lp3N46_66::kX25
static constexpr double kX25
Definition: butterO5.h:154
imu_integration::ParamsButterO5S125Lp3N41_66::kY4
static constexpr double kY4
Definition: butterO5.h:145
imu_integration::ParamsButterO5S62_5Lp3N15_83::kGain
static constexpr double kGain
Definition: butterO5.h:126
imu_integration::ParamsButterO5S62_5Lp1N29_16::kY5
static constexpr double kY5
Definition: butterO5.h:94
imu_integration::ParamsButterO5S125Lp3N46_66::kX16
static constexpr double kX16
Definition: butterO5.h:153
imu_integration::Filter
Definition: filter.h:23
logger.h
imu_integration::ParamsButterO5S125Lp3N33_33::kY5
static constexpr double kY5
Definition: butterO5.h:172
imu_integration::ParamsButterO5S62_5Lp3N15_83::kY4
static constexpr double kY4
Definition: butterO5.h:132
imu_integration::ParamsButterO5S62_5Lp0_5N29_16
Definition: butterO5.h:99
imu_integration::ParamsButterO5S125Lp3N41_66::kX16
static constexpr double kX16
Definition: butterO5.h:140
imu_integration::ParamsButterO5S62_5Lp1N29_16::kX34
static constexpr double kX34
Definition: butterO5.h:90
imu_integration::ParamsButterO5S125Lp3N46_66::kY6
static constexpr double kY6
Definition: butterO5.h:160
imu_integration::ParamsButterO5S125Lp3N41_66
Definition: butterO5.h:138
imu_integration::ParamsButterO5S125Lp3N41_66::kY2
static constexpr double kY2
Definition: butterO5.h:143
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kX34
static constexpr double kX34
Definition: butterO5.h:103
imu_integration::ParamsButterO5S62_5Lp1N29_16::kY2
static constexpr double kY2
Definition: butterO5.h:91
imu_integration::ParamsButterO5S62_5Lp1N29_16::kX16
static constexpr double kX16
Definition: butterO5.h:88
imu_integration::ParamsButterO5S62_5Lp1N29_16::kY3
static constexpr double kY3
Definition: butterO5.h:92
imu_integration::ParamsButterO5S62_5Lp3N29_16::kX25
static constexpr double kX25
Definition: butterO5.h:76
imu_integration::ParamsButterO5S62_5Lp3N29_16::kY4
static constexpr double kY4
Definition: butterO5.h:80
imu_integration::ParamsButterO5S125Lp3N33_33::kY6
static constexpr double kY6
Definition: butterO5.h:173
imu_integration::ParamsButterO5S125Lp3N41_66::kY6
static constexpr double kY6
Definition: butterO5.h:147
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kY2
static constexpr double kY2
Definition: butterO5.h:104
imu_integration::ParamsButterO5S62_5Lp3N15_83::kX25
static constexpr double kX25
Definition: butterO5.h:128
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kY5
static constexpr double kY5
Definition: butterO5.h:107
imu_integration::ParamsButterO5S125Lp3N33_33::kX34
static constexpr double kX34
Definition: butterO5.h:168
imu_integration::ParamsButterO5S125Lp3N46_66::kY2
static constexpr double kY2
Definition: butterO5.h:156
imu_integration::ParamsButterO5S62_5Lp3N20_83::kX16
static constexpr double kX16
Definition: butterO5.h:114
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kX16
static constexpr double kX16
Definition: butterO5.h:101
imu_integration::ParamsButterO5S125Lp3N33_33::kGain
static constexpr double kGain
Definition: butterO5.h:165
imu_integration::ParamsButterO5S62_5Lp3N29_16::kY2
static constexpr double kY2
Definition: butterO5.h:78
imu_integration::ButterO5::AddValue
double AddValue(const double value) final
Definition: butterO5.h:34
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kX25
static constexpr double kX25
Definition: butterO5.h:102
imu_integration::ParamsButterO5S125Lp3N41_66::kY5
static constexpr double kY5
Definition: butterO5.h:146
imu_integration::ParamsButterO5S62_5Lp3N15_83::kX34
static constexpr double kX34
Definition: butterO5.h:129
imu_integration
Definition: butterO1.h:26
imu_integration::ParamsButterO5S62_5Lp3N15_83::kY3
static constexpr double kY3
Definition: butterO5.h:131
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kY4
static constexpr double kY4
Definition: butterO5.h:106
imu_integration::ButterO5
Definition: butterO5.h:30
imu_integration::ParamsButterO5S125Lp3N46_66::kY4
static constexpr double kY4
Definition: butterO5.h:158
imu_integration::ParamsButterO5S62_5Lp1N29_16::kGain
static constexpr double kGain
Definition: butterO5.h:87
imu_integration::ParamsButterO5S125Lp3N41_66::kGain
static constexpr double kGain
Definition: butterO5.h:139
imu_integration::ParamsButterO5S125Lp3N33_33
Definition: butterO5.h:164
imu_integration::ParamsButterO5S62_5Lp1N29_16
Definition: butterO5.h:86
imu_integration::ParamsButterO5S62_5Lp3N20_83::kY6
static constexpr double kY6
Definition: butterO5.h:121
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kY3
static constexpr double kY3
Definition: butterO5.h:105
imu_integration::ParamsButterO5S62_5Lp1N29_16::kY4
static constexpr double kY4
Definition: butterO5.h:93
imu_integration::ParamsButterO5S62_5Lp3N20_83::kY5
static constexpr double kY5
Definition: butterO5.h:120
imu_integration::ParamsButterO5S125Lp3N41_66::kX34
static constexpr double kX34
Definition: butterO5.h:142
imu_integration::ParamsButterO5S62_5Lp3N15_83
Definition: butterO5.h:125
imu_integration::ParamsButterO5S62_5Lp3N20_83::kY4
static constexpr double kY4
Definition: butterO5.h:119
imu_integration::ParamsButterO5S62_5Lp3N29_16
Definition: butterO5.h:73
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kGain
static constexpr double kGain
Definition: butterO5.h:100
imu_integration::ParamsButterO5S62_5Lp3N29_16::kX34
static constexpr double kX34
Definition: butterO5.h:77
imu_integration::ParamsButterO5S62_5Lp3N15_83::kY6
static constexpr double kY6
Definition: butterO5.h:134
imu_integration::ButterO5::ButterO5
ButterO5()
Definition: butterO5.h:32
imu_integration::ParamsButterO5S62_5Lp1N29_16::kY6
static constexpr double kY6
Definition: butterO5.h:95
imu_integration::ParamsButterO5S125Lp3N33_33::kX25
static constexpr double kX25
Definition: butterO5.h:167
imu_integration::ParamsButterO5S62_5Lp3N20_83::kX25
static constexpr double kX25
Definition: butterO5.h:115
imu_integration::ParamsButterO5S125Lp3N46_66::kY3
static constexpr double kY3
Definition: butterO5.h:157
imu_integration::ParamsButterO5S125Lp3N46_66
Definition: butterO5.h:151
imu_integration::ParamsButterO5S62_5Lp3N15_83::kX16
static constexpr double kX16
Definition: butterO5.h:127
imu_integration::ParamsButterO5S62_5Lp3N29_16::kX16
static constexpr double kX16
Definition: butterO5.h:75
imu_integration::ParamsButterO5S62_5Lp3N29_16::kGain
static constexpr double kGain
Definition: butterO5.h:74
imu_integration::ParamsButterO5S125Lp3N33_33::kY4
static constexpr double kY4
Definition: butterO5.h:171
imu_integration::ParamsButterO5S125Lp3N46_66::kY5
static constexpr double kY5
Definition: butterO5.h:159
imu_integration::ParamsButterO5S125Lp3N41_66::kX25
static constexpr double kX25
Definition: butterO5.h:141
imu_integration::ParamsButterO5S125Lp3N33_33::kY3
static constexpr double kY3
Definition: butterO5.h:170
imu_integration::ParamsButterO5S62_5Lp3N15_83::kY2
static constexpr double kY2
Definition: butterO5.h:130
imu_integration::ParamsButterO5S125Lp3N46_66::kX34
static constexpr double kX34
Definition: butterO5.h:155
imu_integration::ParamsButterO5S62_5Lp3N29_16::kY5
static constexpr double kY5
Definition: butterO5.h:81
imu_integration::ParamsButterO5S125Lp3N46_66::kGain
static constexpr double kGain
Definition: butterO5.h:152
imu_integration::ParamsButterO5S62_5Lp3N15_83::kY5
static constexpr double kY5
Definition: butterO5.h:133
imu_integration::ParamsButterO5S62_5Lp3N29_16::kY6
static constexpr double kY6
Definition: butterO5.h:82
imu_integration::ParamsButterO5S62_5Lp3N20_83::kY3
static constexpr double kY3
Definition: butterO5.h:118
imu_integration::ParamsButterO5S125Lp3N41_66::kY3
static constexpr double kY3
Definition: butterO5.h:144
imu_integration::ParamsButterO5S62_5Lp0_5N29_16::kY6
static constexpr double kY6
Definition: butterO5.h:108
imu_integration::ParamsButterO5S62_5Lp3N29_16::kY3
static constexpr double kY3
Definition: butterO5.h:79
imu_integration::ParamsButterO5S62_5Lp3N20_83::kGain
static constexpr double kGain
Definition: butterO5.h:113
imu_integration::ParamsButterO5S62_5Lp3N20_83
Definition: butterO5.h:112