161 if (!msg->is_rtr && !msg->is_error) {
167 if (msg->dlc >= message->
GetDlc()) {
172 bool brakeSystemFault = message->
GetSignal(
"DBW_BrakeFault")->
GetResult() ?
true :
false;
173 bool dbwSystemFault = brakeSystemFault;
179 raptor_dbw_msgs::BrakeReport brakeReport;
180 brakeReport.header.stamp = msg->header.stamp;
181 brakeReport.pedal_position = message->
GetSignal(
"DBW_BrakePdlDriverInput")->
GetResult();
184 brakeReport.enabled = message->
GetSignal(
"DBW_BrakeEnabled")->
GetResult() ?
true :
false;
185 brakeReport.driver_activity = message->
GetSignal(
"DBW_BrakeDriverActivity")->
GetResult() ?
true :
false;
187 brakeReport.fault_brake_system = brakeSystemFault;
189 brakeReport.fault_ch2 = faultCh2;
191 brakeReport.rolling_counter = message->
GetSignal(
"DBW_BrakeRollingCntr")->
GetResult();
193 brakeReport.brake_torque_actual = message->
GetSignal(
"DBW_BrakePcntTorqueActual")->
GetResult();
195 brakeReport.intervention_active = message->
GetSignal(
"DBW_BrakeInterventionActv")->
GetResult() ?
true :
false;
196 brakeReport.intervention_ready = message->
GetSignal(
"DBW_BrakeInterventionReady")->
GetResult() ?
true :
false;
198 brakeReport.parking_brake.status = message->
GetSignal(
"DBW_BrakeParkingBrkStatus")->
GetResult();
200 brakeReport.control_type.value = message->
GetSignal(
"DBW_BrakeCtrlType")->
GetResult();
203 if (faultCh1 || faultCh2) {
205 faultCh1 ?
"true, " :
"false,",
206 faultCh2 ?
"true, " :
"false,");
215 if (msg->dlc >= message->
GetDlc()) {
219 bool faultCh1 = message->
GetSignal(
"DBW_AccelPdlFault_Ch1")->
GetResult() ?
true :
false;
220 bool faultCh2 = message->
GetSignal(
"DBW_AccelPdlFault_Ch2")->
GetResult() ?
true :
false;
221 bool accelPdlSystemFault = message->
GetSignal(
"DBW_AccelPdlFault")->
GetResult() ?
true :
false;
222 bool dbwSystemFault = accelPdlSystemFault;
231 raptor_dbw_msgs::AcceleratorPedalReport accelPedalReprt;
232 accelPedalReprt.header.stamp = msg->header.stamp;
233 accelPedalReprt.pedal_input = message->
GetSignal(
"DBW_AccelPdlDriverInput")->
GetResult();
234 accelPedalReprt.pedal_output = message->
GetSignal(
"DBW_AccelPdlPosnFdbck")->
GetResult();
235 accelPedalReprt.enabled = message->
GetSignal(
"DBW_AccelPdlEnabled")->
GetResult() ?
true :
false;
236 accelPedalReprt.ignore_driver = message->
GetSignal(
"DBW_AccelPdlIgnoreDriver")->
GetResult() ?
true :
false;
237 accelPedalReprt.driver_activity = message->
GetSignal(
"DBW_AccelPdlDriverActivity")->
GetResult() ?
true :
false;
238 accelPedalReprt.torque_actual = message->
GetSignal(
"DBW_AccelPcntTorqueActual")->
GetResult();
240 accelPedalReprt.control_type.value = message->
GetSignal(
"DBW_AccelCtrlType")->
GetResult();
242 accelPedalReprt.rolling_counter = message->
GetSignal(
"DBW_AccelPdlRollingCntr")->
GetResult();
244 accelPedalReprt.fault_accel_pedal_system = accelPdlSystemFault;
246 accelPedalReprt.fault_ch1 = faultCh1;
247 accelPedalReprt.fault_ch2 = faultCh2;
251 if (faultCh1 || faultCh2) {
253 faultCh1 ?
"true, " :
"false,",
254 faultCh2 ?
"true, " :
"false,");
263 if (msg->dlc >= message->
GetDlc()) {
267 bool steeringSystemFault = message->
GetSignal(
"DBW_SteeringFault")->
GetResult() ?
true :
false;
268 bool dbwSystemFault = steeringSystemFault;
275 raptor_dbw_msgs::SteeringReport steeringReport;
276 steeringReport.header.stamp = msg->header.stamp;
277 steeringReport.steering_wheel_angle = message->
GetSignal(
"DBW_SteeringWhlAngleAct")->
GetResult() * (M_PI / 180);
278 steeringReport.steering_wheel_angle_cmd = message->
GetSignal(
"DBW_SteeringWhlAngleDes")->
GetResult() * (M_PI / 180);
279 steeringReport.steering_wheel_torque = message->
GetSignal(
"DBW_SteeringWhlPcntTrqCmd")->
GetResult() * 0.0625;
281 steeringReport.enabled = message->
GetSignal(
"DBW_SteeringEnabled")->
GetResult() ?
true :
false;
282 steeringReport.driver_activity = message->
GetSignal(
"DBW_SteeringDriverActivity")->
GetResult() ?
true :
false;
284 steeringReport.rolling_counter = message->
GetSignal(
"DBW_SteeringRollingCntr")->
GetResult();
286 steeringReport.control_type.value = message->
GetSignal(
"DBW_SteeringCtrlType")->
GetResult();
288 steeringReport.overheat_prevention_mode = message->
GetSignal(
"DBW_OverheatPreventMode")->
GetResult() ?
true :
false;
290 steeringReport.steering_overheat_warning = message->
GetSignal(
"DBW_SteeringOverheatWarning")->
GetResult() ?
true :
false;
292 steeringReport.fault_steering_system = steeringSystemFault;
298 if (steeringSystemFault) {
300 steeringSystemFault ?
"true, " :
"false,");
314 bool driverActivity = message->
GetSignal(
"DBW_PrndDriverActivity")->
GetResult() ?
true :
false;
317 raptor_dbw_msgs::GearReport out;
318 out.header.stamp = msg->header.stamp;
322 out.driver_activity = driverActivity;
323 out.gear_select_system_fault = message->
GetSignal(
"DBW_PrndFault")->
GetResult() ?
true :
false;
336 if (msg->dlc >= message->
GetDlc()) {
339 raptor_dbw_msgs::WheelSpeedReport out;
340 out.header.stamp = msg->header.stamp;
356 if (msg->dlc >= message->
GetDlc()) {
360 raptor_dbw_msgs::WheelPositionReport out;
361 out.header.stamp = msg->header.stamp;
377 if (msg->dlc >= message->
GetDlc()) {
381 raptor_dbw_msgs::TirePressureReport out;
382 out.header.stamp = msg->header.stamp;
396 if (msg->dlc >= message->
GetDlc()) {
400 raptor_dbw_msgs::SurroundReport out;
401 out.header.stamp = msg->header.stamp;
404 out.rear_radar_object_distance = message->
GetSignal(
"DBW_SonarRearDist")->
GetResult();
406 out.front_radar_distance_valid = message->
GetSignal(
"DBW_Reserved3")->
GetResult() ?
true :
false;
407 out.parking_sonar_data_valid = message->
GetSignal(
"DBW_SonarVld")->
GetResult() ?
true :
false;
426 if (msg->dlc >= message->
GetDlc()) {
450 std_msgs::String msg; msg.data =
vin_;
462 if (msg->dlc >= message->
GetDlc()) {
466 sensor_msgs::Imu out;
467 out.header.stamp = msg->header.stamp;
470 out.angular_velocity.z = (double)message->
GetSignal(
"DBW_ImuYawRate")->
GetResult() * (M_PI / 180.0);
484 if (msg->dlc >= message->
GetDlc()) {
488 raptor_dbw_msgs::DriverInputReport out;
489 out.header.stamp = msg->header.stamp;
492 out.high_beam_headlights.status = message->
GetSignal(
"DBW_DrvInptHiBeam")->
GetResult();
495 out.cruise_resume_button = message->
GetSignal(
"DBW_DrvInptCruiseResumeBtn")->
GetResult() ?
true :
false;
496 out.cruise_cancel_button = message->
GetSignal(
"DBW_DrvInptCruiseCancelBtn")->
GetResult() ?
true :
false;
497 out.cruise_accel_button = message->
GetSignal(
"DBW_DrvInptCruiseAccelBtn")->
GetResult() ?
true :
false;
498 out.cruise_decel_button = message->
GetSignal(
"DBW_DrvInptCruiseDecelBtn")->
GetResult() ?
true :
false;
499 out.cruise_on_off_button = message->
GetSignal(
"DBW_DrvInptCruiseOnOffBtn")->
GetResult() ?
true :
false;
501 out.adaptive_cruise_on_off_button = message->
GetSignal(
"DBW_DrvInptAccOnOffBtn")->
GetResult() ?
true :
false;
502 out.adaptive_cruise_increase_distance_button = message->
GetSignal(
"DBW_DrvInptAccIncDistBtn")->
GetResult() ?
true :
false;
503 out.adaptive_cruise_decrease_distance_button = message->
GetSignal(
"DBW_DrvInptAccDecDistBtn")->
GetResult() ?
true :
false;
505 out.door_or_hood_ajar = message->
GetSignal(
"DBW_OccupAnyDoorOrHoodAjar")->
GetResult() ?
true :
false;
507 out.airbag_deployed = message->
GetSignal(
"DBW_OccupAnyAirbagDeployed")->
GetResult() ?
true :
false;
508 out.any_seatbelt_unbuckled = message->
GetSignal(
"DBW_OccupAnySeatbeltUnbuckled")->
GetResult() ?
true :
false;
519 if (msg->dlc >= message->
GetDlc()) {
523 raptor_dbw_msgs::MiscReport out;
524 out.header.stamp = msg->header.stamp;
528 out.drive_by_wire_enabled = (bool)message->
GetSignal(
"DBW_MiscByWireEnabled")->
GetResult();
531 out.software_build_number = message->
GetSignal(
"DBW_SoftwareBuildNumber")->
GetResult();
532 out.general_actuator_fault = message->
GetSignal(
"DBW_MiscFault")->
GetResult() ?
true :
false;
533 out.by_wire_ready = message->
GetSignal(
"DBW_MiscByWireReady")->
GetResult() ?
true :
false;
534 out.general_driver_activity = message->
GetSignal(
"DBW_MiscDriverActivity")->
GetResult() ?
true :
false;
535 out.comms_fault = message->
GetSignal(
"DBW_MiscAKitCommFault")->
GetResult() ?
true :
false;
548 if (msg->dlc >= message->
GetDlc()) {
552 raptor_dbw_msgs::LowVoltageSystemReport lvSystemReport;
553 lvSystemReport.header.stamp = msg->header.stamp;
555 lvSystemReport.vehicle_battery_volts = (double)message->
GetSignal(
"DBW_LvVehBattVlt")->
GetResult();
556 lvSystemReport.vehicle_battery_current = (double)message->
GetSignal(
"DBW_LvBattCurr")->
GetResult();
557 lvSystemReport.vehicle_alternator_current = (double)message->
GetSignal(
"DBW_LvAlternatorCurr")->
GetResult();
559 lvSystemReport.dbw_battery_volts = (double)message->
GetSignal(
"DBW_LvDbwBattVlt")->
GetResult();
560 lvSystemReport.dcdc_current = (double)message->
GetSignal(
"DBW_LvDcdcCurr")->
GetResult();
562 lvSystemReport.aux_inverter_contactor = message->
GetSignal(
"DBW_LvInvtrContactorCmd")->
GetResult() ?
true :
false;
573 if (msg->dlc >= message->
GetDlc()) {
576 raptor_dbw_msgs::Brake2Report brake2Report;
577 brake2Report.header.stamp = msg->header.stamp;
581 brake2Report.estimated_road_slope = message->
GetSignal(
"DBW_RoadSlopeEstimate")->
GetResult();
594 if (msg->dlc >= message->
GetDlc()) {
597 raptor_dbw_msgs::Steering2Report steering2Report;
598 steering2Report.header.stamp = msg->header.stamp;
600 steering2Report.vehicle_curvature_actual = message->
GetSignal(
"DBW_SteeringVehCurvatureAct")->
GetResult();
602 steering2Report.max_torque_driver = message->
GetSignal(
"DBW_SteerTrq_Driver")->
GetResult();
604 steering2Report.max_torque_motor = message->
GetSignal(
"DBW_SteerTrq_Motor")->
GetResult();
615 if (msg->dlc >= message->
GetDlc()) {
618 raptor_dbw_msgs::FaultActionsReport faultActionsReport;
619 faultActionsReport.header.stamp = msg->header.stamp;
621 faultActionsReport.autonomous_disabled_no_brakes = message->
GetSignal(
"DBW_FltAct_AutonDsblNoBrakes")->
GetResult();
623 faultActionsReport.autonomous_disabled_apply_brakes = message->
GetSignal(
"DBW_FltAct_AutonDsblApplyBrakes")->
GetResult();
624 faultActionsReport.can_gateway_disabled = message->
GetSignal(
"DBW_FltAct_CANGatewayDsbl")->
GetResult();
625 faultActionsReport.inverter_contactor_disabled = message->
GetSignal(
"DBW_FltAct_InvtrCntctrDsbl")->
GetResult();
626 faultActionsReport.prevent_enter_autonomous_mode = message->
GetSignal(
"DBW_FltAct_PreventEnterAutonMode")->
GetResult();
627 faultActionsReport.warn_driver_only = message->
GetSignal(
"DBW_FltAct_WarnDriverOnly")->
GetResult();
649 ROS_INFO(
"ena: %s, clr: %s, brake: %s, Accelerator Pedal: %s, steering: %s, gear: %s",
651 clear() ?
"true " :
"false",
672 if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::open_loop) {
675 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_actuator) {
678 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_vehicle) {
681 message->
GetSignal(
"AKit_SpeedModeNegJerkLim")->
SetResult(msg->decel_negative_jerk_limit);
695 can_msgs::Frame frame = message->
GetFrame();
718 if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::open_loop) {
721 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_actuator) {
724 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_vehicle) {
730 message->
GetSignal(
"AKit_SpeedModePosJerkLim")->
SetResult(msg->accel_positive_jerk_limit);
747 can_msgs::Frame frame = message->
GetFrame();
766 if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::open_loop) {
769 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_actuator) {
771 double scmd = std::max((
float)-470.0, std::min((
float)470.0, (
float)(msg->angle_cmd * (180 / M_PI * 1.0))));
773 }
else if (msg->control_type.value == raptor_dbw_msgs::ActuatorControlMode::closed_loop_vehicle) {
775 message->
GetSignal(
"AKit_SteeringVehCurvatureReq")->
SetResult(msg->vehicle_curvature_cmd);
780 if (fabsf(msg->angle_velocity) > 0)
782 uint16_t vcmd = std::max((
float)1, std::min((
float)254, (
float)roundf(fabsf(msg->angle_velocity) * 180 / M_PI / 2)));
797 can_msgs::Frame frame = message->
GetFrame();
821 can_msgs::Frame frame = message->
GetFrame();
837 if(msg->global_enable) {
841 if(msg->enable_joystick_limits) {
850 can_msgs::Frame frame = message->
GetFrame();
878 message->
GetSignal(
"AKit_RightRearDoorReq")->
SetResult(msg->door_request_right_rear.value);
886 message->
GetSignal(
"AKit_LeftRearDoorReq")->
SetResult(msg->door_request_left_rear.value);
887 message->
GetSignal(
"AKit_LiftgateDoorReq")->
SetResult(msg->door_request_lift_gate.value);
889 message->
GetSignal(
"AKit_BlockBasicCruiseCtrlBtns")->
SetResult(msg->block_standard_cruise_buttons);
890 message->
GetSignal(
"AKit_BlockAdapCruiseCtrlBtns")->
SetResult(msg->block_adaptive_cruise_buttons);
891 message->
GetSignal(
"AKit_BlockTurnSigStalkInpts")->
SetResult(msg->block_turn_signal_stalk);
899 can_msgs::Frame frame = message->
GetFrame();
922 out.is_extended =
false;
971 ROS_WARN(
"DBW system not enabled. Steering calibration fault.");
974 ROS_WARN(
"DBW system not enabled. Braking fault.");
977 ROS_WARN(
"DBW system not enabled. Accelerator Pedal fault.");
980 ROS_WARN(
"DBW system not enabled. Steering fault.");
983 ROS_WARN(
"DBW system not enabled. Watchdog fault.");
990 ROS_INFO(
"DBW system enable requested. Waiting for ready.");
1010 ROS_WARN(
"DBW system disabled. Cancel button pressed.");
1017 if (
override && en) {
1023 ROS_WARN(
"DBW system disabled. Driver override on brake/Accelerator Pedal pedal.");
1033 if (
override && en) {
1039 ROS_WARN(
"DBW system disabled. Driver override on brake/Accelerator Pedal pedal.");
1049 if (
override && en) {
1055 ROS_WARN(
"DBW system disabled. Driver override on steering wheel.");
1065 if (
override && en) {
1071 ROS_WARN(
"DBW system disabled. Driver override on shifter.");
1081 ROS_WARN(
"Brake subsystem disabled after 100ms command timeout");
1090 ROS_WARN(
"Accelerator Pedal subsystem disabled after 100ms command timeout");
1099 ROS_WARN(
"Steering subsystem disabled after 100ms command timeout");
1114 ROS_ERROR(
"DBW system disabled. Braking fault.");
1130 ROS_ERROR(
"DBW system disabled. Accelerator Pedal fault.");
1146 ROS_ERROR(
"DBW system disabled. Steering fault.");
1162 ROS_ERROR(
"DBW system disabled. Steering calibration fault.");
1178 ROS_ERROR(
"DBW system disabled. Watchdog fault.");
1184 ROS_WARN(
"Watchdog event: Alerting driver and applying brakes.");
1186 ROS_INFO(
"Watchdog event: Driver has successfully taken control.");
1189 ROS_WARN(
"Watchdog event: Unknown Fault!");
1238 }
else if (!fault) {
1243 ROS_WARN_THROTTLE(2.0,
"Watchdog event: Press left OK button on the steering wheel or cycle power to clear event.");
1253 double dt = (stamp -
joint_state_.header.stamp).toSec();
1263 const double r = L / tan(steering->steering_wheel_angle /
steering_ratio_);
NewEagle::DbcSignal * GetSignal(std::string signalName)
bool override_accelerator_pedal_
void overrideBrake(bool override)
ros::Subscriber sub_accelerator_pedal_
ros::Publisher pub_low_voltage_system_
ros::Subscriber sub_brake_
bool fault_watchdog_using_brakes_
#define ROS_WARN_THROTTLE(rate,...)
void publish(const boost::shared_ptr< M > &message) const
void faultSteeringCal(bool fault)
ros::Subscriber sub_gear_
void SetFrame(const can_msgs::Frame::ConstPtr &msg)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
void recvAcceleratorPedalCmd(const raptor_dbw_msgs::AcceleratorPedalCmd::ConstPtr &msg)
void faultAcceleratorPedal(bool fault)
NewEagle::Dbc NewDbc(const std::string &dbcFile)
ros::Publisher pub_steering_
void overrideSteering(bool override)
ros::Publisher pub_sys_enable_
void publishJointStates(const ros::Time &stamp, const raptor_dbw_msgs::WheelSpeedReport *wheels, const raptor_dbw_msgs::SteeringReport *steering)
ros::Subscriber sub_enable_
ros::Publisher pub_brake_2_report_
void recvDisable(const std_msgs::Empty::ConstPtr &msg)
void timeoutBrake(bool timeout, bool enabled)
ros::Publisher pub_hmi_global_enable_report_
ros::Publisher pub_wheel_speeds_
void overrideAcceleratorPedal(bool override)
bool fault_accelerator_pedal_
can_msgs::Frame GetFrame()
void recvSteeringCmd(const raptor_dbw_msgs::SteeringCmd::ConstPtr &msg)
NewEagle::DbcMessage * GetMessage(std::string messageName)
void recvBrakeCmd(const raptor_dbw_msgs::BrakeCmd::ConstPtr &msg)
bool enabled_accelerator_pedal_
ros::Publisher pub_joint_states_
ros::Publisher pub_twist_
void faultSteering(bool fault)
ros::Publisher pub_surround_
ros::Publisher pub_accel_pedal_
Timer createTimer(Rate r, Handler h, Obj o, bool oneshot=false, bool autostart=true) const
ros::Subscriber sub_misc_
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void recvEnable(const std_msgs::Empty::ConstPtr &msg)
void SetResult(double result)
ros::Publisher pub_steering_2_report_
ros::Publisher pub_brake_
ros::Subscriber sub_steering_
void faultWatchdog(bool fault, uint8_t src, bool braking)
ros::Publisher pub_tire_pressure_
ros::Publisher pub_fault_actions_report_
void timeoutSteering(bool timeout, bool enabled)
bool fault_watchdog_warned_
NewEagle::DbcMessage * GetMessageById(uint32_t id)
bool getParam(const std::string &key, std::string &s) const
void timeoutAcceleratorPedal(bool timeout, bool enabled)
void faultBrakes(bool fault)
void recvGearCmd(const raptor_dbw_msgs::GearCmd::ConstPtr &msg)
ros::Publisher pub_driver_input_
ros::Subscriber sub_global_enable_
bool timeout_accelerator_pedal_
DbwNode(ros::NodeHandle &node, ros::NodeHandle &priv_nh)
ros::Publisher pdu1_relay_pub_
sensor_msgs::JointState joint_state_
ros::Publisher pub_wheel_positions_
void recvGlobalEnableCmd(const raptor_dbw_msgs::GlobalEnableCmd::ConstPtr &msg)
void overrideGear(bool override)
void recvCAN(const can_msgs::Frame::ConstPtr &msg)
void timerCallback(const ros::TimerEvent &event)
ros::Subscriber sub_disable_
void recvMiscCmd(const raptor_dbw_msgs::MiscCmd::ConstPtr &msg)