Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
slam_node.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <gtest/gtest_prod.h>
4#include <tf2_ros/transform_broadcaster.h>
5
6#include <Eigen/Dense>
7#include <memory>
8#include <nav_msgs/msg/odometry.hpp>
9#include <sensor_msgs/msg/imu.hpp>
10#include <string>
11#include <visualization_msgs/msg/marker_array.hpp>
12
17#include "custom_interfaces/msg/cone_array.hpp"
18#include "custom_interfaces/msg/perception_output.hpp"
19#include "custom_interfaces/msg/point2d.hpp"
20#include "custom_interfaces/msg/pose.hpp"
21#include "custom_interfaces/msg/velocities.hpp"
24#include "rclcpp/rclcpp.hpp"
27#include "std_msgs/msg/float64.hpp"
28#include "std_msgs/msg/float64_multi_array.hpp"
29
35class SLAMNode : public rclcpp::Node {
36protected:
37 rclcpp::CallbackGroup::SharedPtr _callback_group_;
39 rclcpp::Subscription<custom_interfaces::msg::PerceptionOutput>::SharedPtr
41 rclcpp::Subscription<custom_interfaces::msg::Velocities>::SharedPtr _velocities_subscription_;
42 rclcpp::Publisher<custom_interfaces::msg::Pose>::SharedPtr _vehicle_pose_publisher_;
43 rclcpp::Publisher<custom_interfaces::msg::ConeArray>::SharedPtr _map_publisher_;
44 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr _visualization_map_publisher_;
45 rclcpp::Publisher<visualization_msgs::msg::Marker>::SharedPtr
47 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr
49 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr
51 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr _execution_time_publisher_;
52 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr
55 rclcpp::Publisher<std_msgs::msg::Float64>::SharedPtr _lap_counter_publisher_;
56 rclcpp::Publisher<std_msgs::msg::Float64>::SharedPtr _perception_delta_publisher_;
57 rclcpp::Time _last_perception_message_time_ = rclcpp::Time(0);
58 rclcpp::CallbackGroup::SharedPtr
59 _parallel_callback_group_; // Group of callbacks that runs in parallel with all others, used
60 // for EKF SLAM with parallel correction step
61 std::shared_mutex mutex_;
62
63 std::shared_ptr<tf2_ros::TransformBroadcaster> _tf_broadcaster_;
64 rclcpp::TimerBase::SharedPtr _timer_;
65 std::shared_ptr<SLAMSolver> _slam_solver_;
66 std::vector<common_lib::structures::Cone> _perception_map_;
68 std::vector<common_lib::structures::Cone> _track_map_;
69 Eigen::VectorXi _associations_;
70 Eigen::VectorXd _observations_global_;
71 Eigen::VectorXd _map_coordinates_;
73 std::shared_ptr<std::vector<double>>
74 _execution_times_; //< Execution times: 0 -> total motion;
75 // 1 -> total observation; the rest are solver specific
76 common_lib::competition_logic::Mission _mission_ = common_lib::competition_logic::Mission::NONE;
77 bool _go_ = true;
78 std::string _adapter_name_;
79 std::string _vehicle_frame_id_;
81
88 void _perception_subscription_callback(const custom_interfaces::msg::PerceptionOutput& msg);
89
96 void _velocities_subscription_callback(const custom_interfaces::msg::Velocities& msg);
97
104 void _imu_subscription_callback(const sensor_msgs::msg::Imu& msg);
105
111
115 void _publish_map();
116
122
127 void _publish_covariance();
128
134
142
143public:
144 // /**
145 // * @brief Constructor of the main node, most things are received by launch parameter
146 // */
147 // SLAMNode();
148
152 SLAMNode(const SLAMParameters& params);
153
158 void init();
159
163 virtual void finish() = 0;
164};
Class representing the main SLAM node responsible for publishing the calculated pose and map.
Definition slam_node.hpp:35
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr _visualization_map_publisher_
Definition slam_node.hpp:44
Eigen::VectorXd _map_coordinates_
Coordinates of the cones in the map.
Definition slam_node.hpp:71
common_lib::structures::Velocities _vehicle_state_velocities_
Definition slam_node.hpp:67
std::shared_mutex mutex_
Definition slam_node.hpp:61
std::vector< common_lib::structures::Cone > _perception_map_
Definition slam_node.hpp:66
rclcpp::Subscription< custom_interfaces::msg::PerceptionOutput >::SharedPtr _perception_subscription_
Definition slam_node.hpp:40
SLAMParameters _params_
Definition slam_node.hpp:80
rclcpp::Publisher< std_msgs::msg::Float64 >::SharedPtr _perception_delta_publisher_
Definition slam_node.hpp:56
std::string _vehicle_frame_id_
Frame id of the vehicle for the transform.
Definition slam_node.hpp:79
rclcpp::CallbackGroup::SharedPtr _callback_group_
Callback group for subscriptions, used to control if they are concurrent or not.
Definition slam_node.hpp:37
std::shared_ptr< std::vector< double > > _execution_times_
Definition slam_node.hpp:74
void _publish_lap_counter()
publishes the lap counter
rclcpp::Subscription< custom_interfaces::msg::Velocities >::SharedPtr _velocities_subscription_
Definition slam_node.hpp:41
std::string _adapter_name_
flag to start the mission
Definition slam_node.hpp:78
virtual void finish()=0
Finish the mission.
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr _trajectory_visualization_publisher_
Publishes full vehicle trajectory.
Definition slam_node.hpp:48
std::shared_ptr< tf2_ros::TransformBroadcaster > _tf_broadcaster_
Definition slam_node.hpp:63
rclcpp::Publisher< visualization_msgs::msg::Marker >::SharedPtr _position_visualization_publisher_
Publishes the vehicle position.
Definition slam_node.hpp:46
void _publish_vehicle_pose()
publishes the localization ('vehicle_pose') to the topic vehicle_pose
common_lib::competition_logic::Mission _mission_
Definition slam_node.hpp:76
void _velocities_subscription_callback(const custom_interfaces::msg::Velocities &msg)
Callback that updates everytime information is received from velocity estimation node.
rclcpp::Publisher< custom_interfaces::msg::Pose >::SharedPtr _vehicle_pose_publisher_
Definition slam_node.hpp:42
void _publish_covariance()
publishes the covariance of the state
rclcpp::Time _last_perception_message_time_
Definition slam_node.hpp:57
Eigen::VectorXd _observations_global_
Global observations of the cones.
Definition slam_node.hpp:70
bool _go_
Definition slam_node.hpp:77
Eigen::VectorXi _associations_
Definition slam_node.hpp:69
rclcpp::CallbackGroup::SharedPtr _parallel_callback_group_
Definition slam_node.hpp:59
void _publish_associations()
Publishes the visualization of the associations by data association.
rclcpp::Publisher< std_msgs::msg::Float64MultiArray >::SharedPtr _covariance_publisher_
Publishes the covariance of the pose.
Definition slam_node.hpp:53
void _publish_map()
publishes the map ('track_map') to the topic track_map
void _perception_subscription_callback(const custom_interfaces::msg::PerceptionOutput &msg)
Callback that updates everytime information is received from the perception module.
rclcpp::Publisher< std_msgs::msg::Float64MultiArray >::SharedPtr _execution_time_publisher_
Definition slam_node.hpp:51
rclcpp::Publisher< std_msgs::msg::Float64 >::SharedPtr _lap_counter_publisher_
Definition slam_node.hpp:55
common_lib::structures::Pose _vehicle_pose_
Definition slam_node.hpp:72
rclcpp::Publisher< custom_interfaces::msg::ConeArray >::SharedPtr _map_publisher_
Definition slam_node.hpp:43
bool _is_mission_finished()
Checks if the mission is finished.
void _imu_subscription_callback(const sensor_msgs::msg::Imu &msg)
Callback that updates everytime information is received from the IMU.
std::vector< common_lib::structures::Cone > _track_map_
Definition slam_node.hpp:68
std::shared_ptr< SLAMSolver > _slam_solver_
SLAM solver object.
Definition slam_node.hpp:65
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr _associations_visualization_publisher_
Definition slam_node.hpp:50
rclcpp::TimerBase::SharedPtr _timer_
timer
Definition slam_node.hpp:64
void init()
Initialize functions @description This method is used to initialize things that require the construct...
Parameters for the SLAM node.
Struct for pose representation.
Definition pose.hpp:13