【发布时间】:2020-09-09 10:18:51
【问题描述】:
我有一个 ROS 节点,我在其中订阅一个主题,然后通过以下方式发布到另一个主题:
#include ...
//Ros Nodehandle + Publisher
//Callback Function definition
int main (int argc, char** argv){
//Initialisation
// Pub
pub = nh->advertise<Messagetype>("Topic2", 1);
//Sub
ros::Subscriber sub = nh->subscribe("Topic1", 1, sub_cb);
ros::spin();
return 0;
}
void sub_cb(){
//Write the msg i want to publish
pub.publish(msg);
}
例如,我想发布 15 秒的消息。我尝试了 Ros::Time 和 Ros::Duration 的解决方案。但我的回调函数中有发布者这一事实不允许我这样做。
即使我的 发布事件 在我的回调函数中,有没有办法做到这一点?如果没有,任何解决方案都可以,主要是我的订阅者和我的发布者在同一个节点上。
【问题讨论】:
-
为什么不在发布前进行时间检查,并且仅在您开始计时后不到 15 秒时才发布?
-
如果我在 sub_cb() 函数中启动时钟,它会显示错误。我想我只能在主要方面做到这一点。
-
有问题吗?
-
我认为我对出版的事实并不了解。我一直认为发布是通过“pub.publish(msg);” .因此,如果我想影响何时以及如何发布,我应该为“pub.publish(msg);”制定一个控制声明。如何从主要控制它?根据发布者的定义?
-
在全局范围内创建一个定时器;将其设置为主要;在致电
publish之前,请在sub_cb中查看。
标签: time ros robot publisher subscriber