NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
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