FEATURED · 精选文章

循环中的时间延迟

发布时间 / 2026/8/14 16:43:58
来源 / 创域科博编辑部
栏目 / 资讯中心
循环中的时间延迟 1. ROS2 标准 rclcpp::Raterclcpp::Rate rate(10); ... rate.sleep();自动补偿循环内运算耗时严格锁定平均频率适合不需要低延迟、追求稳定 CPU 负载的场景比如建图、状态打印rate.sleep()会自动计算本次循环已经消耗的时间然后休眠补足剩余时长保证整个while循环稳定卡在 10Hz 运行。例本次里面算法耗时 20ms,sleep()就休眠 80ms总周期 100ms严格 10Hz.2. C 原生线程休眠std::this_thread::sleep_forvoid TeleObsAvoidNode::Run() { while (rclcpp::ok()) { //去消息队列里捞已经收到的话题数据挨个执行订阅回调比如激光雷达回调、遥控器指令回调否则下面的读取不到更新后的数据。 rclcpp::spin_some(this-get_node_base_interface()); if (obs_avoidance_active_) { geometry_msgs::msg::Twist cmd_vel; tele_obs_avoid_ptr_-Update(laser_scan_, tele_cmd_vel_, cmd_vel); cmd_vel_pub_-publish(cmd_vel); } // std::chrono::milliseconds(10)表示10ms, 只 sleep 10ms不再用 rate(10) 的 0.1s 固定周期 std::this_thread::sleep_for(std::chrono::milliseconds(10)); }固定休眠时长不做耗时补偿假设循环内算法跑了 3ms本轮总耗时 31013ms 算法跑了 15ms本轮总耗时 151025ms实际频率会波动。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻