Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
slam_solver.hpp
Go to the documentation of this file.
1#pragma once
2#include <memory>
3
13#include "rclcpp/rclcpp.hpp"
16
23protected:
25 std::shared_ptr<DataAssociationModel> _data_association_; //< Data association pointer
26 std::shared_ptr<V2PMotionModel> _motion_model_; //< Motion model pointer
27 std::shared_ptr<LandmarkFilter> _landmark_filter_; //< Landmark filter pointer
28 common_lib::competition_logic::Mission _mission_ = common_lib::competition_logic::Mission::NONE;
29 std::shared_ptr<std::vector<double>>
30 _execution_times_; //< Execution times: 0 -> total motion; 1 -> total
31 // observation; the rest are solver specific
32 std::shared_ptr<LoopClosure> _loop_closure_; //< Loop closure object pointer
33
34 rclcpp::Time _last_pose_update_ = rclcpp::Time(0);
35 rclcpp::Time _last_observation_update_ = rclcpp::Time(0);
36
38 false; //< Flag to check if the first velocities have been received
39
40 int lap_counter_ = 0; //< Lap counter for the graph SLAM solver
41
42public:
52 SLAMSolver(const SLAMParameters& params, std::shared_ptr<DataAssociationModel> data_association,
53 std::shared_ptr<V2PMotionModel> motion_model,
54 std::shared_ptr<LandmarkFilter> landmark_filter,
55 std::shared_ptr<std::vector<double>> execution_times,
56 std::shared_ptr<LoopClosure> loop_closure);
57
58 virtual ~SLAMSolver() = default;
59
65 virtual void add_observations(const std::vector<common_lib::structures::Cone>& cones,
66 rclcpp::Time cones_timestamp) = 0;
67
72 virtual void add_velocities(const common_lib::structures::Velocities& velocities) = 0;
73
81 virtual void load_initial_state(const Eigen::VectorXd& map, const Eigen::Vector3d& pose) = 0;
82
88 virtual std::vector<common_lib::structures::Cone> get_map_estimate() = 0;
89
96
102 virtual Eigen::MatrixXd get_covariance() = 0;
103
109 virtual int get_lap_counter() = 0;
110
111 virtual Eigen::VectorXi get_associations() const = 0;
112
113 virtual Eigen::VectorXd get_observations_global() const = 0;
114
115 virtual Eigen::VectorXd get_map_coordinates() const = 0;
116
123};
Interface for SLAM solvers.
void set_mission(common_lib::competition_logic::Mission mission)
Set the mission.
virtual void add_velocities(const common_lib::structures::Velocities &velocities)=0
Process new velocity data.
bool _received_first_velocities_
std::shared_ptr< std::vector< double > > _execution_times_
virtual std::vector< common_lib::structures::Cone > get_map_estimate()=0
Get the map estimate object.
virtual void add_observations(const std::vector< common_lib::structures::Cone > &cones, rclcpp::Time cones_timestamp)=0
Add observations to the solver.
common_lib::competition_logic::Mission _mission_
virtual common_lib::structures::Pose get_pose_estimate()=0
Get the pose estimate object.
virtual Eigen::VectorXi get_associations() const =0
virtual Eigen::VectorXd get_observations_global() const =0
virtual Eigen::MatrixXd get_covariance()=0
Get covariance matrix.
rclcpp::Time _last_pose_update_
virtual int get_lap_counter()=0
Get the lap counter.
std::shared_ptr< LoopClosure > _loop_closure_
SLAMParameters _params_
std::shared_ptr< V2PMotionModel > _motion_model_
virtual Eigen::VectorXd get_map_coordinates() const =0
std::shared_ptr< DataAssociationModel > _data_association_
virtual ~SLAMSolver()=default
rclcpp::Time _last_observation_update_
std::shared_ptr< LandmarkFilter > _landmark_filter_
virtual void load_initial_state(const Eigen::VectorXd &map, const Eigen::Vector3d &pose)=0
Loads a previously saved map and pose into the solver.
Parameters for the SLAM node.
Struct for pose representation.
Definition pose.hpp:13