Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ahmedanwar123/robot_ekf
An Extended Kalman Filter Package with a GUI attached to tune covariance values in realtime
https://github.com/ahmedanwar123/robot_ekf
ekf ekf-localization kalman-filter pose-estimation python python3 raspberry-pi raspberrypi robot-pose robotics ros rpi
Last synced: about 1 month ago
JSON representation
An Extended Kalman Filter Package with a GUI attached to tune covariance values in realtime
- Host: GitHub
- URL: https://github.com/ahmedanwar123/robot_ekf
- Owner: ahmedanwar123
- Created: 2024-08-18T14:12:45.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-09-14T14:34:08.000Z (2 months ago)
- Last Synced: 2024-09-29T00:41:14.653Z (about 2 months ago)
- Topics: ekf, ekf-localization, kalman-filter, pose-estimation, python, python3, raspberry-pi, raspberrypi, robot-pose, robotics, ros, rpi
- Language: Python
- Homepage:
- Size: 38.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# EKF for Pose Estimation
This ROS package implements an Extended Kalman Filter (EKF) to estimate the pose of a robot using odometry and IMU data. It is designed to fuse sensor data from IMU and Encoders to improve pose estimation accuracy.
## Overview
The `robot_ekf` package includes:
- **KalmanFilter**: Class Implements the Extended Kalman Filter for state estimation.
- **SesnorData**: Class Manages sensor data subscriptions, performs EKF updates, and publishes the estimated pose.
- **CovarianceGUI**: Graphical User Interface updates covariance values live.## Features
- **State Prediction**: Predicts the robot's state using odometry and IMU data.
- **State Update**: Updates the state estimate with incoming sensor measurements.
- **Message Publishing**: Publishes the estimated pose to the `/pose_combined` topic.## Installation
1. **Install Dependencies**
Install the required Python packages:
```bash
pip3 install numpy scipy
```
or
```bash
sudo apt install numpy scipy
```2. **Create A package**
```bash
catkin_vreate_pkg robot_ekf geometry_msgs nav_msgs rospy sensor_msgs std_msgs
```
3. **Clone the Repository**Clone this repository to your ROS workspace:
```bash
cd ~/catkin_ws/src/robot_ekf
git clone https://github.com/ahmedanwar123/robot_ekf.git
```
*note*: you will ned **/src** directory only
4. **Build the Package**Build the package in your catkin workspace:
```bash
cd ~/catkin_ws
catkin_make
```5. **Source the Workspace**
Source the setup file to make the package available:
```bash
source devel/setup.bash
```## Configuration
Set the following parameters for EKF in the code:
- `~odom_covariance`: Covariance matrix for odometry measurements.
- `~imu_covariance`: Covariance matrix for IMU measurements.**Example Configuration**:
```python
~odom_covariance =[0.1, 0.1, 0.1, 0.1]
~imu_covariance =[0.1, 0.1]
```## Running the Node
To run the EKF node:
```bash
roslaunch robot_ekf main.py
```To run the GUI for tuning covariance values:
```bash
python3 gui.py
```**Node Description**
- `ekf_node/kalman_dyn.py`: Main script for running the EKF. It subscribes to `/odom` and `/imu_data`, performs EKF updates, and publishes the pose to `/pose_combined`. Note that `dyn` refers to dynamic, as covariances can be tuned while the system is running, which is very helpful.
## Message Types
**Pose2D** (from `geometry_msgs`):
```plaintext
float64 x # X position in meters
float64 y # Y position in meters
float64 theta # Orientation in radians
```**Imu** (from `sensor_msgs`):
```plaintext
Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance
```**Odometry** (from `nav_msgs`):
```plaintext
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
```### Notes
- **Pose2D:** Used for publishing the combined pose estimated by the Kalman filter.
- **Imu:** Subscribed to get IMU data (orientation and angular velocity).
- **Odometry:** Subscribed to get odometry data (position, orientation, and velocity).