diff --git a/rclcpp/include/rclcpp/duration.hpp b/rclcpp/include/rclcpp/duration.hpp index 6e63584..11fc2e2 100644 --- a/rclcpp/include/rclcpp/duration.hpp +++ b/rclcpp/include/rclcpp/duration.hpp @@ -97,6 +97,13 @@ public: rcl_duration_value_t nanoseconds() const; + /// \return the duration in seconds as a floating point number. + /// \warning Depending on sizeof(double) there could be significant precision loss. + /// When an exact time is required use nanoseconds() instead. + RCLCPP_PUBLIC + double + seconds() const; + private: rcl_duration_t rcl_duration_; }; diff --git a/rclcpp/src/rclcpp/duration.cpp b/rclcpp/src/rclcpp/duration.cpp index afbc293..0455abe 100644 --- a/rclcpp/src/rclcpp/duration.cpp +++ b/rclcpp/src/rclcpp/duration.cpp @@ -214,4 +214,10 @@ Duration::nanoseconds() const return rcl_duration_.nanoseconds; } +double +Duration::seconds() const +{ + return std::chrono::duration(std::chrono::nanoseconds(rcl_duration_.nanoseconds)).count(); +} + } // namespace rclcpp