9#include <rclcpp/rclcpp.hpp>
13#include "gtest/gtest.h"
15#include "rclcpp/rclcpp.hpp"
24 std::shared_ptr<ExtendedKalmanFilter>
27 std::chrono::_V2::system_clock::time_point
30 std::chrono::_V2::system_clock::time_point
34 std::chrono::_V2::system_clock::time_point
end_time;
59 auto now = std::chrono::system_clock::now();
60 std::time_t now_time = std::chrono::system_clock::to_time_t(now);
62 localtime_r(&now_time, &now_tm);
65 ss << std::put_time(&now_tm,
"%Y-%m-%d-%H:%M");
74 std::filesystem::exists(
"../../performance/exec_time/ekf_state_est/" +
file_name);
75 std::ofstream file(
"../../performance/exec_time/ekf_state_est/" +
file_name,
81 file <<
"Number of Cones in the Map, Prediction Step Execution Time, "
82 "Number of Cones coming "
83 "from perception, Correction Step Execution Time (ms), Total "
88 double prediction_step_duration_milliseconds =
94 double correction_step_duration_milliseconds =
100 double milliseconds =
101 prediction_step_duration_milliseconds + correction_step_duration_milliseconds;
103 printf(
"The Test Duration Was: %f ms\n", milliseconds);
109 << milliseconds << std::endl;
121 std::ifstream file(
"../../src/ekf_state_est/test/data/map_test.txt");
123 if (!file.is_open()) {
131 ekf_test->_x_vector_ = Eigen::VectorXf::Zero(size * 2 + 6);
132 ekf_test->_p_matrix_ = Eigen::SparseMatrix<float>(size * 2 + 6, size * 2 + 6);
133 ekf_test->_p_matrix_.coeffRef(0, 0) =
static_cast<float>(1.1);
134 ekf_test->_p_matrix_.coeffRef(1, 1) =
static_cast<float>(1.1);
135 ekf_test->_p_matrix_.coeffRef(2, 2) =
static_cast<float>(1.1);
136 ekf_test->_p_matrix_.coeffRef(3, 3) =
static_cast<float>(1.1);
137 ekf_test->_p_matrix_.coeffRef(4, 4) =
static_cast<float>(1.1);
138 ekf_test->_p_matrix_.coeffRef(5, 5) =
static_cast<float>(1.1);
140 while ((file >> value1 >> value2) && i < (size * 2 + 6)) {
141 ekf_test->_x_vector_(i) =
static_cast<float>(value1);
143 ekf_test->_x_vector_(i) =
static_cast<float>(value2);
152 start_time = std::chrono::high_resolution_clock::now();
161 q_test = Eigen::Matrix2f::Zero();
162 q_test(0, 0) =
static_cast<float>(0.3);
163 q_test(1, 1) =
static_cast<float>(0.3);
164 r_test = Eigen::MatrixXf::Zero(5, 5);
165 r_test(0, 0) =
static_cast<float>(0.8);
166 r_test(1, 1) =
static_cast<float>(0.8);
167 r_test(2, 2) =
static_cast<float>(0.8);
168 r_test(3, 3) =
static_cast<float>(0.8);
169 r_test(4, 4) =
static_cast<float>(0.8);
182 void run_execution(
const std::vector<common_lib::structures::Cone>& cone_map) {
186 for (
int i = 0; i < 10; i++) {
188 auto ekf_for_correction = *
ekf_test;
190 start_time = std::chrono::high_resolution_clock::now();
193 ekf_for_correction.correction_step(cone_map);
194 end_time = std::chrono::high_resolution_clock::now();
214 std::vector<common_lib::structures::Cone> cone_map;
218 std::ifstream file(
"../../src/ekf_state_est/test/data/perception_output.csv");
221 if (!file.is_open()) {
226 std::istringstream iss(line);
228 std::vector<std::string> tokens;
231 while (std::getline(iss, token,
',')) {
232 tokens.push_back(token);
237 cone_map.push_back(cone);
252 std::vector<int> cones_detected_cases = {1, 2, 5, 10};
253 std::vector<int> map_size_cases = {10, 20, 50, 100, 200};
254 for (
auto i : cones_detected_cases) {
255 std::vector<common_lib::structures::Cone> cone_map = create_cone_map(i);
256 for (
auto j : map_size_cases) {
257 prediction_step_input_size = j;
259 run_execution(cone_map);