24#include "absl/strings/str_cat.h"
26#include "modules/common_msgs/sensor_msgs/sensor_image.pb.h"
36 "Name of the camera monitor.");
38 "Camera monitor checking interval in seconds.");
39DEFINE_string(camera_component_name,
"Camera",
"Camera component name.");
45using ReaderAndMessagePair = std::pair<std::shared_ptr<cyber::ReaderBase>,
46 std::shared_ptr<drivers::Image>>;
48ReaderAndMessagePair CreateReaderAndLatestsMessage(
const std::string& camera) {
50 MonitorManager::Instance()->CreateReader<drivers::Image>(camera);
52 const auto message = reader->GetLatestObserved();
54 return {reader, message};
57static const auto camera_topic_set = std::set<std::string>{
58 FLAGS_image_long_topic, FLAGS_camera_image_long_topic,
59 FLAGS_camera_image_short_topic, FLAGS_camera_front_6mm_topic,
60 FLAGS_camera_front_6mm_2_topic, FLAGS_camera_front_12mm_topic,
68 FLAGS_camera_monitor_interval) {}
71 auto* manager = MonitorManager::Instance();
72 auto* component = apollo::common::util::FindOrNull(
73 *manager->GetStatus()->mutable_components(), FLAGS_camera_component_name);
74 if (component ==
nullptr) {
78 auto* status = component->mutable_other_status();
82void CameraMonitor::UpdateStatus(ComponentStatus* status) {
83 status->clear_status();
84 std::string frame_id =
"";
85 for (
const auto& topic : camera_topic_set) {
86 const auto& reader_message_pair = CreateReaderAndLatestsMessage(topic);
87 const auto& reader = reader_message_pair.first;
88 const auto& message = reader_message_pair.second;
89 if (reader !=
nullptr && message !=
nullptr) {
90 if (frame_id.empty()) {
91 const auto& header = message->header();
92 if (header.has_frame_id()) {
93 frame_id = header.frame_id();
97 ComponentStatus::ERROR,
98 absl::StrCat(
"Only one camera is permitted"), status);
104 ComponentStatus::ERROR, absl::StrCat(
"No camera is detected"), status);
107 ComponentStatus::OK, absl::StrCat(
"Detected one camera: ", frame_id),
DEFINE_double(camera_monitor_interval, 5, "Camera monitor checking interval in seconds.")
DEFINE_string(camera_monitor_name, "CameraMonitor", "Name of the camera monitor.")
void RunOnce(const double current_time) override
static void EscalateStatus(const ComponentStatus::Status new_status, const std::string &message, ComponentStatus *current_status)
std::string frame_id
Point cloud frame id