【发布时间】:2015-11-27 18:06:56
【问题描述】:
如何计算从一个节点向另一个节点发送消息所需的时间?是否有函数或 c++ 节点示例可用作测试场景?
【问题讨论】:
-
你的运气可能会更好:answers.ros.org/questions
如何计算从一个节点向另一个节点发送消息所需的时间?是否有函数或 c++ 节点示例可用作测试场景?
【问题讨论】:
这取决于您的应用程序和您想要达到的精度:它可能会随着多线程环境中的随机过程而变化。
但是,您可以在publish() 调用之前使用pre_publish_time_ = ros::Time::now() 进行粗略估计,并将订阅者回调中的经过时间计算为ros::Time elapsed_time = ros::Time::now() - pre_publish_time_,其中pre_publish_time_ 是ros::Time 成员变量。
如果发布者和订阅者位于不同的类中,您可以在消息中添加std_msgs/Header,并将header.stamp 字段用作pre_publish_time_(在publish() 方法之前正确填写,如上所述)。
geometry_msgs/Vector3Stamped 示例:
void publishFcn() {
// ...
geometry_msgs::Vector3Stamped msg;
msg.vector.x = 0;
msg.vector.y = 0;
msg.vector.z = 1;
msg.header.stamp = ros::Time::now();
publisher_.publish(msg);
}
void msgCallback(const geometry_msgs::Vector3Stamped &msg) {
ros::Time elapsed_time = ros::Time::now() - msg.header.stamp;
// ...
}
【讨论】: