68 const std::string & topic =
"mission_status_markers",
70 double text_size = 0.25)
78 pub_ = node_.create_publisher<visualization_msgs::msg::MarkerArray>(
79 topic, rclcpp::QoS(10).reliable().transient_local());
91 refresh_timer_ = node_.create_wall_timer(
92 std::chrono::milliseconds(200), [
this] {publish_all();});
102 void set_status(
const std::string & robot,
const std::string & text)
105 std::lock_guard<std::mutex> lock(mutex_);
106 texts_[robot] = text;
115 visualization_msgs::msg::MarkerArray array;
116 std::lock_guard<std::mutex> lock(mutex_);
117 const rclcpp::Time stamp = node_.get_clock()->now();
118 for (
const auto & [robot, text] : texts_) {
119 visualization_msgs::msg::Marker marker;
120 marker.header.frame_id = robot +
"/base_link";
121 marker.header.stamp = stamp;
122 marker.ns =
"mission_status";
123 marker.id = marker_ids_.at(robot);
124 marker.type = visualization_msgs::msg::Marker::TEXT_VIEW_FACING;
125 marker.action = visualization_msgs::msg::Marker::ADD;
134 marker.frame_locked =
true;
135 marker.pose.position.z = height_;
136 marker.pose.orientation.w = 1.0;
137 marker.scale.z = text_size_;
138 marker.color.r = 1.0;
139 marker.color.g = 1.0;
140 marker.color.b = 1.0;
141 marker.color.a = 1.0;
145 marker.lifetime = rclcpp::Duration(std::chrono::milliseconds(500));
146 array.markers.push_back(marker);
148 if (!array.markers.empty()) {
149 pub_->publish(array);
154 int32_t marker_id(
const std::string & robot)
156 auto it = marker_ids_.find(robot);
157 if (it != marker_ids_.end()) {
160 const int32_t
id = next_id_++;
161 marker_ids_.emplace(robot,
id);
165 rclcpp::Node & node_;
166 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub_;
167 rclcpp::TimerBase::SharedPtr refresh_timer_;
172 std::unordered_map<std::string, std::string> texts_;
173 std::unordered_map<std::string, int32_t> marker_ids_;
void set_status(const std::string &robot, const std::string &text)
Sets robot's current status text and publishes it immediately (the background refresh timer then keep...
Definition status_markers.hpp:102
StatusMarkerPublisher(rclcpp::Node &node, const std::string &topic="mission_status_markers", double height=0.75, double text_size=0.25)
Constructs the marker publisher.
Definition status_markers.hpp:66