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