3.6 时间相关API
在前面案例中我们已经使用了 ROS2 中的诸多 API,本节主要介绍另一类比较常见的API:时间相关API
3.6.1 Rate
第2章话题通信案例中,要求话题发布方按照一定的频率发布消息,我们实现时是通过定时器来控制发布频率的,其实,除了定时器之外,ROS2 中还提供了 Rate 类,通过该类对象也可以控制程序的运行频率。
1.rclcpp 中的 Rate
示例:周期性输出一段文本。

2.rclpy 中的 Rate
rclpy 中的 Rate 对象可以通过节点创建,Rate 对象的 sleep() 函数需要在子线程中执行,否咋会阻塞程序。
示例:周期性输出一段文本。

3.6.2 Time
1.rclcpp 中的 Time
示例:创建 Time 对象,并调用其函数。
int main(int argc, char const *argv[])
{
rclcpp::init(argc,argv);
auto node = rclcpp::Node::make_shared("time_demo");
// 创建 Time 对象
rclcpp::Time t1(10500000000L);
rclcpp::Time t2(2,1000000000L);
// 通过节点获取当前时刻。
// 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
示例:创建 Time 对象,并调用其函数。
import rclpy
from rclpy.time import Time
def main():
rclpy.init()
node = rclpy.create_node("time_demo")
# 创建 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
示例:创建 Duration 对象,并调用其函数。

2.rclpy 中的 Duration
示例:创建 Duration 对象,并调用其函数。

3.6.4 Time 与 Duration 运算
1.rclcpp 中的运算
示例:Time 以及 Duration 的相关运算。

2.rclpy 中的运算
示例:Time 以及 Duration 的相关运算。


B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践
更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。