Autoware.Auto
ne_raptor_interface.hpp
Go to the documentation of this file.
1 // Copyright 2021 The Autoware Foundation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
18 
19 #ifndef NE_RAPTOR_INTERFACE__NE_RAPTOR_INTERFACE_HPP_
20 #define NE_RAPTOR_INTERFACE__NE_RAPTOR_INTERFACE_HPP_
21 
23 
24 #include <common/types.hpp>
27 
28 #include <raptor_dbw_msgs/msg/accelerator_pedal_cmd.hpp>
29 #include <raptor_dbw_msgs/msg/brake_cmd.hpp>
30 #include <raptor_dbw_msgs/msg/gear_cmd.hpp>
31 #include <raptor_dbw_msgs/msg/global_enable_cmd.hpp>
32 #include <raptor_dbw_msgs/msg/misc_cmd.hpp>
33 #include <raptor_dbw_msgs/msg/steering_cmd.hpp>
34 
35 #include <raptor_dbw_msgs/msg/brake_report.hpp>
36 #include <raptor_dbw_msgs/msg/gear_report.hpp>
37 #include <raptor_dbw_msgs/msg/misc_report.hpp>
38 #include <raptor_dbw_msgs/msg/other_actuators_report.hpp>
39 #include <raptor_dbw_msgs/msg/steering_report.hpp>
40 #include <raptor_dbw_msgs/msg/wheel_speed_report.hpp>
41 
42 #include <raptor_dbw_msgs/msg/actuator_control_mode.hpp>
43 #include <raptor_dbw_msgs/msg/door_request.hpp>
44 #include <raptor_dbw_msgs/msg/door_state.hpp>
45 #include <raptor_dbw_msgs/msg/gear.hpp>
46 #include <raptor_dbw_msgs/msg/high_beam.hpp>
47 #include <raptor_dbw_msgs/msg/high_beam_state.hpp>
48 #include <raptor_dbw_msgs/msg/horn_state.hpp>
49 #include <raptor_dbw_msgs/msg/ignition.hpp>
50 #include <raptor_dbw_msgs/msg/low_beam.hpp>
51 #include <raptor_dbw_msgs/msg/parking_brake.hpp>
52 #include <raptor_dbw_msgs/msg/turn_signal.hpp>
53 #include <raptor_dbw_msgs/msg/wiper_front.hpp>
54 #include <raptor_dbw_msgs/msg/wiper_rear.hpp>
55 
56 #include <autoware_auto_vehicle_msgs/msg/headlights_command.hpp>
57 #include <autoware_auto_vehicle_msgs/msg/wipers_command.hpp>
58 #include <autoware_auto_control_msgs/msg/high_level_control_command.hpp>
59 #include <autoware_auto_vehicle_msgs/msg/raw_control_command.hpp>
60 #include <autoware_auto_vehicle_msgs/msg/vehicle_control_command.hpp>
61 #include <autoware_auto_control_msgs/msg/ackermann_control_command.hpp>
62 #include <autoware_auto_vehicle_msgs/msg/vehicle_state_command.hpp>
63 #include <autoware_auto_vehicle_msgs/msg/hazard_lights_command.hpp>
64 
65 #include <autoware_auto_vehicle_msgs/msg/vehicle_kinematic_state.hpp>
66 
67 #include <autoware_auto_vehicle_msgs/srv/autonomy_mode_change.hpp>
68 
69 #include <std_msgs/msg/bool.hpp>
71 #include <rclcpp/rclcpp.hpp>
72 #include <rclcpp/clock.hpp>
73 
74 #include <chrono>
75 #include <iostream>
76 #include <memory>
77 #include <mutex>
78 
84 
85 using autoware_auto_vehicle_msgs::msg::GearReport;
86 
87 using raptor_dbw_msgs::msg::AcceleratorPedalCmd;
88 using raptor_dbw_msgs::msg::BrakeCmd;
89 using raptor_dbw_msgs::msg::GearCmd;
90 using raptor_dbw_msgs::msg::GlobalEnableCmd;
91 using raptor_dbw_msgs::msg::MiscCmd;
92 using raptor_dbw_msgs::msg::SteeringCmd;
93 
94 using raptor_dbw_msgs::msg::BrakeReport;
95 using raptor_dbw_msgs::msg::MiscReport;
96 using raptor_dbw_msgs::msg::OtherActuatorsReport;
97 using raptor_dbw_msgs::msg::SteeringReport;
98 using raptor_dbw_msgs::msg::WheelSpeedReport;
99 
100 using raptor_dbw_msgs::msg::ActuatorControlMode;
101 using raptor_dbw_msgs::msg::DoorRequest;
102 using raptor_dbw_msgs::msg::DoorState;
103 using raptor_dbw_msgs::msg::HighBeam;
104 using raptor_dbw_msgs::msg::HighBeamState;
105 using raptor_dbw_msgs::msg::HornState;
106 using raptor_dbw_msgs::msg::Ignition;
107 using raptor_dbw_msgs::msg::LowBeam;
108 using raptor_dbw_msgs::msg::ParkingBrake;
109 using raptor_dbw_msgs::msg::TurnSignal;
110 using raptor_dbw_msgs::msg::WiperFront;
111 using raptor_dbw_msgs::msg::WiperRear;
112 
113 using autoware_auto_vehicle_msgs::msg::HeadlightsCommand;
114 using autoware_auto_vehicle_msgs::msg::WipersCommand;
115 using autoware_auto_control_msgs::msg::HighLevelControlCommand;
116 using autoware_auto_vehicle_msgs::msg::RawControlCommand;
118 using autoware_auto_control_msgs::msg::AckermannControlCommand;
119 using autoware_auto_vehicle_msgs::msg::VehicleStateCommand;
120 
121 using autoware_auto_vehicle_msgs::msg::HazardLightsCommand;
122 
123 using autoware_auto_vehicle_msgs::msg::VehicleStateReport;
124 using autoware_auto_vehicle_msgs::msg::VehicleOdometry;
126 
127 using autoware_auto_vehicle_msgs::srv::AutonomyModeChange;
128 using ModeChangeRequest = autoware_auto_vehicle_msgs::srv::AutonomyModeChange_Request;
129 using ModeChangeResponse = autoware_auto_vehicle_msgs::srv::AutonomyModeChange_Response;
130 
133 using namespace std::chrono_literals; // NOLINT
134 
135 namespace autoware
136 {
138 {
139 static constexpr float32_t KPH_TO_MPS_RATIO = 1000.0F / (60.0F * 60.0F);
140 static constexpr float32_t DEGREES_TO_RADIANS = PI / 180.0F;
141 static constexpr int64_t CLOCK_1_SEC = 1000; // duration in milliseconds
143 class NE_RAPTOR_INTERFACE_PUBLIC NERaptorInterface
145 {
146 public:
159  explicit NERaptorInterface(
160  rclcpp::Node & node,
161  uint16_t ecu_build_num,
162  float32_t front_axle_to_cog,
163  float32_t rear_axle_to_cog,
164  float32_t steer_to_tire_ratio,
165  float32_t max_steer_angle,
166  float32_t acceleration_limit,
167  float32_t deceleration_limit,
168  float32_t acceleration_positive_jerk_limit,
169  float32_t deceleration_negative_jerk_limit,
170  uint32_t pub_period
171  );
172 
174  ~NERaptorInterface() noexcept override = default;
175 
180  bool8_t update(std::chrono::nanoseconds timeout) override;
181 
186  bool8_t send_state_command(const VehicleStateCommand & msg) override;
187 
192  bool8_t send_control_command(const HighLevelControlCommand & msg);
193 
198  bool8_t send_control_command(const RawControlCommand & msg) override;
199 
205  bool8_t send_control_command(const VehicleControlCommand & msg) override;
206 
212  bool8_t send_control_command(const AckermannControlCommand & msg) override;
213 
218  bool8_t handle_mode_change_request(ModeChangeRequest::SharedPtr request) override;
219 
222  void send_headlights_command(const HeadlightsCommand & msg) override;
223 
226  void send_horn_command(const HornCommand & msg) override;
227 
230  void send_wipers_command(const WipersCommand & msg) override;
231 
236  void kinematic_bicycle_model(
237  float32_t dt, VehicleKinematicState * vks);
238 
239 private:
241  void cmdCallback();
242 
243  // Publishers (to Raptor DBW)
244  rclcpp::Publisher<AcceleratorPedalCmd>::SharedPtr m_accel_cmd_pub;
245  rclcpp::Publisher<BrakeCmd>::SharedPtr m_brake_cmd_pub;
246  rclcpp::Publisher<GearCmd>::SharedPtr m_gear_cmd_pub;
247  rclcpp::Publisher<GlobalEnableCmd>::SharedPtr m_gl_en_cmd_pub;
248  rclcpp::Publisher<MiscCmd>::SharedPtr m_misc_cmd_pub;
249  rclcpp::Publisher<SteeringCmd>::SharedPtr m_steer_cmd_pub;
250  rclcpp::Publisher<std_msgs::msg::Empty>::SharedPtr m_dbw_enable_cmd_pub;
251  rclcpp::Publisher<std_msgs::msg::Empty>::SharedPtr m_dbw_disable_cmd_pub;
252 
253  // Publishers (to Autoware)
254  rclcpp::Publisher<VehicleKinematicState>::SharedPtr m_vehicle_kin_state_pub;
255 
256  // Subscribers (from Raptor DBW)
257  rclcpp::SubscriptionBase::SharedPtr
258  m_brake_rpt_sub, m_gear_rpt_sub, m_misc_rpt_sub,
259  m_other_acts_rpt_sub, m_steering_rpt_sub, m_wheel_spd_rpt_sub;
260 
261  rclcpp::Logger m_logger;
262  uint16_t m_ecu_build_num;
263  float32_t m_front_axle_to_cog;
264  float32_t m_rear_axle_to_cog;
265  float32_t m_steer_to_tire_ratio;
266  float32_t m_max_steer_angle;
267  float32_t m_acceleration_limit;
268  float32_t m_deceleration_limit;
269  float32_t m_acceleration_positive_jerk_limit;
270  float32_t m_deceleration_negative_jerk_limit;
271  std::chrono::milliseconds m_pub_period;
272  std::unique_ptr<DbwStateMachine> m_dbw_state_machine;
273  uint8_t m_rolling_counter;
274  rclcpp::Clock m_clock;
275  rclcpp::TimerBase::SharedPtr m_timer;
276 
277  /* Vehicle Kinematic State is stored
278  * because it needs data from multiple reports.
279  *
280  * All commands are stored because they need
281  * to be sent periodically, whether or not the data changes.
282  */
283  VehicleKinematicState m_vehicle_kin_state{};
284 
285  AcceleratorPedalCmd m_accel_cmd{};
286  BrakeCmd m_brake_cmd{};
287  GearCmd m_gear_cmd{};
288  GlobalEnableCmd m_gl_en_cmd{};
289  MiscCmd m_misc_cmd{};
290  SteeringCmd m_steer_cmd{};
291 
292  bool8_t m_seen_brake_rpt{false};
293  bool8_t m_seen_gear_rpt{false};
294  bool8_t m_seen_misc_rpt{false};
295  bool8_t m_seen_steering_rpt{false};
296  bool8_t m_seen_wheel_spd_rpt{false};
297  bool8_t m_seen_vehicle_state_cmd{false};
298  float32_t m_travel_direction{0.0F};
299 
300  // In case multiple signals arrive at the same time
301  std::mutex m_vehicle_kin_state_mutex;
302  std::mutex m_accel_cmd_mutex;
303  std::mutex m_brake_cmd_mutex;
304  std::mutex m_gear_cmd_mutex;
305  std::mutex m_gl_en_cmd_mutex;
306  std::mutex m_misc_cmd_mutex;
307  std::mutex m_steer_cmd_mutex;
308 
314  void on_brake_report(const BrakeReport::SharedPtr & msg);
315 
321  void on_gear_report(const GearReport::SharedPtr & msg);
322 
331  void on_misc_report(const MiscReport::SharedPtr & msg);
332 
339  void on_other_actuators_report(const OtherActuatorsReport::SharedPtr & msg);
340 
347  void on_steering_report(const SteeringReport::SharedPtr & msg);
348 
354  void on_wheel_spd_report(const WheelSpeedReport::SharedPtr & msg);
355 }; // class NERaptorInterface
356 } // namespace ne_raptor_interface
357 } // namespace autoware
358 #endif // NE_RAPTOR_INTERFACE__NE_RAPTOR_INTERFACE_HPP_
autoware::common::types::TAU
constexpr float32_t TAU
tau = 2 pi
Definition: types.hpp:54
autoware::ne_raptor_interface::DEGREES_TO_RADIANS
static constexpr float32_t DEGREES_TO_RADIANS
Definition: ne_raptor_interface.hpp:140
autoware::motion::control::pure_pursuit::VehicleControlCommand
autoware_auto_vehicle_msgs::msg::VehicleControlCommand VehicleControlCommand
Definition: pure_pursuit.hpp:41
types.hpp
This file includes common type definition.
PI
const double PI
Definition: reeds_shepp_impl.cpp:91
autoware::drivers::vehicle_interface::DbwState
DbwState
Definition: dbw_state_machine.hpp:41
ne_raptor_interface
Definition: ne_raptor_interface.launch.py:1
autoware::ne_raptor_interface::KPH_TO_MPS_RATIO
static constexpr float32_t KPH_TO_MPS_RATIO
Definition: ne_raptor_interface.hpp:139
autoware::drivers::vehicle_interface::PlatformInterface
Definition: platform_interface.hpp:80
autoware::ne_raptor_interface::CLOCK_1_SEC
static constexpr int64_t CLOCK_1_SEC
Definition: ne_raptor_interface.hpp:141
autoware::drivers::vehicle_interface::DbwStateMachine
Class for maintaining the DBW state.
Definition: dbw_state_machine.hpp:50
autoware::common::types::bool8_t
bool bool8_t
Definition: types.hpp:39
autoware
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
platform_interface.hpp
Base class for vehicle "translator".
sys_info_node.node
node
Definition: sys_info_node.py:23
dbw_state_machine.hpp
Base class for vehicle drivers.
motion_common.hpp
autoware::common::types::float32_t
float float32_t
Definition: types.hpp:45
ModeChangeRequest
autoware_auto_vehicle_msgs::srv::AutonomyModeChange_Request ModeChangeRequest
Definition: ne_raptor_interface.hpp:128
autoware::common::types::float64_t
double float64_t
Definition: types.hpp:47
visibility_control.hpp
autoware::trajectory_spoofer::VehicleKinematicState
autoware_auto_vehicle_msgs::msg::VehicleKinematicState VehicleKinematicState
Definition: trajectory_spoofer.hpp:42
autoware::ne_raptor_interface::NERaptorInterface
Class for interfacing with NE Raptor DBW.
Definition: ne_raptor_interface.hpp:143
ModeChangeResponse
autoware_auto_vehicle_msgs::srv::AutonomyModeChange_Response ModeChangeResponse
Definition: ne_raptor_interface.hpp:129
autoware::common::types::PI
constexpr float32_t PI
pi = tau / 2
Definition: types.hpp:50