ROS_DEBUG_STREAM
时间: 2024-08-14 09:04:32 浏览: 112
ROS_DEBUG_STREAM是Robot Operating System (ROS)中的一个宏,它允许开发者在调试阶段以一种更详细、可配置的方式打印日志消息。这个宏通常用于生成调试信息流,可以在控制台上看到彩色标记的文本,有助于区分正常运行的日志和调试级别的输出。
当你在代码中使用ROS_DEBUG_STREAM时,可以插入复杂的格式化字符串,包括变量值、时间戳等,并且可以根据需要开启或关闭这种高级别的日志,这对于定位代码中的问题非常有用。它的基本语法通常是:
```cpp
ROS_DEBUG_STREAM("message << " << var1 << ", " << var2 << " at time " << now);
```
相关问题
auto it = plugin_subscriptions.find(msgid); if (it == plugin_subscriptions.end()) { // new entry ROS_DEBUG_STREAM(log_msgname << " - new element"); plugin_subscriptions[msgid] = PluginBase::Subscriptions{{info}}; } else { // existing: check handler message type bool append_allowed = is_mavlink_message_t(type_hash_); if (!append_allowed) { append_allowed = true; for (auto &e : it->second) { auto t2 = std::get<2>(e); if (!is_mavlink_message_t(t2) && t2 != type_hash_) { ROS_ERROR_STREAM(log_msgname << " routed to different message type (hash: " << t2 << ")"); append_allowed = false; } } } if (append_allowed) { ROS_DEBUG_STREAM(log_msgname << " - emplace"); it->second.emplace_back(info); } else ROS_ERROR_STREAM(log_msgname << " handler dropped because this ID are used for another message type"); }
这段代码看起来像是 C++ 的一个消息订阅系统,用于处理消息的路由和分发。它首先检查是否已经有一个订阅相同消息 ID 的处理程序,如果没有则创建一个新的订阅列表并添加当前处理程序;如果已经存在,则检查当前处理程序处理的消息类型是否与已有处理程序处理的类型相同,如果不同则不允许添加当前处理程序,否则将当前处理程序添加到订阅列表中。在这个过程中,代码使用了 STL 中的 map 和 vector 容器来存储订阅信息。
ROS_DEBUG_STREAM(log_msgname << " - new element"); plugin_subscriptions[msgid] = PluginBase::Subscriptions{{info}};
这段代码是在 ROS 程序中添加一个新的订阅消息。它首先打印一条日志信息,指示正在添加一个新元素。然后,它将一个新的插件订阅消息添加到名为 plugin_subscriptions 的哈希表中,使用 msgid 作为键和包含一个包含 info 的 Subscriptions 结构体作为值。这个 Subscriptions 结构体是 PluginBase 类的一个成员,它包含了一个该插件订阅的所有主题的列表。这段代码的作用是在 ROS 中为插件添加一个订阅主题,并将订阅信息存储在插件的 Subscriptions 结构体中。
阅读全文