kalman_pos
Kálmán filter based ROS 1 / ROS 2 node (geometry_msgs/pose, sensor_msgs/imu)
Science Score: 57.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 6 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.6%) to scientific vocabulary
Keywords
Repository
Kálmán filter based ROS 1 / ROS 2 node (geometry_msgs/pose, sensor_msgs/imu)
Basic Info
Statistics
- Stars: 12
- Watchers: 2
- Forks: 1
- Open Issues: 1
- Releases: 2
Topics
Metadata Files
README.md
kalman_pos ROS 2 package
Kálmán filter based ROS 2 node (geometry_msgs/PoseStamped, sensor_msgs/Imu)
Build
IMU transformer is a dependency, it might be needed if the IMU is not in the center of gravity (COG)
sudo apt install ros-$ROS_DISTRO-imu-transformer
bash
cd ~/ros2_ws/src
[!CAUTION] If you want the full compatiblity with our paper, please use release version
0.3.0. Newer releases use modified paramters. Either clone this version:git clone https://github.com/jkk-research/kalman_pos --branch v.0.3.0
Or clone the latest version:
bash
git clone https://github.com/jkk-research/kalman_pos
bash
cd ~/ros2_ws
bash
colcon build --symlink-install --packages-select kalman_pos
ROS publications / subscriptions
The main node is kalman_pos_node, also there is a vehicle_status_convert node for converting the vehicle status message to the required format.
```mermaid flowchart LR
A[ /imu
sensormsgs/Imu] --> F(kalmanpos)
B[ /currentpose
geometrymsgs/PoseStamped] --> F
C[ /vehiclestatus
geometrymsgs/Twist] --> F
D[ /novafix
sensormsgs/NavSatFix] --> F
E[ /durostatus
stdmsgs/String] --> F
F --> G[ /estimatedposecog
geometrymsgs/PoseStamped]
F --> H[ /estimatedposebaselink
geometrymsgs/PoseStamped]
F --> I[ /distance
stdmsgs/Float32]
F --> J[ /estimatedtravdistestpos
stdmsgs/Float32]
F --> K[ /estimationaccuracy
visualizationmsgs/Marker]
V1(vehiclestatusconvert
-optional-) -.-> C
V3[ /vehiclespeed
stdmsgs/Float32] --> V1
V4[ /vehiclesteering
stdmsgs/Float32] --> V1
classDef light fill:#34aec5,stroke:#152742,stroke-width:2px,color:#152742
classDef dark fill:#152742,stroke:#34aec5,stroke-width:2px,color:#34aec5
classDef white fill:#ffffff,stroke:#152742,stroke-width:2px,color:#152742
classDef red fill:#ef4638,stroke:#152742,stroke-width:2px,color:#fff
classDef dashed fill:#ef4638,stroke:#152742,stroke-width:3px,stroke-dasharray:5,5,color:#fff
class F red class V1 dashed class A,B,C,D,E,G,H,I,J,K,V3,V4 light
```
Run
Don't forget to source before ROS commands.
``` bash source ~/ros2_ws/install/setup.bash ```bash
ros2 launch kalman_pos kalman_pos_node.launch.py
Parameters
pose_topic- type:
string - default value:
gps/duro/current_pose - description: the name of the GNSS position topic (subscriber, geometry_msgs::PoseStamped)
- type:
vehicle_status_topic- type:
string - default value:
vehicle_status - description: the name of the vehicle status topic (subscriber, autoware_msgs::VehicleStatus)
- type:
nav_sat_fix_topic- type:
string - default value:
gps/nova/fix - description: the name of the Novatel NavSatFix topic (relevant only for Novatel GNSS) (subscriber, sensor_msgs::NavSatFix)
- type:
imu_topic- type:
string - default value:
imu/data - description: the name of the IMU data topic (subscriber,
sensor_msgs::Imu)
- type:
est_cog_topic- type:
string - default value:
estimated_pose_cog - description: the name of the estimated position topic (transformed into the CoG) (Publisher,
geometry_msgs::PoseStamped)
- type:
est_trav_distance_odom_topic- type:
string - default value:
distance - description: the name of the estimated traveled distance position topic (calculation is based on the odemetry) (
Publisher, std_msgs::Float32)
- type:
est_trav_distance_est_pos_topic- type:
string - default value:
estimated_trav_dist_est_pos - description: the name of the estimated traveled distance position topic (calculation is based on the estimated position) (Publisher,
std_msgs::Float32)
- type:
est_baselink_topic- type:
string - default value: estimatedposebaselink
- description: the name of the estimated position topic (transformed into the baselink) (Publisher, geometry_msgs::PoseStamped)
- type:
est_accuracy_topic- type:
string - default value: estimation_accuracy
- description: the name of the estimattion accuracy marker topic (Publisher, visualization_msgs::Marker)
- type:
loop_rate_hz- type:
int - default value:
60 - description: the ROS loop rate of the node (in Hz)
- type:
estimation_method- type:
int - default value:
8 - description: the estimation method
0: Kinematic model with EKF and without GNSS position; initial GNSS based orientation estimation disabled1: Kinematic + dynamic model without EKF and GNSS position; initial GNSS based orientation estimation disabled2: Kinematic model without EKF and GNSS position; initial GNSS based orientation estimation enabled3: Kinematic + dynamic model without EKF and GNSS position; initial GNSS based orientation estimation enabled4: Currently not used5: Kinematic model with EKF and without GNSS; initial GNSS based orientation estimation disabled6: Kinematic + dynamic model with EKF and without GNSS position; initial GNSS based orientation estimation disabled (USE THIS AS DEFAULT FOR ESTIMATION WITHOUT GNSS)7: Kinematic model with EKF and without GNSS position; initial GNSS based orientation estimation enabled8: Kinematic + dynamic model with EKF and without GNSS position; initial GNSS based orientation estimation enabled9: Currently used for debugging10: Automatically switch between the different estimation methods
- type:
dynamic_time_calc- type:
bool - default value:
true - description: true if the time difference is calculated between each step, false if fix value is used (1/lROSLoopRateclhz)
- type:
kinematic_model_max_speed- type:
double - default value:
0.3 - description: the speed where the algorithm switch to the dynamic model from the kinematic model
- type:
do_not_wait_for_gnss_msgs- type:
bool - default value:
true - description:
trueif the algrithm in not waiting for the first positon message (use this for the algorithms without GNSS position and orientation estimation)
- type:
msg_timeout- type:
double - default value:
2000 - description: timeout for vehicle status and IMU message, if these messages does not arrive until timeout then the estimation will stop [ms]
- type:
vehicle_param_c1- type:
double - default value:
3000 - description: front wheel cornering stiffness (for single track model) [N/rad]
- type:
vehicle_param_c2- type:
double - default value:
3000 - description: rear wheel cornering stiffness (for single track model) [N/rad]
- type:
vehicle_param_m- type:
double - default value:
180 - description: mass of the vehicle [kg]
- type:
vehicle_param_jz- type:
double - default value:
270 - description: moment of inertia (z axle) [kg*m2]
- type:
vehicle_param_l1- type:
double - default value:
0.324 - description: CoG distance from the front axle [m]
- type:
vehicle_param_l1- type:
double - default value:
0.976 - description: CoG distance from the rear axle [m]
- type:
vehicle_param_swr- type:
double - default value:
1.0 - description: Steering wheel ratio
- type:
Rosbag
Download: jkk-research.github.io/dataset
Direct download of zipped MCAPs: download zip (~15 MB)
Make sure you have unzip (sudo apt-get install unzip) and:
powershell
unzip jkkds02.zip
powershell
ros2 bag play nissan_zala_50_zeg_1_0.mcap
This example bag (mcap) file can be used with:
powershell
ros2 launch kalman_pos kalman_pos_nissan1.launch.py
Cite & paper
If you use any of this code please consider citing the paper:
bibtex
@Article{doi:10.1177/09544070241266281,
title = {Localization robustness improvement for an autonomous race car using multiple extended Kalman filters},
author = {Krisztián Enisz and István Szalay and Ernő Horváth},
journal = {Proceedings of the Institution of Mechanical Engineers, Part D: Journal of Automobile Engineering},
volume = {0},
url = {https://doi.org/10.1177/09544070241266281},
eprint = {https://doi.org/10.1177/09544070241266281},
doi = {10.1177/09544070241266281}
}
Owner
- Name: JKK - Vehicle Industry Research Center
- Login: jkk-research
- Kind: organization
- Location: Győr, Hungary, Europe
- Website: http://jkk.sze.hu/
- Repositories: 5
- Profile: https://github.com/jkk-research
Széchenyi University's Research Center
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please consider citing as below."
authors:
- family-names: "Enisz"
given-names: "Krisztián"
orcid: "https://orcid.org/0000-0003-3959-198X"
- family-names: "Szalay"
given-names: "István"
orcid: "https://orcid.org/0000-0002-0384-4730"
- family-names: "Horváth"
given-names: "Ernő"
orcid: "https://orcid.org/0000-0001-5083-2073"
title: "Localization robustness improvement for an autonomous race car using multiple extended Kalman filters"
version: "2024"
doi: "10.1177/09544070241266281"
url: "https://github.com/jkk-research/kalman_pos"
preferred-citation:
type: article
authors:
- family-names: "Enisz"
given-names: "Krisztián"
orcid: "https://orcid.org/0000-0003-3959-198X"
- family-names: "Szalay"
given-names: "István"
orcid: "https://orcid.org/0000-0002-0384-4730"
- family-names: "Horváth"
given-names: "Ernő"
orcid: "https://orcid.org/0000-0001-5083-2073"
doi: "10.1177/09544070241266281"
title: "Localization robustness improvement for an autonomous race car using multiple extended Kalman filters"
year: 2024
journal: "Proceedings of the Institution of Mechanical Engineers, Part D: Journal of Automobile Engineering"
GitHub Events
Total
- Release event: 1
- Watch event: 4
- Push event: 7
- Create event: 1
Last Year
- Release event: 1
- Watch event: 4
- Push event: 7
- Create event: 1