rclcpp::Time 和 rclcpp::Duration 和ROS1中的用法偏差较大,但与std::chrono 的关系更为密切。ROS Discourse 可以看到与其有关的比较深入的讨论。
在移植某些ros1库时,时间戳可能会被大量用作浮点秒。从 rclcpp 获取浮点秒 rclcpp::Time:
// node is instance of rclcpp::Node
rclcpp::Time t = node.now();
double seconds = t.seconds();
没有用于从浮点表示的秒开始的时间的构造函数,因此你首先需要转换为纳秒:
rclcpp::Time t(static_cast<uin64_t>(seconds * 1e9));
确实具有双向功能:
rclcpp::Duration d = rclcpp::Duration::from_seconds(1.0);
double seconds = d.seconds();