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
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