【问题标题】:ROS Node to Node time durationROS 节点到节点持续时间
【发布时间】:2015-11-27 18:06:56
【问题描述】:

如何计算从一个节点向另一个节点发送消息所需的时间?是否有函数或 c++ 节点示例可用作测试场景?

【问题讨论】:

标签: c++ ros


【解决方案1】:

这取决于您的应用程序和您想要达到的精度:它可能会随着多线程环境中的随机过程而变化。

但是,您可以在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;

  // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多