Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
ECUNode Class Reference

#include <ECUNode.hpp>

Inheritance diagram for ECUNode:
Collaboration diagram for ECUNode:

Public Member Functions

 ECUNode ()
 
void init (std::shared_ptr< ECUHandler > _handler)
 Initialises the ECUNode and saves the pointer to the ECU Handler. More...
 
void publishMeasurements (const EcuPacket *const packet, const std::array< std::chrono::duration< double, std::milli >, 10 > &diff_ms)
 Publishes the new Measurements from the ECU on the apropriate Publishers.
More...
 

Private Member Functions

void motion_callback (const ControlMotionType::SharedPtr p_msgSPtr)
 Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.
More...
 
void lights_callback (const ControlLightsType::SharedPtr p_msgSPtr)
 
void settingsvalues_callback (const SettingsValuesType::SharedPtr p_msgSPtr)
 Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.
More...
 

Private Attributes

rclcpp::Publisher< ButtonStateMessageType >::SharedPtr m_buttonStatePubSPtr = nullptr
 Publisher object for buttonStates. More...
 
rclcpp::Publisher< MeasurementsType >::SharedPtr m_measurementPubSPtr = nullptr
 Publisher object for measurements. More...
 
rclcpp::Publisher< sensor_msgs::msg::Range >::SharedPtr m_TOFRearPubSPtr
 
rclcpp::Publisher< sensor_msgs::msg::Range >::SharedPtr m_TOFRightPubSPtr
 
rclcpp::Publisher< std_msgs::msg::Float32 >::SharedPtr m_velocityPubSPtr
 
rclcpp::Subscription< ControlMotionType >::SharedPtr m_controlValuesSubSPtr = nullptr
 Subscriber object for control values from controller node. More...
 
rclcpp::Subscription< SettingsValuesType >::SharedPtr m_settingsValuesSubSPtr = nullptr
 Subscriber object for control values from controller node. More...
 
rclcpp::Subscription< ControlLightsType >::SharedPtr m_lightsSubSPtr = nullptr
 
std::shared_ptr< ECUHandler > m_ecuHandlerSPtr = nullptr
 Handler for ECU communication. More...
 
ControlLightsType::SharedPtr m_lastLightsSPtr = nullptr
 
uint8_t m_lastButtonState = 0
 
std::mutex m_lightsMtx
 

Additional Inherited Members

- Protected Member Functions inherited from GalaxisNode
 GalaxisNode ()=delete
 
 GalaxisNode (std::string p_name, unsigned int p_heartbeatTimePeriod)
 
 GalaxisNode (std::string p_name)
 
template<typename MsgSPtr >
void tickSub (std::map< galaxis::serviceStates::State, std::function< void(const MsgSPtr)>> const *p_functionMapPtr, MsgSPtr const p_message)
 
template<typename... Args>
void tickPub (std::map< galaxis::serviceStates::State, std::function< void(Args...)>> const *p_functionMapPtr, Args... p_args)
 
void register_callback (std::function< void(galaxis::serviceStates::State)> p_function)
 
void service_state_callback (ServiceStateType::SharedPtr const p_msgSPtr)
 
galaxis::serviceStates::State get_current_service_state () const
 
void enable_parameters (std::function< rcl_interfaces::msg::SetParametersResult(const std::vector< rclcpp::Parameter > &)> callbackFunc)
 
void create_parameters (std::shared_ptr< json > configJsonSPtr)
 
json const & get_global_settings ()
 

Detailed Description

Definition at line 15 of file ECUNode.hpp.

Constructor & Destructor Documentation

◆ ECUNode()

ECUNode::ECUNode ( )
inline

Definition at line 17 of file ECUNode.hpp.

17  :
18  GalaxisNode("ecu_node") {}

Member Function Documentation

◆ init()

void ECUNode::init ( std::shared_ptr< ECUHandler >  _handler)

Initialises the ECUNode and saves the pointer to the ECU Handler.

Parameters
_handlerAn ECU Handler object

Definition at line 19 of file ECUNode.cpp.

19  {
20  /* for create_publisher and create_subscriber */
21  using std::placeholders::_1;
22 
23  galaxis::ros::create_publisher(this, m_measurementPubSPtr);
24 
25  rclcpp::QoS qos = galaxis::ros::get_qos_profile(galaxis::ros::QoS_Profile_t::QOS_RELIABLE);
26  // m_measurementPubSPtr2 = this->create_publisher<MeasurementsType>("/measurements/lowfrequency", qos);
27 
28  galaxis::ros::create_publisher(this, m_buttonStatePubSPtr);
29 
30  galaxis::ros::create_subscription(this,
32  std::bind(&ECUNode::motion_callback, this, _1));
33 
34  galaxis::ros::create_subscription(this,
36  std::bind(&ECUNode::settingsvalues_callback, this, _1));
37 
38  galaxis::ros::create_subscription(this,
40  std::bind(&ECUNode::lights_callback, this, _1));
41 
42 
43 
44  m_velocityPubSPtr = this->create_publisher<std_msgs::msg::Float32>("/measurements/speed", qos);
45 
46  // m_TOFRearPubSPtr = this->create_publisher<sensor_msgs::msg::Range>("/measurements/rear", qos);
47  // m_TOFRightPubSPtr = this->create_publisher<sensor_msgs::msg::Range>("/measurements/right", qos);
48 
49  m_ecuHandlerSPtr = p_ecuHandlerSPtr;
50 
51  log("successfully initialised...");
52 }

References lights_callback(), galaxis::utils::log(), motion_callback(), and settingsvalues_callback().

Here is the call graph for this function:

◆ lights_callback()

void ECUNode::lights_callback ( const ControlLightsType::SharedPtr  p_msgSPtr)
private

Definition at line 300 of file ECUNode.cpp.

300  {
301  std::unique_lock<std::mutex> lock(m_lightsMtx);
302  m_lastLightsSPtr = p_msgSPtr;
303 }

Referenced by init().

Here is the caller graph for this function:

◆ motion_callback()

void ECUNode::motion_callback ( const ControlMotionType::SharedPtr  p_msgSPtr)
private

Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.

Parameters
p_msgSPtr

Definition at line 54 of file ECUNode.cpp.

54  {
55  log_debug("send control values via ECU handler");
56 
57  ComputerPacket packet = {};
58 
59  packet.motor_erpm = p_msgSPtr->set_motor_erpm;
60  packet.motor_current = p_msgSPtr->set_motor_current;
61  log_debug("motor current ", p_msgSPtr->set_motor_current);
62  packet.servo_front = std::min(int(p_msgSPtr->set_servo_front) + 3, 127);
63  packet.servo_rear = p_msgSPtr->set_servo_rear;
64  packet.brake = p_msgSPtr->set_brakes ? 1 : 0;
65 
66  uint8_t headlight = 1;
67  uint8_t blinkerLeft = 0;
68  uint8_t blinkerRight = 0;
69  uint8_t brakelight = packet.brake;
70 
71  if(m_lastLightsSPtr != nullptr && this->get_clock()->now() - m_lastLightsSPtr->header.stamp < rclcpp::Duration(2,0)) { // skip if light msg older than 2seconds
72  m_lightsMtx.lock();
73  headlight = m_lastLightsSPtr->set_headlight;
74  // 0x0 off, 0x1 on, 0x2 blink, 0x3 NOT set
75  blinkerLeft = m_lastLightsSPtr->set_blinker_left ? 0x2 : 0; // TODO before it was 0x3 but ecu crashed
76  blinkerRight = m_lastLightsSPtr->set_blinker_right ? 0x2 : 0; // TODO before it was 0x3 but ecu crashed
77  brakelight = m_lastLightsSPtr->set_brake_light;
78  m_lightsMtx.unlock();
79  }
80 
82  packet.lightState =
84  headlight,
85  brakelight,
86  blinkerLeft,
87  blinkerRight,
88  0,
89  0,
90  0);
91 
92  log("preamble " , packet.preamble);
93  log("packet_id " , packet.packet_id);
94  log("motor_erpm " , packet.motor_erpm);
95  log("motor_current " , packet.motor_current);
96  log("servo_front " , packet.servo_front);
97  log("servo_rear " , packet.servo_rear);
98  log("lightState " , packet.lightState);
99  log("crc " , packet.crc);
100 
101  m_ecuHandlerSPtr->TransmitPacket(packet);
102 }

References ComputerPacket, convertLightStatesIntoFinalState(), galaxis::utils::log(), and galaxis::utils::log_debug().

Referenced by init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ publishMeasurements()

void ECUNode::publishMeasurements ( const EcuPacket *const  packet,
const std::array< std::chrono::duration< double, std::milli >, 10 > &  diff_ms 
)

Publishes the new Measurements from the ECU on the apropriate Publishers.

Definition at line 140 of file ECUNode.cpp.

140  {
141  //log_debug("publish measurements");
142  if(packet == nullptr) {
143  log_warning("nullptr as argument");
144  return;
145  }
146 
147  std::unique_ptr<MeasurementsType> msgUPtr = std::make_unique<MeasurementsType>();
148 
149  msgUPtr->header.stamp = this->get_clock()->now();
150  msgUPtr->rc_active = packet->rc_active;
151  msgUPtr->motor_erpm = packet->motor_erpm;
152  msgUPtr->motor_duty_cycle = packet->motor_duty_cycle;
153  msgUPtr->linear_acceleration_x = packet->linear_acceleration_x;
154  msgUPtr->linear_acceleration_y = packet->linear_acceleration_y;
155  msgUPtr->linear_acceleration_z = packet->linear_acceleration_z;
156  msgUPtr->gyro_x = packet->gyro_x;
157 
158  // Sometimes if the tof sensor sees no obstacle the distance becomes 0, to fix
159  // this we set it to max
160  if(packet->tof_right == 0){
161  msgUPtr->time_of_flight_right = 2.f;
162  }else{
163  msgUPtr->time_of_flight_right = float(packet->tof_right) / 1000.f;
164  }
165  if(packet->tof_rear == 0){
166  msgUPtr->time_of_flight_rear = 2.f;
167  }else{
168  msgUPtr->time_of_flight_rear = float(packet->tof_rear) / 1000.f;
169  }
170 
171  msgUPtr->orientation = packet->orientation;
172  msgUPtr->button_state = packet->buttonState;
173  msgUPtr->battery_level = packet->batteryLevel;
174  msgUPtr->applied_servo_front = packet->applied_servo_front;
175  msgUPtr->applied_servo_rear = packet->applied_servo_rear;
176  msgUPtr->applied_motor_current = packet->applied_motor_current;
177  msgUPtr->applied_motor_erpm = packet->applied_motor_erpm;
178  msgUPtr->applied_motor_brake = packet->applied_motor_brake;
179  for(size_t i = 0; i < 3; i++) {
180  msgUPtr->battery_cell_level[i] = packet->batteryCellLevel[i];
181  }
182 
183  static int count = 0;
184  count++;
185  if(count == 10) {
186  std::array<double, 10> temp_array;
187  for(size_t i = 0; i < temp_array.size(); ++i) {
188  temp_array[i] = diff_ms.at(i).count();
189  }
190  std::sort(temp_array.begin(), temp_array.end());
191  // log("Time Diff to last packet: [,,,,,,,,,]",
192  // temp_array[0],
193  // temp_array[1],
194  // temp_array[2],
195  // temp_array[3],
196  // temp_array[4],
197  // temp_array[5],
198  // temp_array[6],
199  // temp_array[7],
200  // temp_array[8],
201  // temp_array[9]);
202  log("Max difference: ", temp_array[9]);
203  log("Min difference: ", temp_array[0]);
204  uint32_t sum_differences = 0;
205  for(size_t i = 0; i < 10; i++) {
206  sum_differences += diff_ms.at(i).count();
207  }
208  float average_differences = (float)sum_differences / 10.0;
209  log("average differences: ", average_differences);
210  log("rc_active: ", packet->rc_active);
211  log("Motor ERPM: ", packet->motor_erpm);
212  float rpm = packet->motor_erpm / 7;
213  log("Motor RPM: ", rpm);
214  float velocity = galaxis::motorSettings::erpmToVelocity(packet->motor_erpm);
215  log("Velocity: ", velocity);
216  log("Duty Cycle: ", packet->motor_duty_cycle);
217  if(packet->tof_right == 0){
218  log("tof_right: 2.0");
219  }else{
220  log("tof_right: ", packet->tof_right / 1000.f);
221  }
222  if(packet->tof_rear == 0){
223  log("tof_rear: 2.0");
224  }else{
225  log("tof_rear: ", packet->tof_rear / 1000.f);
226  }
227 
228 
229  log("orientation: ", packet->orientation);
230  log("linear_acc_x: ", packet->linear_acceleration_x);
231  log("linear_acc_y: ", packet->linear_acceleration_y);
232  log("linear_acc_z: ", packet->linear_acceleration_z);
233  log("gyro_x: ", packet->gyro_x);
234  log("buttonState: ", packet->buttonState);
235  log("batteryLevel: ", packet->batteryLevel);
236  for(size_t i = 0; i < 3; i++) {
237  log("batteryCellLevel[]: ", i, packet->batteryCellLevel[i]);
238  }
239  log("applied servo front: ", packet->applied_servo_front);
240  log("applied servo rear: ", packet->applied_servo_rear);
241  log("Applied motor current: ", packet->applied_motor_current);
242  log("Applied motor erpm: ", packet->applied_motor_erpm);
243  log("Applied motor brake: ", packet->applied_motor_brake);
244  log("\n");
245  }
246 
247  //TODO split measurements into different messages
248  // if(packet->buttonState != m_lastButtonState) {
249  // auto buttonStateMsgUPtr = std::make_unique<ButtonStateMessageType>();
250  // log("Sending new buttonstate ", packet->buttonState);
251  // buttonStateMsgUPtr->pressed_button_1 = (packet->buttonState >> 0) & 1;
252  // buttonStateMsgUPtr->pressed_button_2 = (packet->buttonState >> 1) & 1;
253  // buttonStateMsgUPtr->pressed_button_3 = (packet->buttonState >> 2) & 1;
254 
255  // m_buttonStatePubSPtr->publish(std::move(buttonStateMsgUPtr));
256  // }
257 
258  m_measurementPubSPtr->publish(std::move(msgUPtr));
259 
260  if(count == 10) {
261  std::unique_ptr<std_msgs::msg::Float32> velocityUPtr = std::make_unique<std_msgs::msg::Float32>();
262  velocityUPtr->data = galaxis::motorSettings::erpmToVelocity(packet->motor_erpm);
263  m_velocityPubSPtr->publish(std::move(velocityUPtr));
264  }
265 
266 
267  // ############### ToF redundant separate msg ###############
268  // std::unique_ptr<sensor_msgs::msg::Range> range_msg = std::make_unique<sensor_msgs::msg::Range>();
269  // range_msg->max_range = 2.f;
270  // range_msg->min_range = 0.f;
271 
272  // if(packet->tof_rear == 0){
273  // range_msg->range = 2.f;
274  // }else{
275  // range_msg->range = float(packet->tof_rear) / 1000.f;
276  // }
277 
278  // m_TOFRearPubSPtr->publish(std::move(range_msg));
279 
280  // std::unique_ptr<sensor_msgs::msg::Range> range_msg2 = std::make_unique<sensor_msgs::msg::Range>();
281  // range_msg2->max_range = 2.f;
282  // range_msg2->min_range = 0.f;
283 
284  // if(packet->tof_right == 0){
285  // range_msg2->range = 2.f;
286  // }else{
287  // range_msg2->range = float(packet->tof_right) / 1000.f;
288  // }
289 
290  // m_TOFRightPubSPtr->publish(std::move(range_msg2));
291 
292 
293  m_lastButtonState = packet->buttonState;
294 
295  if(count >= 10) {
296  count = 0;
297  }
298 }

References galaxis::motorSettings::erpmToVelocity(), galaxis::utils::log(), and galaxis::utils::log_warning().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ settingsvalues_callback()

void ECUNode::settingsvalues_callback ( const SettingsValuesType::SharedPtr  p_msgSPtr)
private

Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.

Parameters
p_msgSPtr

Definition at line 104 of file ECUNode.cpp.

104  {
105  log("New settings callback");
106  SettingsPacket packet = {};
107 
108  packet.firmware.motor_current_max = p_msgSPtr->firmware.motor_current_max;
109  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.motor_current_max));
110  packet.firmware.erpm_max = p_msgSPtr->firmware.erpm_max;
111  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.erpm_max));
112  packet.firmware.max_brake_current = p_msgSPtr->firmware.max_brake_current;
113  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.max_brake_current));
114 
115  packet.firmware.max_servo_offset.front = p_msgSPtr->firmware.max_servo_offset.front;
116  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.max_servo_offset.front));
117  packet.firmware.max_servo_offset.rear = p_msgSPtr->firmware.max_servo_offset.rear;
118  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.max_servo_offset.rear));
119 
120  packet.firmware.manual_override_difference = p_msgSPtr->firmware.manual_override_difference;
121  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.manual_override_difference));
122  packet.firmware.use_rc_to_steer = p_msgSPtr->firmware.use_rc_to_steer;
123  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.use_rc_to_steer));
124  packet.firmware.rc_use_erpm = p_msgSPtr->firmware.rc_use_erpm;
125  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.rc_use_erpm));
126 
127  packet.firmware.servo_offset.front = p_msgSPtr->firmware.servo_offset.front;
128  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.servo_offset.front));
129  packet.firmware.servo_offset.rear = p_msgSPtr->firmware.servo_offset.rear;
130  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.servo_offset.rear));
131 
132  packet.firmware.motor_current_max_rc = p_msgSPtr->firmware.motor_current_max_rc;
133  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.motor_current_max_rc));
134  packet.firmware.erpm_max_rc = p_msgSPtr->firmware.erpm_max_rc;
135  log("motor_current_max: ", std::to_string(p_msgSPtr->firmware.erpm_max_rc));
136 
137  m_ecuHandlerSPtr->TransmitPacket(packet);
138 }

References galaxis::utils::log(), and SettingsPacket.

Referenced by init().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_buttonStatePubSPtr

rclcpp::Publisher<ButtonStateMessageType>::SharedPtr ECUNode::m_buttonStatePubSPtr = nullptr
private

Publisher object for buttonStates.

Definition at line 40 of file ECUNode.hpp.

◆ m_controlValuesSubSPtr

rclcpp::Subscription<ControlMotionType>::SharedPtr ECUNode::m_controlValuesSubSPtr = nullptr
private

Subscriber object for control values from controller node.

Definition at line 60 of file ECUNode.hpp.

◆ m_ecuHandlerSPtr

std::shared_ptr<ECUHandler> ECUNode::m_ecuHandlerSPtr = nullptr
private

Handler for ECU communication.

Definition at line 73 of file ECUNode.hpp.

◆ m_lastButtonState

uint8_t ECUNode::m_lastButtonState = 0
private

Definition at line 77 of file ECUNode.hpp.

◆ m_lastLightsSPtr

ControlLightsType::SharedPtr ECUNode::m_lastLightsSPtr = nullptr
private

Definition at line 75 of file ECUNode.hpp.

◆ m_lightsMtx

std::mutex ECUNode::m_lightsMtx
private

Definition at line 79 of file ECUNode.hpp.

◆ m_lightsSubSPtr

rclcpp::Subscription<ControlLightsType>::SharedPtr ECUNode::m_lightsSubSPtr = nullptr
private

Definition at line 69 of file ECUNode.hpp.

◆ m_measurementPubSPtr

rclcpp::Publisher<MeasurementsType>::SharedPtr ECUNode::m_measurementPubSPtr = nullptr
private

Publisher object for measurements.

Definition at line 46 of file ECUNode.hpp.

◆ m_settingsValuesSubSPtr

rclcpp::Subscription<SettingsValuesType>::SharedPtr ECUNode::m_settingsValuesSubSPtr = nullptr
private

Subscriber object for control values from controller node.

Definition at line 66 of file ECUNode.hpp.

◆ m_TOFRearPubSPtr

rclcpp::Publisher<sensor_msgs::msg::Range>::SharedPtr ECUNode::m_TOFRearPubSPtr
private

Definition at line 51 of file ECUNode.hpp.

◆ m_TOFRightPubSPtr

rclcpp::Publisher<sensor_msgs::msg::Range>::SharedPtr ECUNode::m_TOFRightPubSPtr
private

Definition at line 52 of file ECUNode.hpp.

◆ m_velocityPubSPtr

rclcpp::Publisher<std_msgs::msg::Float32>::SharedPtr ECUNode::m_velocityPubSPtr
private

Definition at line 53 of file ECUNode.hpp.


The documentation for this class was generated from the following files:
ECUNode::lights_callback
void lights_callback(const ControlLightsType::SharedPtr p_msgSPtr)
Definition: ECUNode.cpp:300
ECUNode::settingsvalues_callback
void settingsvalues_callback(const SettingsValuesType::SharedPtr p_msgSPtr)
Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.
Definition: ECUNode.cpp:104
convertLightStatesIntoFinalState
uint16_t convertLightStatesIntoFinalState(const uint8_t headlight, const uint8_t brakes, const uint8_t blinkerLeft, const uint8_t blinkerRight, const uint8_t scenario1, const uint8_t scenario2, const uint8_t scenario3)
Definition: Conversions.cpp:4
ECUNode::m_lightsMtx
std::mutex m_lightsMtx
Definition: ECUNode.hpp:79
ECUNode::m_buttonStatePubSPtr
rclcpp::Publisher< ButtonStateMessageType >::SharedPtr m_buttonStatePubSPtr
Publisher object for buttonStates.
Definition: ECUNode.hpp:40
ECUNode::m_controlValuesSubSPtr
rclcpp::Subscription< ControlMotionType >::SharedPtr m_controlValuesSubSPtr
Subscriber object for control values from controller node.
Definition: ECUNode.hpp:60
galaxis::utils::log_warning
void log_warning(const Args &... args)
Definition: logger.hpp:41
ECUNode::m_velocityPubSPtr
rclcpp::Publisher< std_msgs::msg::Float32 >::SharedPtr m_velocityPubSPtr
Definition: ECUNode.hpp:53
ECUNode::m_lastButtonState
uint8_t m_lastButtonState
Definition: ECUNode.hpp:77
ECUNode::m_ecuHandlerSPtr
std::shared_ptr< ECUHandler > m_ecuHandlerSPtr
Handler for ECU communication.
Definition: ECUNode.hpp:73
GalaxisNode::GalaxisNode
GalaxisNode()=delete
ECUNode::m_lastLightsSPtr
ControlLightsType::SharedPtr m_lastLightsSPtr
Definition: ECUNode.hpp:75
ComputerPacket
ComputerPacket
Definition: Packets.hpp:103
ECUNode::motion_callback
void motion_callback(const ControlMotionType::SharedPtr p_msgSPtr)
Callback function on new message. Sends the Data to the ECUHandler to send to the ECU.
Definition: ECUNode.cpp:54
GalaxisNode::get_current_service_state
galaxis::serviceStates::State get_current_service_state() const
Definition: GalaxisNode.cpp:65
galaxis::motorSettings::erpmToVelocity
float erpmToVelocity(float const p_erpm)
returns the velocity in [m/s] for a given ERPM
Definition: motorSettings.cpp:5
ECUNode::m_measurementPubSPtr
rclcpp::Publisher< MeasurementsType >::SharedPtr m_measurementPubSPtr
Publisher object for measurements.
Definition: ECUNode.hpp:46
galaxis::utils::log
void log(const Args &... args)
Definition: logger.hpp:33
SettingsPacket
SettingsPacket
Definition: Packets.hpp:31
ECUNode::m_settingsValuesSubSPtr
rclcpp::Subscription< SettingsValuesType >::SharedPtr m_settingsValuesSubSPtr
Subscriber object for control values from controller node.
Definition: ECUNode.hpp:66
galaxis::utils::log_debug
void log_debug(const Args &... args)
Definition: logger.hpp:62
ECUNode::m_lightsSubSPtr
rclcpp::Subscription< ControlLightsType >::SharedPtr m_lightsSubSPtr
Definition: ECUNode.hpp:69
galaxis::serviceStates::State
State
Definition: ServiceState.hpp:9