18 #ifndef VEHICLE_INTERFACE__VEHICLE_INTERFACE_NODE_HPP_
19 #define VEHICLE_INTERFACE__VEHICLE_INTERFACE_NODE_HPP_
23 #include <vehicle_interface/visibility_control.hpp>
25 #include <mpark_variant_vendor/variant.hpp>
26 #include <rclcpp/rclcpp.hpp>
30 #include <autoware_auto_control_msgs/msg/ackermann_control_command.hpp>
31 #include <autoware_auto_control_msgs/msg/high_level_control_command.hpp>
32 #include <autoware_auto_vehicle_msgs/msg/raw_control_command.hpp>
33 #include <autoware_auto_vehicle_msgs/msg/vehicle_control_command.hpp>
34 #include <autoware_auto_vehicle_msgs/msg/vehicle_odometry.hpp>
35 #include <autoware_auto_vehicle_msgs/msg/vehicle_state_command.hpp>
36 #include <autoware_auto_vehicle_msgs/msg/vehicle_state_report.hpp>
37 #include <autoware_auto_vehicle_msgs/srv/autonomy_mode_change.hpp>
39 #include <experimental/optional>
45 #include <unordered_set>
51 namespace vehicle_interface
54 using Real = decltype(BasicControlCommand::long_accel_mps2);
55 using autoware_auto_vehicle_msgs::msg::HeadlightsCommand;
56 using autoware_auto_vehicle_msgs::msg::HeadlightsReport;
57 using autoware_auto_vehicle_msgs::msg::HornCommand;
58 using autoware_auto_vehicle_msgs::msg::HornReport;
59 using autoware_auto_vehicle_msgs::msg::WipersCommand;
60 using autoware_auto_vehicle_msgs::msg::WipersReport;
93 const std::string & node_name,
94 const std::unordered_set<ViFeature> & features,
95 const rclcpp::NodeOptions & options);
99 std::unique_ptr<common::reference_tracking_controller::ReferenceTrackerBase<Real>>;
100 using FilterBasePtr = std::unique_ptr<common::signal_filters::FilterBase<Real>>;
116 void set_interface(std::unique_ptr<PlatformInterface> && interface) noexcept;
118 rclcpp::Logger logger() const noexcept;
125 virtual
void on_control_send_failure();
129 virtual
void on_state_send_failure();
132 virtual
void on_mode_change_failure();
136 virtual
void on_read_timeout();
138 virtual
void on_error(std::exception_ptr eptr);
151 const std::chrono::nanoseconds & cycle_time);
169 rclcpp::TimerBase::SharedPtr m_read_timer{
nullptr};
170 rclcpp::Publisher<autoware_auto_vehicle_msgs::msg::VehicleOdometry>::SharedPtr m_odom_pub{
172 rclcpp::Publisher<autoware_auto_vehicle_msgs::msg::VehicleStateReport>::SharedPtr m_state_pub{
174 rclcpp::Subscription<GearCommand>::SharedPtr m_gear_cmd_sub{
nullptr};
175 rclcpp::Publisher<GearReport>::SharedPtr m_gear_rpt_pub{
nullptr};
176 rclcpp::Publisher<HeadlightsReport>::SharedPtr m_headlights_rpt_pub{
nullptr};
177 rclcpp::Subscription<HeadlightsCommand>::SharedPtr m_headlights_cmd_sub{
nullptr};
178 rclcpp::Publisher<HornReport>::SharedPtr m_horn_rpt_pub{
nullptr};
179 rclcpp::Subscription<HornCommand>::SharedPtr m_horn_cmd_sub{
nullptr};
180 rclcpp::Publisher<WipersReport>::SharedPtr m_wipers_rpt_pub{
nullptr};
181 rclcpp::Subscription<WipersCommand>::SharedPtr m_wipers_cmd_sub{
nullptr};
182 rclcpp::Service<autoware_auto_vehicle_msgs::srv::AutonomyModeChange>::SharedPtr m_mode_service{
185 using BasicSub = rclcpp::Subscription<BasicControlCommand>::SharedPtr;
187 rclcpp::Subscription<autoware_auto_vehicle_msgs::msg::RawControlCommand>::SharedPtr;
189 rclcpp::Subscription<autoware_auto_control_msgs::msg::HighLevelControlCommand>::SharedPtr;
191 rclcpp::Subscription<autoware_auto_control_msgs::msg::AckermannControlCommand>::SharedPtr;
193 mpark::variant<RawSub, BasicSub, HighLevelSub, AckermannSub> m_command_sub{};
195 std::unique_ptr<PlatformInterface> m_interface{
nullptr};
196 VehicleFilter m_filter{
nullptr,
nullptr,
nullptr,
nullptr};
197 ControllerBasePtr m_controller{
nullptr};
198 std::unique_ptr<SafetyStateMachine> m_state_machine{
nullptr};
199 std::chrono::system_clock::time_point m_last_command_stamp{};
200 std::chrono::nanoseconds m_cycle_time{};
203 std::map<std::string, ViFeature> m_avail_features =
210 std::unordered_set<ViFeature> m_enabled_features{};
217 #endif // VEHICLE_INTERFACE__VEHICLE_INTERFACE_NODE_HPP_