The State Observers Library provides a set of classes for implementing state observer algorithms, including Luenberger observers and Kalman filters. These observers are widely used in control systems for estimating the internal state variables of a dynamic system from measurements of its outputs.
The library is designed to be modular and extensible, with a base StateObserver
class that can be extended to implement various state estimation algorithms. It also integrates with ROS 2 through pluginlib, allowing for dynamic loading and configuration of observers and their parameters. See the DOCUMENTATION.
- Modular Design: A base
StateObserver
class provides common functionality, making it easy to implement new observers. - Luenberger Observer: Implements a Luenberger observer for linear systems.
- Kalman Filter: Implements a discrete-time Kalman Filter for linear systems.
- ROS 2 Pluginlib Integration: Observers and their parameter classes are available as ROS 2 plugins.
- Parameter Classes: Separate parameter classes manage configuration parameters for observers.
-
StateObserver
: Abstract base class providing the interface and common functionality for state observers. -
Luenberger
: Inherits fromStateObserver
. Implements the Luenberger observer algorithm for linear systems. -
KalmanFilter
: Inherits fromStateObserver
. Implements the Kalman Filter algorithm for linear systems.
-
StateObserverParam
: Base class for managing common parameters, such as state-space matrices and the initial state vector. -
LuenbergerParam
: Inherits fromStateObserverParam
. Adds the observer gain matrixL
specific to the Luenberger observer. -
KalmanFilterParam
: Inherits fromStateObserverParam
. Adds process noise covarianceQ
, measurement noise covarianceR
, and initial error covarianceP0
specific to the Kalman Filter.
The library provides ROS 2 pluginlib plugins for dynamic loading:
-
Parameter Plugins (
state_observers_params_plugins.xml
):<library path="state_observers"> <class type="state_observer::LuenbergerParam" base_class_type="state_observer::StateObserverParam"> <description>This is a plugin for Luenberger Param ROS2 Loader</description> </class> <class type="state_observer::KalmanFilterParam" base_class_type="state_observer::StateObserverParam"> <description>This is a plugin for Kalman Filter Param ROS2 Loader</description> </class> </library>
To use the State Observers Library in your ROS 2 workspace, clone the repository and build it using colcon
:
cd ~/ros2_ws/src
git clone https://github.com/JRL-CARI-CNR-UNIBS/state_observers.git
cd ~/ros2_ws
colcon build
Contributions to this project are welcome! You can contribute by reporting bugs, suggesting new features, or submitting pull requests.
- Report Bugs: Use the issue tracker to report bugs.
- Suggest Features: Propose new features or enhancements.
- Submit Pull Requests: Fork the repository and submit pull requests for your contributions.
- Base class of state observer, Luenberger, Kalman Filter
- Test State Observer Base Class
- Test Luenberger, Kalman Filter
- Set up GitHub Workflows for Continuous Integration (CI)
- Implement ROS 2 Pluginlib support for
StateObserver
,Luenberger
,KalmanFilter
, and their parameter classes - Create a class to represent a dynamic system (general and linear) in state-space format that contains
A
,B
,C
,D
matrices (orf
,g
, etc. functions) with update methods, and pass it to state observer classes as input (not directlyA
,B
,C
,D
) - Implement Extended Kalman Filter (EKF), Unscented Kalman Filter (UKF), Particle Filter, etc.
This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.