NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
butterO1.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_BUTTERO1_H_
20 #define IMU_INTEGRATION_BUTTERO1_H_
21 
22 #include <imu_integration/filter.h>
23 
24 #include <array>
25 
26 namespace imu_integration {
27 template <class Params>
28 class ButterO1 : public Filter {
29  public:
30  ButterO1() : initialized_(false) {}
31  // Returns filtered value and timestamp
32  double AddValue(const double value) final {
33  if (!initialized_) Initialize(value, Params::kGain);
34 
35  // Shift input vals
36  xv_[0] = xv_[1];
37  xv_[1] = xv_[2];
38  xv_[2] = xv_[3];
39  // Add new value
40  xv_[3] = value / Params::kGain;
41  // Shift output vals
42  yv_[0] = yv_[1];
43  yv_[1] = yv_[2];
44  yv_[2] = yv_[3];
45  // Generate new output
46  yv_[3] = (xv_[0] + xv_[3]) + Params::kX12 * (xv_[1] + xv_[2]) + (Params::kY2 * yv_[2]);
47  // Return most recent output
48  return yv_[3];
49  }
50 
51  private:
52  void Initialize(const double first_value, const double gain) {
53  for (auto& val : xv_) {
54  val = first_value / gain;
55  }
56  for (auto& val : yv_) {
57  val = first_value;
58  }
59 
60  initialized_ = true;
61  }
62 
63  // Notation taken from mkfilter site
64  // /www/usr/fisher/helpers/mkfilter
65  std::array<double, 4> xv_;
66  std::array<double, 4> yv_;
67  bool initialized_;
68 };
69 
70 // 62.5 Hz
72  static constexpr double kGain = 2.999100930e+01;
73  static constexpr double kX12 = 2.9560160746;
74  static constexpr double kY2 = 0.7361865327;
75 };
77 
79  static constexpr double kGain = 2.2743339590e+01;
80  static constexpr double kX12 = 1.9999996372;
81  static constexpr double kY2 = 0.7361865327;
82 };
84 
86  static constexpr double kGain = 1.5479761468e+01;
87  static constexpr double kX12 = 1.0418847728;
88  static constexpr double kY2 = 0.7361865327;
89 };
91 
92 // 125Hz
93 // 2500 rpm: 41.666Hz
95  static constexpr double kGain = 4.270814376e+01;
96  static constexpr double kX12 = 1.9996372182;
97  static constexpr double kY2 = 0.8595285604;
98 };
100 
101 // 2000 rpm: 33.333Hz
103  static constexpr double kGain = 3.144018095e+01;
104  static constexpr double kX12 = 1.2082237395;
105  static constexpr double kY2 = 0.8595285604;
106 };
108 
109 // 2800 rpm: 46.666Hz
111  static constexpr double kGain = 4.839840415e+01;
112  static constexpr double kX12 = 2.3992967530;
113  static constexpr double kY2 = 0.8595285604;
114 };
116 
117 } // namespace imu_integration
118 
119 #endif // IMU_INTEGRATION_BUTTERO1_H_
imu_integration::ParamsButterO1S125Lp3N33_33::kX12
static constexpr double kX12
Definition: butterO1.h:104
filter.h
imu_integration::ParamsButterO1S125Lp3N41_66::kX12
static constexpr double kX12
Definition: butterO1.h:96
imu_integration::ParamsButterO1S125Lp3N41_66::kGain
static constexpr double kGain
Definition: butterO1.h:95
imu_integration::ParamsButterO1S125Lp3N33_33::kGain
static constexpr double kGain
Definition: butterO1.h:103
imu_integration::Filter
Definition: filter.h:23
imu_integration::ParamsButterO1S62_5Lp3N29_16::kX12
static constexpr double kX12
Definition: butterO1.h:73
imu_integration::ButterO1::AddValue
double AddValue(const double value) final
Definition: butterO1.h:32
imu_integration::ParamsButterO1S125Lp3N41_66
Definition: butterO1.h:94
imu_integration::ParamsButterO1S62_5Lp3N15_83::kX12
static constexpr double kX12
Definition: butterO1.h:87
imu_integration::ParamsButterO1S62_5Lp3N20_83::kX12
static constexpr double kX12
Definition: butterO1.h:80
imu_integration::ButterO1::ButterO1
ButterO1()
Definition: butterO1.h:30
imu_integration::ParamsButterO1S125Lp3N46_66::kGain
static constexpr double kGain
Definition: butterO1.h:111
imu_integration::ParamsButterO1S125Lp3N46_66::kX12
static constexpr double kX12
Definition: butterO1.h:112
imu_integration::ParamsButterO1S62_5Lp3N15_83::kY2
static constexpr double kY2
Definition: butterO1.h:88
imu_integration::ParamsButterO1S62_5Lp3N15_83::kGain
static constexpr double kGain
Definition: butterO1.h:86
imu_integration::ParamsButterO1S125Lp3N33_33::kY2
static constexpr double kY2
Definition: butterO1.h:105
imu_integration::ParamsButterO1S125Lp3N41_66::kY2
static constexpr double kY2
Definition: butterO1.h:97
imu_integration
Definition: butterO1.h:26
imu_integration::ParamsButterO1S125Lp3N33_33
Definition: butterO1.h:102
imu_integration::ButterO1
Definition: butterO1.h:28
imu_integration::ParamsButterO1S62_5Lp3N15_83
Definition: butterO1.h:85
imu_integration::ParamsButterO1S62_5Lp3N29_16::kY2
static constexpr double kY2
Definition: butterO1.h:74
imu_integration::ParamsButterO1S125Lp3N46_66
Definition: butterO1.h:110
imu_integration::ParamsButterO1S62_5Lp3N20_83::kGain
static constexpr double kGain
Definition: butterO1.h:79
imu_integration::ParamsButterO1S62_5Lp3N20_83::kY2
static constexpr double kY2
Definition: butterO1.h:81
imu_integration::ParamsButterO1S62_5Lp3N20_83
Definition: butterO1.h:78
imu_integration::ParamsButterO1S125Lp3N46_66::kY2
static constexpr double kY2
Definition: butterO1.h:113
imu_integration::ParamsButterO1S62_5Lp3N29_16::kGain
static constexpr double kGain
Definition: butterO1.h:72
imu_integration::ParamsButterO1S62_5Lp3N29_16
Definition: butterO1.h:71