Skip to content

Commit

Permalink
feat: updated the ars548 driver according to new received documentation
Browse files Browse the repository at this point in the history
Signed-off-by: Kenzo Lobos-Tsunekawa <[email protected]>
  • Loading branch information
knzo25 committed Jan 20, 2025
1 parent 33e77cf commit a22a695
Show file tree
Hide file tree
Showing 8 changed files with 220 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,18 @@ constexpr int sync_lost = 3;
constexpr int plug_right = 0;
constexpr int plug_left = 1;

constexpr int maximum_distance_min_value = 93;
constexpr int maximum_distance_max_value = 1514;

constexpr int frequency_slot_low = 0;
constexpr int frequency_slot_mid = 1;
constexpr int frequency_slot_high = 2;

constexpr int min_cycle_time_ms = 50;
constexpr int max_cycle_time_ms = 100;

constexpr int min_time_slot_ms = 10;

constexpr int hcc_worldwide = 1;
constexpr int hcc_japan = 2;

Expand Down
72 changes: 72 additions & 0 deletions nebula_common/include/nebula_common/util/ring_buffer.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright 2025 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

#include <algorithm>
#include <stdexcept>
#include <vector>

namespace nebula::util
{

template <typename T>
class RingBuffer

Check warning on line 25 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L25

Added line #L25 was not covered by tests
{
public:
explicit RingBuffer(std::size_t capacity) : capacity_(capacity) { buffer_.resize(capacity_); }

Check warning on line 28 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L28

Added line #L28 was not covered by tests

void push_back(const T & value)

Check warning on line 30 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L30

Added line #L30 was not covered by tests
{
if (is_full()) {
sum_ -= buffer_[index_];

Check warning on line 33 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L32-L33

Added lines #L32 - L33 were not covered by tests
}

sum_ += value;
buffer_[index_] = value;
index_ = (index_ + 1) % capacity_;
size_ = std::min(size_ + 1, capacity_);

Check warning on line 39 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L36-L39

Added lines #L36 - L39 were not covered by tests
}

T & operator[](std::size_t index)
{
if (index >= size_) {
throw std::out_of_range("Index out of range");
}
return buffer_[(index_ + index) % size_];
}

const T & operator[](std::size_t index) const
{
if (index >= size_) {
throw std::out_of_range("Index out of range");
}
return buffer_[(index_ + index) % size_];
}

std::size_t size() const { return size_; }

bool is_full() const { return size_ == capacity_; }

Check warning on line 60 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L60

Added line #L60 was not covered by tests

T get_average() const { return sum_ / size_; }

Check warning on line 62 in nebula_common/include/nebula_common/util/ring_buffer.hpp

View check run for this annotation

Codecov / codecov/patch

nebula_common/include/nebula_common/util/ring_buffer.hpp#L62

Added line #L62 was not covered by tests

private:
T sum_{};
std::vector<T> buffer_;
std::size_t capacity_;
std::size_t size_{0};
std::size_t index_{0};
};

} // namespace nebula::util
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ bool ContinentalARS548Decoder::parse_sensor_status_packet(
radar_status_.hcc = "1:Worldwide";
break;
case hcc_japan:
radar_status_.hcc = "1:Japan";
radar_status_.hcc = "2:Japan";

Check warning on line 486 in nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_decoders/src/nebula_decoders_continental/decoders/continental_ars548_decoder.cpp#L486

Added line #L486 was not covered by tests
break;
default:
radar_status_.hcc = std::to_string(sensor_status_packet.status.hcc) + ":Invalid hcc";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ class ContinentalARS548HwInterface
/// @param power_save_standstill Desired power_save_standstill value (0 = Off, 1 = On)
/// @return Resulting status
Status set_radar_parameters(
uint16_t maximum_distance, uint8_t frequency_slot, uint8_t cycle_time, uint8_t time_slot,
uint8_t hcc, uint8_t power_save_standstill);
uint16_t maximum_distance, std::string frequency_band, uint8_t cycle_time, uint8_t time_slot,
std::string country_code, uint8_t power_save_standstill);

/// @brief Set the sensor ip address
/// @param sensor_ip_address Desired sensor ip address
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,14 +185,46 @@ Status ContinentalARS548HwInterface::set_vehicle_parameters(
}

Status ContinentalARS548HwInterface::set_radar_parameters(
uint16_t maximum_distance, uint8_t frequency_slot, uint8_t cycle_time, uint8_t time_slot,
uint8_t hcc, uint8_t power_save_standstill)
uint16_t maximum_distance, std::string frequency_band, uint8_t cycle_time_ms,
uint8_t time_slot_ms, std::string country_code, uint8_t power_save_standstill)
{
uint8_t frequency_slot = 0;
uint8_t hcc = 0;

if (frequency_band == "low") {
frequency_slot = frequency_slot_low;
} else if (frequency_band == "mid") {
frequency_slot = frequency_slot_mid;
} else if (frequency_band == "high") {
frequency_slot = frequency_slot_high;
} else {
print_error("Invalid frequency_band value");
return Status::SENSOR_CONFIG_ERROR;

Check warning on line 202 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L201-L202

Added lines #L201 - L202 were not covered by tests
}

if (country_code == "worldwide") {
hcc = hcc_worldwide;
} else if (country_code == "japan") {
hcc = hcc_japan;
} else {
print_error("Invalid country_code value");
return Status::SENSOR_CONFIG_ERROR;

Check warning on line 211 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L210-L211

Added lines #L210 - L211 were not covered by tests
}

if (
maximum_distance < 93 || maximum_distance > 1514 || frequency_slot > 2 || cycle_time < 50 ||
cycle_time > 100 || time_slot < 10 || time_slot > 90 || hcc < 1 || hcc > 2 ||
power_save_standstill > 1) {
print_error("Invalid SetRadarParameters values");
maximum_distance < maximum_distance_min_value ||

Check warning on line 215 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L215

Added line #L215 was not covered by tests
maximum_distance > maximum_distance_max_value) {
print_error("Invalid maximum_distance value");
return Status::SENSOR_CONFIG_ERROR;

Check warning on line 218 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L217-L218

Added lines #L217 - L218 were not covered by tests
}

if (cycle_time_ms < min_cycle_time_ms || cycle_time_ms > max_cycle_time_ms) {
print_error("Invalid cycle_time_ms value");
return Status::SENSOR_CONFIG_ERROR;

Check warning on line 223 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L222-L223

Added lines #L222 - L223 were not covered by tests
}

if (time_slot_ms < min_time_slot_ms || time_slot_ms > cycle_time_ms - 1) {
print_error("Invalid time_slot_ms value");

Check warning on line 227 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L227

Added line #L227 was not covered by tests
return Status::SENSOR_CONFIG_ERROR;
}

Expand All @@ -203,8 +235,8 @@ Status ContinentalARS548HwInterface::set_radar_parameters(
configuration_packet.header.length = configuration_payload_length;
configuration_packet.configuration.maximum_distance = maximum_distance;
configuration_packet.configuration.frequency_slot = frequency_slot;
configuration_packet.configuration.cycle_time = cycle_time;
configuration_packet.configuration.time_slot = time_slot;
configuration_packet.configuration.cycle_time = cycle_time_ms;
configuration_packet.configuration.time_slot = time_slot_ms;

Check warning on line 239 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L238-L239

Added lines #L238 - L239 were not covered by tests
configuration_packet.configuration.hcc = hcc;
configuration_packet.configuration.powersave_standstill = power_save_standstill;
configuration_packet.new_radar_parameters = 1;
Expand All @@ -214,8 +246,8 @@ Status ContinentalARS548HwInterface::set_radar_parameters(

print_info("maximum_distance = " + std::to_string(maximum_distance));
print_info("frequency_slot = " + std::to_string(frequency_slot));
print_info("cycle_time = " + std::to_string(cycle_time));
print_info("time_slot = " + std::to_string(time_slot));
print_info("cycle_time = " + std::to_string(cycle_time_ms));
print_info("time_slot = " + std::to_string(time_slot_ms));

Check warning on line 250 in nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_hw_interfaces/src/nebula_continental_hw_interfaces/continental_ars548_hw_interface.cpp#L249-L250

Added lines #L249 - L250 were not covered by tests
print_info("hcc = " + std::to_string(hcc));
print_info("power_save_standstill = " + std::to_string(power_save_standstill));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
uint16 maximum_distance
uint16 frequency_slot
uint16 cycle_time
uint16 time_slot
uint16 country_code
string frequency_band
uint16 cycle_time_ms
uint16 time_slot_ms
string country_code
uint16 powersave_standstill
---
bool success
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "nebula_ros/common/parameter_descriptors.hpp"

#include <nebula_common/continental/continental_ars548.hpp>
#include <nebula_common/util/ring_buffer.hpp>
#include <nebula_hw_interfaces/nebula_hw_interfaces_continental/continental_ars548_hw_interface.hpp>
#include <rclcpp/rclcpp.hpp>

Expand Down Expand Up @@ -114,6 +115,13 @@ class ContinentalARS548HwInterfaceWrapper
acceleration_sub_{};
rclcpp::Subscription<std_msgs::msg::Float32>::SharedPtr steering_angle_sub_{};

double last_odometry_stamp_{0.0};
double last_acceleration_stamp_{0.0};
double last_steering_angle_stamp_{0.0};
nebula::util::RingBuffer<double> odometry_ring_buffer_;
nebula::util::RingBuffer<double> acceleration_ring_buffer_;
nebula::util::RingBuffer<double> steering_angle_ring_buffer_;

bool standstill_{true};

rclcpp::Service<continental_srvs::srv::ContinentalArs548SetNetworkConfiguration>::SharedPtr
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ ContinentalARS548HwInterfaceWrapper::ContinentalARS548HwInterfaceWrapper(
std::make_shared<nebula::drivers::continental_ars548::ContinentalARS548HwInterface>()),
logger_(parent_node->get_logger().get_child("HwInterfaceWrapper")),
status_(Status::NOT_INITIALIZED),
config_ptr_(config_ptr)
config_ptr_(config_ptr),
odometry_ring_buffer_(100),
acceleration_ring_buffer_(100),
steering_angle_ring_buffer_(100)

Check warning on line 35 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L33-L35

Added lines #L33 - L35 were not covered by tests
{
hw_interface_->set_logger(
std::make_shared<rclcpp::Logger>(parent_node->get_logger().get_child("HwInterface")));
Expand Down Expand Up @@ -122,6 +125,30 @@ ContinentalARS548HwInterfaceWrapper::hw_interface() const
void ContinentalARS548HwInterfaceWrapper::odometry_callback(
const geometry_msgs::msg::TwistWithCovarianceStamped::SharedPtr msg)
{
if (last_odometry_stamp_ == 0.0) {
last_odometry_stamp_ = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9;

Check warning on line 129 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L129

Added line #L129 was not covered by tests
} else {
double current_time = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9;
double dt = current_time - last_odometry_stamp_;
last_odometry_stamp_ = current_time;
odometry_ring_buffer_.push_back(dt);

Check warning on line 134 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L131-L134

Added lines #L131 - L134 were not covered by tests
}

double estimated_hz = 1.0 / odometry_ring_buffer_.get_average();
RCLCPP_ERROR(

Check warning on line 138 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L137-L138

Added lines #L137 - L138 were not covered by tests
logger_,
"The current odometry rate is %.2f Hz. The sensor requires a rate in the range of 10Hz to 50Hz",
estimated_hz);

if (odometry_ring_buffer_.is_full() && (estimated_hz < 10.0 || estimated_hz > 50.0)) {
rclcpp::Clock clock{RCL_ROS_TIME};
RCLCPP_WARN_THROTTLE(

Check warning on line 145 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L144-L145

Added lines #L144 - L145 were not covered by tests
logger_, clock, 5000,
"The current odometry rate is %.2f Hz. The sensor requires a rate in the range of 10Hz to "
"50Hz",
estimated_hz);
}

Check warning on line 150 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L150

Added line #L150 was not covered by tests

constexpr float speed_to_standstill = 0.5f;
constexpr float speed_to_moving = 2.f;

Expand All @@ -147,13 +174,66 @@ void ContinentalARS548HwInterfaceWrapper::odometry_callback(
void ContinentalARS548HwInterfaceWrapper::acceleration_callback(
const geometry_msgs::msg::AccelWithCovarianceStamped::SharedPtr msg)
{
if (last_acceleration_stamp_ == 0.0) {
last_acceleration_stamp_ = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9;

Check warning on line 178 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L178

Added line #L178 was not covered by tests
} else {
double current_time = msg->header.stamp.sec + msg->header.stamp.nanosec * 1e-9;
double dt = current_time - last_acceleration_stamp_;
last_acceleration_stamp_ = current_time;
acceleration_ring_buffer_.push_back(dt);

Check warning on line 183 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L180-L183

Added lines #L180 - L183 were not covered by tests
}

double estimated_hz = 1.0 / acceleration_ring_buffer_.get_average();
RCLCPP_ERROR(

Check warning on line 187 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L186-L187

Added lines #L186 - L187 were not covered by tests
logger_,
"The current acceleration rate is %.2f Hz. The sensor requires a rate in the range of 10Hz to "
"50Hz",
estimated_hz);

if (acceleration_ring_buffer_.is_full() && (estimated_hz < 10.0 || estimated_hz > 50.0)) {
rclcpp::Clock clock{RCL_ROS_TIME};
RCLCPP_WARN_THROTTLE(

Check warning on line 195 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L194-L195

Added lines #L194 - L195 were not covered by tests
logger_, clock, 5000,
"Current acceleration rate is %.2f Hz. The sensor requires a rate in the range of 10Hz to "
"50Hz",
estimated_hz);
}

Check warning on line 200 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L200

Added line #L200 was not covered by tests

hw_interface_->set_acceleration_lateral_cog(msg->accel.accel.linear.y);
hw_interface_->set_acceleration_longitudinal_cog(msg->accel.accel.linear.x);
}

void ContinentalARS548HwInterfaceWrapper::steering_angle_callback(
const std_msgs::msg::Float32::SharedPtr msg)
{
const auto now = std::chrono::high_resolution_clock::now();

Check warning on line 209 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L209

Added line #L209 was not covered by tests
const auto stamp =
1e-9 * std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()).count();

Check warning on line 211 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L211

Added line #L211 was not covered by tests

if (last_steering_angle_stamp_ == 0.0) {
last_steering_angle_stamp_ = stamp;

Check warning on line 214 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L214

Added line #L214 was not covered by tests
} else {
double dt = stamp - last_steering_angle_stamp_;
last_steering_angle_stamp_ = stamp;
steering_angle_ring_buffer_.push_back(dt);

Check warning on line 218 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L216-L218

Added lines #L216 - L218 were not covered by tests
}

double estimated_hz = 1.0 / steering_angle_ring_buffer_.get_average();
RCLCPP_ERROR(

Check warning on line 222 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L221-L222

Added lines #L221 - L222 were not covered by tests
logger_,
"The current steering angle rate is %.2f Hz. The sensor requires a rate in the range of 10Hz "
"to 50Hz",
estimated_hz);

if (steering_angle_ring_buffer_.is_full() && (estimated_hz < 10.0 || estimated_hz > 50.0)) {
rclcpp::Clock clock{RCL_ROS_TIME};
RCLCPP_WARN_THROTTLE(

Check warning on line 230 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L229-L230

Added lines #L229 - L230 were not covered by tests
logger_, clock, 5000,
"Current steering angle rate is %.2f Hz. The sensor requires a rate in the range of 10Hz to "
"50Hz",
estimated_hz);
}

Check warning on line 235 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L235

Added line #L235 was not covered by tests

constexpr float rad_to_deg = 180.f / M_PI;
hw_interface_->set_steering_angle_front_axle(rad_to_deg * msg->data);
}
Expand Down Expand Up @@ -287,8 +367,8 @@ void ContinentalARS548HwInterfaceWrapper::set_radar_parameters_request_callback(
response)
{
auto result = hw_interface_->set_radar_parameters(
request->maximum_distance, request->frequency_slot, request->cycle_time, request->time_slot,
request->country_code, request->powersave_standstill);
request->maximum_distance, request->frequency_band, request->cycle_time_ms,
request->time_slot_ms, request->country_code, request->powersave_standstill);

Check warning on line 371 in nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp

View check run for this annotation

Codecov / codecov/patch

nebula_ros/src/continental/continental_ars548_hw_interface_wrapper.cpp#L370-L371

Added lines #L370 - L371 were not covered by tests

response->success = result == Status::OK;
response->message = (std::stringstream() << result).str();
Expand Down

0 comments on commit a22a695

Please sign in to comment.