Skip to content

Commit f611e58

Browse files
[readme] update README documentation
1 parent a69392e commit f611e58

File tree

1 file changed

+47
-30
lines changed

1 file changed

+47
-30
lines changed

README.md

+47-30
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,18 @@ A generic Kalman filter.
4949

5050
`main.cpp`
5151
```cpp
52-
using kalman = fcarouge::kalman<float>;
52+
using kalman = fcarouge::kalman<double>;
5353

54-
kalman k;
54+
kalman k;
5555

56-
k.state = kalman::state_x{ 60 };
57-
k.estimate_uncertainty = kalman::estimate_uncertainty_p{ 225 };
58-
k.transition_observation = []() { return kalman::observation_h{ 1 }; };
59-
k.noise_observation = []() {
60-
return kalman::measurement_uncertainty_r{ 25 };
61-
};
56+
k.state_x = kalman::state{ 60 };
57+
k.estimate_uncertainty_p = kalman::estimate_uncertainty{ 15 * 15 };
58+
k.transition_observation_h = []() { return kalman::observation{ 1 }; };
59+
k.noise_observation_r = []() {
60+
return kalman::measurement_uncertainty{ 5 * 5 };
61+
};
6262

63-
k.update(48.54);
63+
k.update(48.54);
6464
```
6565

6666
### Multi-Dimensional
@@ -69,31 +69,48 @@ Two states, one control, using Eigen3 support.
6969

7070
`main.cpp`
7171
```cpp
72-
using kalman = fcarouge::eigen::kalman<double, 2, 1, 1>;
73-
74-
kalman k;
75-
76-
k.state = kalman::state_x{ 0, 0 };
77-
k.estimate_uncertainty =
78-
kalman::estimate_uncertainty_p{ { 500, 0 }, { 0, 500 } };
79-
k.transition_state = []() {
80-
return kalman::state_transition_f{ { 1, 0.25 }, { 0, 1 } };
81-
};
82-
k.noise_process = []() {
83-
return kalman::process_noise_uncertainty_q{ { 0.000009765625, 0.000078125 },
84-
{ 0.000078125, 0.000625 } };
72+
using kalman =
73+
fcarouge::eigen::kalman<double, 2, 1, 1, std::chrono::milliseconds>;
74+
75+
const double gravitational_acceleration{ -9.8 }; // m.s^-2
76+
const std::chrono::milliseconds delta_time{ 250 };
77+
kalman k;
78+
79+
k.state_x = kalman::state{ 0, 0 };
80+
k.estimate_uncertainty_p =
81+
kalman::estimate_uncertainty{ { 500, 0 }, { 0, 500 } };
82+
k.transition_state_f = [](const std::chrono::milliseconds &delta_time) {
83+
const auto dt{ std::chrono::duration<double>(delta_time).count() };
84+
return kalman::state_transition{ { 1, dt }, { 0, 1 } };
85+
};
86+
k.noise_process_q = [](const std::chrono::milliseconds &delta_time) {
87+
const auto dt{ std::chrono::duration<double>(delta_time).count() };
88+
return kalman::process_noise_uncertainty{
89+
{ 0.1 * 0.1 * dt * dt * dt * dt / 4, 0.1 * 0.1 * dt * dt * dt / 2 },
90+
{ 0.1 * 0.1 * dt * dt * dt / 2, 0.1 * 0.1 * dt * dt }
8591
};
86-
k.transition_observation = []() { return kalman::observation_h{ { 1, 0 } }; };
87-
k.noise_observation = []() {
88-
return kalman::measurement_uncertainty_r{ 400 };
89-
};
90-
k.transition_control = []() { return kalman::control_g{ 0.0313, 0.25 }; };
92+
};
93+
k.transition_control_g = [](const std::chrono::milliseconds &delta_time) {
94+
const auto dt{ std::chrono::duration<double>(delta_time).count() };
95+
return kalman::control{ 0.0313, dt };
96+
};
97+
k.transition_observation_h = []() { return kalman::observation{ { 1, 0 } }; };
98+
k.noise_observation_r = []() {
99+
return kalman::measurement_uncertainty{ 400 };
100+
};
101+
102+
k.predict(kalman::input{ gravitational_acceleration }, delta_time);
103+
k.update(kalman::output{ -32.40 });
104+
k.predict(kalman::input{ 39.72 }, delta_time);
105+
k.update(kalman::output{ -11.1 });
106+
```
91107
92-
k.predict(kalman::input_u{ -9.8 });
93-
k.update(kalman::output_z{ -32.4 });
108+
# Resources
94109
110+
Awesome resources to learn about Kalman filters:
95111
96-
```
112+
- [KalmanFilter.NET](https://www.kalmanfilter.net) by Alex Becker.
113+
- [Kalman and Bayesian Filters in Python](https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python) by Roger Labbe.
97114
98115
# License
99116

0 commit comments

Comments
 (0)