diff --git a/nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp b/nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp index c2ee20c5..f33a9482 100644 --- a/nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp +++ b/nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp @@ -245,6 +245,16 @@ bool ContinentalARS548Decoder::parse_detections_list_packet( bool ContinentalARS548Decoder::parse_objects_list_packet( const nebula_msgs::msg::NebulaPacket & packet_msg) { + // cSpell:ignore knzo25 + // NOTE(knzo25): In the radar firmware used when developing this driver, + // corner radars were not supported. When a new firmware addresses this, + // the driver will be updated. + if ( + std::abs(radar_status_.yaw) > 5.0 * M_PI / 180.0 && + std::abs(radar_status_.yaw) < 90.0 * M_PI / 180.0) { + return true; + } + auto msg_ptr = std::make_unique(); auto & msg = *msg_ptr; @@ -345,27 +355,6 @@ bool ContinentalARS548Decoder::parse_objects_list_packet( object_msg.orientation = object.position_orientation.value(); object_msg.orientation_std = object.position_orientation_std.value(); - // cSpell:ignore knzo25 - // NOTE(knzo25): In the radar firmware used when developing this driver, - // corner radars are not supported. We can partially address this, - // but the coordinates look only spatially correct (not the dynamics). - // so its use is the responsibility of the user. - // Corner radars are expected to be supported in a new firmware version, - // but this is not yet confirmed. - if ( - std::abs(radar_status_.yaw) > 5.0 * M_PI / 180.0 && - std::abs(radar_status_.yaw) < 90.0 * M_PI / 180.0) { - const double dx = radar_status_.longitudinal + radar_status_.wheel_base; - const double dy = radar_status_.lateral; - double x = object_msg.position.x - dx; - double y = object_msg.position.y - dy; - const auto & yaw = radar_status_.yaw; - - object_msg.position.x = x * std::cos(yaw) - y * std::sin(yaw) + dx; - object_msg.position.y = x * std::sin(yaw) + y * std::cos(yaw) + dy; - object_msg.orientation += yaw; - } - object_msg.existence_probability = object.existence_probability.value(); object_msg.classification_car = object.classification_car; object_msg.classification_truck = object.classification_truck; diff --git a/nebula_ros/src/continental/continental_ars548_decoder_wrapper.cpp b/nebula_ros/src/continental/continental_ars548_decoder_wrapper.cpp index 7515fb01..da389d3d 100644 --- a/nebula_ros/src/continental/continental_ars548_decoder_wrapper.cpp +++ b/nebula_ros/src/continental/continental_ars548_decoder_wrapper.cpp @@ -206,26 +206,21 @@ void ContinentalARS548DecoderWrapper::sensor_status_callback( // cSpell:ignore knzo25 // NOTE(knzo25): In the radar firmware used when developing this driver, - // corner radars are not supported. We can partially address this, - // but the coordinates look only spatially correct (not the dynamics). - // so its use is the responsibility of the user. - // Corner radars are expected to be supported in a new firmware version, - // but this is not yet confirmed. + // corner radars were not supported. When a new firmware addresses this, + // the driver will be updated. if ( std::abs(sensor_status.yaw) > 5.0 * M_PI / 180.0 && std::abs(sensor_status.yaw) < 90.0 * M_PI / 180.0) { rclcpp::Clock clock{RCL_ROS_TIME}; RCLCPP_WARN_THROTTLE( logger_, clock, 5000, - "This radar has been configured as a corner radar, which is not supported by the sensor. We " - "can partially address this, but the coordinates look only spatially correct (not the " - "dynamics). so its use is the responsibility of the user. Corner radars are expected to be " - "supported in a new firmware version, but this is not yet confirmed."); + "This radar has been configured as a corner radar, which is not supported by the sensor. The " + "driver will not output any objects"); status.level = diagnostic_msgs::msg::DiagnosticStatus::WARN; status.message += - ". Unsupported mounting configuration (corner radar). This should only be used for " - "evaluation purposes."; + ". Unsupported mounting configuration (corner radar). Only detections should be used under " + "these conditions."; } auto add_diagnostic = [&status](const std::string & key, const std::string & value) { diff --git a/nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp b/nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp index 905e8a40..dae6cf06 100644 --- a/nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp +++ b/nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp @@ -217,18 +217,13 @@ void ContinentalARS548HwInterfaceWrapper::set_sensor_mounting_request_callback( // cSpell:ignore knzo25 // NOTE(knzo25): In the radar firmware used when developing this driver, - // corner radars are not supported. We can partially address this, - // but the coordinates look only spatially correct (not the dynamics). - // so its use is the responsibility of the user. - // Corner radars are expected to be supported in a new firmware version, - // but this is not yet confirmed. + // corner radars were not supported. When a new firmware addresses this, + // the driver will be updated. if (std::abs(yaw) > 5.0 * M_PI / 180.0 && std::abs(yaw) < 90.0 * M_PI / 180.0) { RCLCPP_WARN( logger_, - "This radar has been configured as a corner radar, which is not supported by the sensor. We " - "can partially address this, but the coordinates look only spatially correct (not the " - "dynamics). so its use is the responsibility of the user. Corner radars are expected to be " - "supported in a new firmware version, but this is not yet confirmed."); + "You are attempting to configure the device as a corner radar, which is not supported so " + "far."); } auto result = hw_interface_->set_sensor_mounting(