Я использую realtime_tools в Ros2 Humble, я создал несколько Realtimepublisher s, и я называю их последовательно в потоке, используя следующий код:
Код: Выделить всё
std::thread = ([&publishers_]() {
usleep(1 * 1000);
for (auto publisher : publishers_) {
if (publisher->trylock()) {
publisher->msg_ = msg;
publisher->unlockAndPublish();
} else {
RCLCPP_INFO(m_node_->get_logger(), "Publish failed");
}
}
});
Поток работает с частотой приблизительно 1000 Гц, и программа часто печатает «Опубликовать неудачу», что означает, что большое количество вызовов Trylock () возвращает сбой, но у меня есть только один поток, использующий эти издатели.
возвращает успех вместо неудачи
Подробнее здесь:
https://stackoverflow.com/questions/796 ... e-threaded