Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
AutoPilotNode.hpp
Go to the documentation of this file.
1 #ifndef AUTOPILOT_NODE_HPP
2 #define AUTOPILOT_NODE_HPP
3 
5 #include "galaxis/messages.hpp"
6 #include "utils/clock.hpp"
7 
8 #include <sensor_msgs/msg/image.hpp>
9 #include <geometry_msgs/msg/pose.hpp>
10 #include <image_transport/image_transport.h>
11 
12 #include "Decision/AutoPilot.hpp"
13 
14 #include "com/SharedMemory.hpp"
15 
16 #include "nlohmann/json.hpp"
17 
18 #include <std_msgs/msg/u_int8.hpp>
19 
20 using namespace galaxis::utils;
22 
23 class AutoPilotNode : public GalaxisNode {
24 private:
25  bool m_simulationMode = false;
26  bool m_debugMode = false;
27  bool m_fakeLineDetectionMode = false;
28  bool m_sendFullMapDebugMsg = false;
29  bool m_laneDetectionSharedMemoryMode = true;
30  bool m_sendLaneDetectionImage = false;
31 
32  int m_controllerReferenceSendSleepTimeMicroSec = 10000; // 100 FPS
33  int m_poseSendSleepTimeMicroSec = 10000; // 100 FPS
34 
35  std::atomic<uint8_t> m_lastParkingState;
36 
38 
40 
41  // ROS2
42  // Publisher
43  rclcpp::Publisher<PathpolynomType>::SharedPtr m_pathpolynomPubSPtr;
44  rclcpp::Publisher<ControllerReferenceType>::SharedPtr m_controllerRefPubSPtr;
45  rclcpp::Publisher<CarPoseEstimatedType>::SharedPtr m_carposePubSPtr;
46  rclcpp::Publisher<ParkingOperationType>::SharedPtr m_parkingOperationPubSPtr;
47  rclcpp::Publisher<std_msgs::msg::UInt8>::SharedPtr m_autopilotStatePubSPtr;
48 
49  // Subscriber
50  rclcpp::Subscription<MeasurementsType>::SharedPtr m_measurementSub;
51  rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_subscriberCarPoseSPtr;
52  rclcpp::Subscription<ObstacleListType>::SharedPtr m_subscriberObstaclesSPtr;
53  rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr m_subscriberLaneDetectionSub;
54  rclcpp::Subscription<QRCodeDetectType>::SharedPtr m_subscriberQRCodeSPtr;
55  rclcpp::Subscription<StopLineType>::SharedPtr m_subscriberStopLine;
56  rclcpp::Subscription<ParkingStateType>::SharedPtr m_subscriberParkingStateSPtr;
57  // image_transport::Subscriber m_vciLaneDetectionSub;
58 
59  // Debug
60  image_transport::Publisher m_mapDataImageDebugPub;
61  image_transport::Publisher m_laneDetectionMessage;
62  image_transport::Publisher m_fullMapDataImageDebugPub;
63  // image_transport::Publisher m_driveLaneImageDebugPub;
64 
65  std::shared_ptr<DriveInformation_t> m_currentDriveInformationSPtr = nullptr;
66 
68 
70  size_t m_laneDetectionImageSize = 256 * 256 * 3; // width * height * sizeof(rgb_pixel) // ON change: also change in lane_detection_shared_memory_loop
71 
72 
73  bool m_qrCodeDetectedSomeTime = false;
74 
75  std::atomic<float> m_stoplineIgnoreAreaRadius;
76 
77 
78 public:
79  AutoPilotNode();
80  ~AutoPilotNode();
81 
82 private:
83  void on_system_settings_callback(SystemSettingsType::SharedPtr msg);
84 
85  // loops
86  void car_pose_publish_loop();
87  void debug_publish_loop();
88  void controller_reference_publish_loop();
89  void lane_detection_shared_memory_loop();
90 
91  // simulation mode callbacks
92  void on_simulation_pose_callback(geometry_msgs::msg::Pose::SharedPtr p_message);
93 
94  // standard mode callbacks
95  void on_ecu_measurement_callback(MeasurementsType::SharedPtr msg);
96  void on_vci_lane_detection_callback(sensor_msgs::msg::Image::SharedPtr msg);
97  void on_obstacle_callback(ObstacleListType::SharedPtr msg);
98  void on_qr_code_callback(QRCodeDetectType::SharedPtr msg);
99  void on_stop_line_callback(StopLineType::SharedPtr msg);
100  void on_parking_state_callback(ParkingStateType::SharedPtr msg);
101 
102  void send_controller_references();
103 
104  // debug
105  void send_map_debug_image();
106  void send_full_map_debug_image();
107 
108  rcl_interfaces::msg::SetParametersResult new_parameters_callback(const std::vector<rclcpp::Parameter>& parameters);
109 };
110 
111 #endif // AUTOPILOT_NODE_HPP
AutoPilotNode::m_lastParkingState
std::atomic< uint8_t > m_lastParkingState
Definition: AutoPilotNode.hpp:35
AutoPilot
Definition: AutoPilot.hpp:46
com::SharedMemory
Definition: SharedMemory.hpp:24
AutoPilotNode::m_subscriberQRCodeSPtr
rclcpp::Subscription< QRCodeDetectType >::SharedPtr m_subscriberQRCodeSPtr
Definition: AutoPilotNode.hpp:54
AutoPilotNode::m_stoplineIgnoreAreaRadius
std::atomic< float > m_stoplineIgnoreAreaRadius
Definition: AutoPilotNode.hpp:75
json
nlohmann::json json
Definition: AutoPilotNode.hpp:21
AutoPilot.hpp
clock.hpp
AutoPilotNode::m_subscriberObstaclesSPtr
rclcpp::Subscription< ObstacleListType >::SharedPtr m_subscriberObstaclesSPtr
Definition: AutoPilotNode.hpp:52
SharedMemory.hpp
AutoPilotNode::m_fullMapDataImageDebugPub
image_transport::Publisher m_fullMapDataImageDebugPub
Definition: AutoPilotNode.hpp:62
AutoPilotNode::m_subscriberCarPoseSPtr
rclcpp::Subscription< geometry_msgs::msg::Pose >::SharedPtr m_subscriberCarPoseSPtr
Definition: AutoPilotNode.hpp:51
AutoPilotNode::m_carposePubSPtr
rclcpp::Publisher< CarPoseEstimatedType >::SharedPtr m_carposePubSPtr
Definition: AutoPilotNode.hpp:45
AutoPilotNode::m_autopilot
AutoPilot m_autopilot
Definition: AutoPilotNode.hpp:39
AutoPilotNode::m_laneDetectionSharedMemory
com::SharedMemory m_laneDetectionSharedMemory
Definition: AutoPilotNode.hpp:69
GalaxisNode.hpp
AutoPilotNode::m_parkingOperationPubSPtr
rclcpp::Publisher< ParkingOperationType >::SharedPtr m_parkingOperationPubSPtr
Definition: AutoPilotNode.hpp:46
AutoPilotNode::m_lastLaneDetectionUpdate
rclcpp::Time m_lastLaneDetectionUpdate
Definition: AutoPilotNode.hpp:37
AutoPilotNode::m_pathpolynomPubSPtr
rclcpp::Publisher< PathpolynomType >::SharedPtr m_pathpolynomPubSPtr
Definition: AutoPilotNode.hpp:43
AutoPilotNode::m_mapDataImageDebugPub
image_transport::Publisher m_mapDataImageDebugPub
Definition: AutoPilotNode.hpp:60
AutoPilotNode::m_autopilotStatePubSPtr
rclcpp::Publisher< std_msgs::msg::UInt8 >::SharedPtr m_autopilotStatePubSPtr
Definition: AutoPilotNode.hpp:47
GalaxisNode
Definition: GalaxisNode.hpp:21
AutoPilotNode::m_subscriberStopLine
rclcpp::Subscription< StopLineType >::SharedPtr m_subscriberStopLine
Definition: AutoPilotNode.hpp:55
AutoPilotNode::m_controllerPublishMtx
std::mutex m_controllerPublishMtx
Definition: AutoPilotNode.hpp:67
AutoPilotNode::m_subscriberLaneDetectionSub
rclcpp::Subscription< sensor_msgs::msg::Image >::SharedPtr m_subscriberLaneDetectionSub
Definition: AutoPilotNode.hpp:53
galaxis::utils
Definition: clock.hpp:5
AutoPilotNode::m_subscriberParkingStateSPtr
rclcpp::Subscription< ParkingStateType >::SharedPtr m_subscriberParkingStateSPtr
Definition: AutoPilotNode.hpp:56
AutoPilotNode
Definition: AutoPilotNode.hpp:23
AutoPilotNode::m_controllerRefPubSPtr
rclcpp::Publisher< ControllerReferenceType >::SharedPtr m_controllerRefPubSPtr
Definition: AutoPilotNode.hpp:44
AutoPilotNode::m_measurementSub
rclcpp::Subscription< MeasurementsType >::SharedPtr m_measurementSub
Definition: AutoPilotNode.hpp:50
AutoPilotNode::m_laneDetectionMessage
image_transport::Publisher m_laneDetectionMessage
Definition: AutoPilotNode.hpp:61
messages.hpp