Program Listing for File converter.hpp
↰ Return to documentation for file (include/off_highway_premium_radar_sample/interface/converter.hpp
)
// Copyright 2023 Robert Bosch GmbH and its subsidiaries
//
// 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 <cstdint>
#include <limits>
#include <memory>
#include <string>
#include "off_highway_premium_radar_sample/interface/receiver.hpp"
#include "off_highway_premium_radar_sample/interface/sender.hpp"
#include "rclcpp/rclcpp.hpp"
namespace off_highway_premium_radar_sample
{
class Converter : public Receiver
{
public:
using SharedPtr = std::shared_ptr<Converter>;
virtual ~Converter() = default;
virtual void configure(rclcpp::Node::WeakPtr parent, Sender::SharedPtr sender)
{
parent_ = parent;
sender_ = sender;
{
auto node = parent_.lock();
clock_ = node->get_clock();
logger_ = node->get_logger();
}
declare_and_get_parameters();
on_configure();
}
virtual void on_configure() = 0;
protected:
rclcpp::Time decide_on_stamp(uint32_t sensor_sec, uint32_t sensor_nanosec)
{
bool sensor_time_compatible = sensor_sec <=
std::numeric_limits<builtin_interfaces::msg::Time::_sec_type>::max();
if (use_sensor_time_ && !sensor_time_compatible) {
RCLCPP_ERROR_STREAM(
logger_, "Trying to use time from sensor, but received seconds out of range for ROS: "
<< sensor_sec << " . Falling back to ROS time.");
}
return use_sensor_time_ && sensor_time_compatible ?
rclcpp::Time(sensor_sec, sensor_nanosec) :
clock_->now();
}
rclcpp::Node::WeakPtr parent_;
Sender::SharedPtr sender_;
rclcpp::Clock::SharedPtr clock_;
rclcpp::Logger logger_{rclcpp::get_logger("Converter")};
// ROS parameters
std::string frame_id_{"base_link"};
bool use_sensor_time_{false};
private:
void declare_and_get_parameters()
{
auto node = parent_.lock();
if (!node->has_parameter("frame_id")) {
node->declare_parameter("frame_id", frame_id_);
}
node->get_parameter("frame_id", frame_id_);
if (!node->has_parameter("use_sensor_time")) {
node->declare_parameter("use_sensor_time", use_sensor_time_);
}
node->get_parameter("use_sensor_time", use_sensor_time_);
}
};
} // namespace off_highway_premium_radar_sample