时间相关API
Rate
1.rclcpp
rclcpp::Rate rate(1.0);//创建Rate对象方式1 rclcpp::Rate rate(1000ms);//创建Rate对象方式2 rate.sleep();//休眠
2.rclpy
rclpy中的Rate对象可以通过节点创建,Rate对象的sleep函数需要在子线程中执行,不然会阻塞程序
1、导包 import rclpy import threading from rclpy.timer import Rate 2、创建节点对象 node = rclpy.create_node("rate_demo_node") 3、创建Rate对象 rate = node.create_rate(1.0)
Time
1.rclcpp
rclcpp::Time t1(10500000000L);//创建Time对象 rclcpp::Time right_now = node->get_clock()->now();//通过节点获取当前时刻
2.rclpy
1、导包 import rclpy from rclpy.time import Time #创建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)
Duration
1.rclcpp
// 创建 Duration 对象 rclcpp::Duration du1(1s); rclcpp::Duration du2(2,500000000); RCLCPP_INFO(node->get_logger(),"s = %.2f, ns = %ld", du2.seconds(),du2.nanoseconds());
2.rclpy
1、导包 import rclpy from rclpy.duration import Duration node = rclpy.create_node("duration_demo") du1 = Duration(seconds = 2,nanoseconds = 500000000) node.get_logger().info("ns = %d" % du1.nanoseconds)
Time与Duration运算
1.rclcpp
//创建时间Time对象和时间间隔对象Duration rclcpp::Time t1(1,500000000); rclcpp::Time t2(10,0); rclcpp::Duration du1(3,0); rclcpp::Duration du2(5,0); // 比较 RCLCPP_INFO(node->get_logger(),"t1 >= t2 ? %d",t1 >= t2); // 数学运算 rclcpp::Time t3 = t2 + du1; rclcpp::Time t4 = t1 - du1; rclcpp::Duration du3 = t2 - t1; RCLCPP_INFO(node->get_logger(), "t3 = %.2f",t3.seconds()); RCLCPP_INFO(node->get_logger(), "t4 = %.2f",t4.seconds()); RCLCPP_INFO(node->get_logger(), "du3 = %.2f",du3.seconds()); RCLCPP_INFO(node->get_logger(),"--------------------------------------"); // 比较 RCLCPP_INFO(node->get_logger(),"du1 >= du2 ? %d", du1 >= du2); RCLCPP_INFO(node->get_logger(),"du1 < du2 ? %d", du1 < du2); // 数学运算 rclcpp::Duration du4 = du1 * 3.0; rclcpp::Duration du5 = du1 + du2; rclcpp::Duration du6 = du1 - du2; RCLCPP_INFO(node->get_logger(), "du4 = %.2f",du4.seconds()); RCLCPP_INFO(node->get_logger(), "du5 = %.2f",du5.seconds()); RCLCPP_INFO(node->get_logger(), "du6 = %.2f",du6.seconds());
2.rclpy
import rclpy from rclpy.time import Time from rclpy.duration import Duration def main(): rclpy.init() node = rclpy.create_node("time_opt_node") t1 = Time(seconds=10) t2 = Time(seconds=4) du1 = Duration(seconds=3) du2 = Duration(seconds=5) # 比较 node.get_logger().info("t1 >= t2 ? %d" % (t1 >= t2)) node.get_logger().info("t1 < t2 ? %d" % (t1 < t2)) # 数学运算 t3 = t1 + du1 t4 = t1 - t2 t5 = t1 - du1 node.get_logger().info("t3 = %d" % t3.nanoseconds) node.get_logger().info("t4 = %d" % t4.nanoseconds) node.get_logger().info("t5 = %d" % t5.nanoseconds) # 比较 node.get_logger().info("-" * 80) node.get_logger().info("du1 >= du2 ? %d" % (du1 >= du2)) node.get_logger().info("du1 < du2 ? %d" % (du1 < du2)) rclpy.shutdown() if __name__ == "__main__": main()