3.6 時間相關(guān)API
在前面案例中我們已經(jīng)使用了 ROS2 中的諸多 API,本節(jié)主要介紹另一類比較常見的API:時間相關(guān)API
3.6.1 Rate
第2章話題通信案例中,要求話題發(fā)布方按照一定的頻率發(fā)布消息,我們實現(xiàn)時是通過定時器來控制發(fā)布頻率的,其實,除了定時器之外,ROS2 中還提供了 Rate 類,通過該類對象也可以控制程序的運行頻率。
1.rclcpp 中的 Rate
示例:周期性輸出一段文本。

2.rclpy 中的 Rate
rclpy 中的 Rate 對象可以通過節(jié)點創(chuàng)建,Rate 對象的 sleep() 函數(shù)需要在子線程中執(zhí)行,否咋會阻塞程序。
示例:周期性輸出一段文本。

3.6.2 Time
1.rclcpp 中的 Time
示例:創(chuàng)建 Time 對象,并調(diào)用其函數(shù)。
int main(int argc, char const *argv[])
{
? ?
? ?rclcpp::init(argc,argv); ? ?
? ?auto node = rclcpp::Node::make_shared("time_demo"); ??
?
? ?// 創(chuàng)建 Time 對象
? ?
? ?rclcpp::Time t1(10500000000L);
? ?
? ?rclcpp::Time t2(2,1000000000L); ? ?
? ?// 通過節(jié)點獲取當(dāng)前時刻。
? ?
? ?// rclcpp::Time roght_now = node->get_clock()->now();
? ?
? ?rclcpp::Time roght_now = node->now();
? ?
? ?RCLCPP_INFO(node->get_logger(),"s = %.2f, ns = %ld",t1.seconds(),t1.nanoseconds());
? ?
? ?RCLCPP_INFO(node->get_logger(),"s = %.2f, ns = %ld",t2.seconds(),t2.nanoseconds());
? ?
? ?RCLCPP_INFO(node->get_logger(),"s = %.2f, ns = %ld",roght_now.seconds(),roght_now.nanoseconds());
? ?
? ?
? ?rclcpp::shutdown(); ? ?
? ?return 0;?
}
2.rclpy 中的 Time
示例:創(chuàng)建 Time 對象,并調(diào)用其函數(shù)。
import rclpy
from rclpy.time import Time
def main():
? ?
? rclpy.init()
? ?
? node = rclpy.create_node("time_demo") ? ?
? # 創(chuàng)建 Time 對象
? ?
? right_now = node.get_clock().now()
? ?
? t1 = Time(seconds=10,nanoseconds=500000000)
? ?
? node.get_logger().info("s = %.2f, ns = %d" % (right_now.seconds_nanoseconds()[0], right_now.seconds_nanoseconds()[1]))
? ?
? node.get_logger().info("s = %.2f, ns = %d" % (t1.seconds_nanoseconds()[0], t1.seconds_nanoseconds()[1]))
? ?
? node.get_logger().info("ns = %d" % right_now.nanoseconds)
? ?
? node.get_logger().info("ns = %d" % t1.nanoseconds)
? ?
? rclpy.shutdown()
if __name__ == "__main__":
? ?
? main()
3.6.3 Duration
1.rclcpp 中的 Duration
示例:創(chuàng)建 Duration 對象,并調(diào)用其函數(shù)。

2.rclpy 中的 Duration
示例:創(chuàng)建 Duration 對象,并調(diào)用其函數(shù)。

3.6.4 Time 與 Duration 運算
1.rclcpp 中的運算
示例:Time 以及 Duration 的相關(guān)運算。

2.rclpy 中的運算
示例:Time 以及 Duration 的相關(guān)運算。


B站有完整的ros系列教程視頻,可以觀看完整內(nèi)容ros課程ROS2理論與實踐
更多內(nèi)容將在猛獅知識星球社區(qū)更新最新課程,后續(xù)將推出更多優(yōu)質(zhì)內(nèi)容——詳情可關(guān)注猛獅集訓(xùn)營公眾號和猛獅集訓(xùn)營官方網(wǎng)站。