This repository contains implementation of lastest version of RobMOT (RobMOT: T-ITS 2025, MD-KF: RA-L 2026). You can find the original repository of RobMOT via Github. Regarding MD-KF paper, kindly wait for the final version that will be shown in RA-L as the paper representation is more concise with interesting :) . For any question related to the repository, feel free to reach me out (Contact is at the end). A video of the node is available here.
Before running the node, make sure you have updated src/robmot/CMakeLists.txt with pathes matches the running machine. The node expects the following libraries:
C/G++: 13
CUDA: 12.8
Eigen3
Torch: (Please remove the related pytorch lines from this file as the robmot version in this repository does not require pytorch)
ros2 (rclcpp, sensor_msgs, cv_bridge, autoware_perception_msgs,tf2, visualization_msgs)
The tracker is already finetuned on autoware detector using (KITTI dataset)[https://www.cvlibs.net/datasets/kitti/eval_tracking.php]. For more details, please check the following slides: Slide 1 Slide 2. The important configuration parameters are listed below:
# File src/robmot/config/config.h
//
// RobMOT has its own visualization node on Rviz. To activate this node, make sure `activateVisualizationNode` is true. However, disable it in case of deployment to avoid unnecessary computation.
constexpr static const bool activateVisualizationNode = true;
// Detection input topic in autoware format
constexpr static const char* detectionTopic = "/perception/object_recognition/detection/objects";
// tracking topic to publish
constexpr static const char* trackingTopic = "/tracked_objects";
}; # File src/robmot/config/config.cpp
// The maximum distance (in meters) to associate an estimation to a recent detection.
float parameters::Autoware::getEclTh() const { return 4.0f; }
// validation score threshold. If a track validation score exceeds this threshold, its status convert to 'validated'. (For ghost tracks identification) Please read T-ITS paper for more details about this one.
float parameters::Autoware::getGhostRemTh() const { return 40.0f; } # File src/robmot/src/object_detection_module/ObjectDetection.cpp
// This line responsible of displaying driving intention arrow. (Please check the second slide). Make sure the `Eigen::Vector2d dir` accepts forward and left/right axis.
Eigen::Vector2d dir(object->_3dBoxLiDAR->stateEstimation(3), -object->_3dBoxLiDAR->stateEstimation(2));
...
if (object->_3dBoxLiDAR->found) {
if(speed < 0.5){ // threshold to detect stationary objects. (Check the second slide)
marker.color.g = 0.0; marker.color.r = 0.0;marker.color.b = 1.0;
}else{
marker.color.g = 1.0; marker.color.r = 0.0;
}
} else {
marker.color.g = 1.0; marker.color.r = 1.0;
}
This work is based on two papers mentioned in the introduction. Please use the following citation if you used this work in a research purpose.
@ARTICLE{11071990,
author={Nagy, Mohamed and Werghi, Naoufel and Hassan, Bilal and Dias, Jorge and Khonji, Majid},
journal={IEEE Transactions on Intelligent Transportation Systems},
title={RobMOT: 3D Multi-Object Tracking Enhancement Through Observational Noise and State Estimation Drift Mitigation in LiDAR Point Clouds},
year={2025},
volume={26},
number={10},
pages={16047-16059},
keywords={Trajectory;State estimation;Noise;Detectors;Three-dimensional displays;Location awareness;Tracking;Logic gates;Accuracy;Kalman filters;3D multi-object tracking;state estimation;Kalman filter;LiDAR point cloud},
doi={10.1109/TITS.2025.3581980}}
# For the paper below, please check first if its R-AL version is available. If so, replace it with the publish version in R-AL.
@misc{nagy2025accuratestateestimationkalman,
title={Towards Accurate State Estimation: Kalman Filter Incorporating Motion Dynamics for 3D Multi-Object Tracking},
author={Mohamed Nagy and Naoufel Werghi and Bilal Hassan and Jorge Dias and Majid Khonji},
year={2025},
eprint={2505.07254},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2505.07254},
}Mohamed Nagy
Email: [email protected]
Website: Personal Website