Autonomous Racing  1
f1tenth Project Group of Technical University Dortmund, Germany
drive_parameters_multiplexer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <ros/ros.h>
4 
6 #include <drive_msgs/drive_param.h>
7 #include <std_msgs/Float64.h>
8 #include <std_msgs/Int32.h>
9 #include <vector>
10 
11 constexpr const char* TOPIC_DRIVE_PARAM = "/commands/drive_param";
12 constexpr const char* TOPIC_DRIVE_PARAMETERS_KEYBOARD = "input/drive_param/keyboard";
13 constexpr const char* TOPIC_DRIVE_PARAMETERS_JOYSTICK = "input/drive_param/joystick";
14 constexpr const char* TOPIC_DRIVE_PARAMETERS_AUTONOMOUS = "input/drive_param/autonomous";
15 constexpr const char* TOPIC_DRIVE_MODE = "/commands/drive_mode";
16 
17 /*
18  * This node subscribes to all publishers that send drive_param messages and selects one to forward to the car
19  * controller
20  */
22 {
23  public:
29 
30  private:
31  ros::NodeHandle m_node_handle;
32 
33  std::array<std::unique_ptr<DriveParametersSource>, 3> m_sources;
34  DriveParametersSource* m_last_updated_source;
35  ros::Publisher m_drive_parameters_publisher;
36  ros::Subscriber m_drive_mode_subscriber;
37 
38  DriveMode m_drive_mode;
39 
44  bool validateSource(DriveParametersSource* source);
45 
51  void onUpdate(DriveParametersSource* source, const drive_msgs::drive_param::ConstPtr& message);
52 
53  void driveModeCallback(const std_msgs::Int32::ConstPtr& drive_mode_message);
54 };
constexpr const char * TOPIC_DRIVE_PARAM
constexpr const char * TOPIC_DRIVE_PARAMETERS_KEYBOARD
constexpr const char * TOPIC_DRIVE_PARAMETERS_AUTONOMOUS
constexpr const char * TOPIC_DRIVE_MODE
DriveMode
Definition: drive_mode.h:3
constexpr const char * TOPIC_DRIVE_PARAMETERS_JOYSTICK
DriveParametersMultiplexer()
Construct a new DriveParametersMultiplexer object and initialize sources for all publishers of drive ...