Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
motion_models.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <eigen3/Eigen/Dense>
4#include <functional>
5#include <map>
6#include <memory>
7#include <rclcpp/rclcpp.hpp>
8#include <typeinfo>
9
22 double acceleration_x = 0.0;
23 double acceleration_y = 0.0;
24 double rotational_velocity = 0.0;
25 double steering_angle = 0.0;
26 rclcpp::Time last_update;
27};
28
37public:
44 explicit MotionModel(const Eigen::MatrixXf &process_noise_covariance_matrix);
45
55 virtual Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state,
56 const MotionUpdate &motion_prediction_data,
57 const double time_interval) const = 0;
58
68 virtual Eigen::MatrixXf get_motion_to_state_matrix(
69 const Eigen::VectorXf &expected_state,
70 [[maybe_unused]] const MotionUpdate &motion_prediction_data,
71 const double time_interval) const = 0;
72
79 Eigen::MatrixXf get_process_noise_covariance_matrix(const unsigned int state_size) const;
80
81 static Eigen::MatrixXf create_process_noise_covariance_matrix(float process_noise);
82
83 virtual ~MotionModel() = default;
84};
85
95
96public:
103 explicit ImuVelocityModel(const Eigen::MatrixXf &process_noise_covariance_matrix);
104
115 Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state,
116 const MotionUpdate &motion_prediction_data,
117 const double time_interval) const override;
128 Eigen::MatrixXf get_motion_to_state_matrix(
129 const Eigen::VectorXf &expected_state,
130 [[maybe_unused]] const MotionUpdate &motion_prediction_data,
131 [[maybe_unused]] const double time_interval) const override;
132};
133
142
143public:
150 explicit NormalVelocityModel(const Eigen::MatrixXf &process_noise_covariance_matrix);
151
162 Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state,
163 const MotionUpdate &motion_prediction_data,
164 const double time_interval) const override;
165
176 Eigen::MatrixXf get_motion_to_state_matrix(
177 const Eigen::VectorXf &expected_state,
178 [[maybe_unused]] const MotionUpdate &motion_prediction_data,
179 [[maybe_unused]] const double time_interval) const override;
180};
181
183const std::map<std::string, std::function<std::shared_ptr<MotionModel>(const Eigen::MatrixXf &)>,
184 std::less<>>
186 {"normal_velocity_model",
187 [](const Eigen::MatrixXf &process_noise_covariance_matrix)
188 -> std::shared_ptr<MotionModel> {
189 return std::make_shared<NormalVelocityModel>(process_noise_covariance_matrix);
190 }},
191 {"imu_velocity_model",
192 [](const Eigen::MatrixXf &process_noise_covariance_matrix)
193 -> std::shared_ptr<MotionModel> {
194 return std::make_shared<ImuVelocityModel>(process_noise_covariance_matrix);
195 }}};
Motion estimation that uses the specific values of the x and y axis accelerations,...
Eigen::MatrixXf get_motion_to_state_matrix(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const override
Calculate state covariance matrix from velocity model using IMU data and linear functions Uses transl...
Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const override
Calculate expected state vector from velocity model using IMU data and linear functions Uses translat...
Eigen::MatrixXf _process_noise_covariance_matrix
Abstract Moiton Model class designed to be implemented by the different motion models.
virtual Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const =0
Calculate expected state vector from motion estimation.
static Eigen::MatrixXf create_process_noise_covariance_matrix(float process_noise)
Eigen::MatrixXf _process_noise_covariance_matrix
R.
Eigen::MatrixXf get_process_noise_covariance_matrix(const unsigned int state_size) const
Get the process noise covariance matrix object.
virtual Eigen::MatrixXf get_motion_to_state_matrix(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const =0
Calculate state covariance matrix from motion estimation.
virtual ~MotionModel()=default
Motion estimation that uses the module of the velocity and the rotational velocity.
Eigen::VectorXf predict_expected_state(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const override
Calculate expected state vector from velocity model using normal motion data Uses translation velocit...
Eigen::MatrixXf get_motion_to_state_matrix(const Eigen::VectorXf &expected_state, const MotionUpdate &motion_prediction_data, const double time_interval) const override
Calculate state covariance matrix from velocity model using normal motion data Uses translation veloc...
Eigen::MatrixXf _process_noise_covariance_matrix
const std::map< std::string, std::function< std::shared_ptr< MotionModel >(const Eigen::MatrixXf &)>, std::less<> > motion_model_constructors
Map object to map strings from launch file parameter to constructor.
Struct for data retrieved by the IMU.
double rotational_velocity
Degrees per sec.
double translational_velocity
Meters per sec.
rclcpp::Time last_update
Timestamp of last update.
double acceleration_x
Meters per sec.
double acceleration_y
Meters per sec.
double steering_angle
Degrees.