循环中的时间延迟
2026/8/29 13:24:47 网站建设 项目流程

1. ROS2 标准 rclcpp::Rate

rclcpp::Rate rate(10); ... rate.sleep();
  • 自动补偿循环内运算耗时,严格锁定平均频率
  • 适合不需要低延迟、追求稳定 CPU 负载的场景(比如建图、状态打印)

rate.sleep()自动计算本次循环已经消耗的时间,然后休眠补足剩余时长,保证整个while循环稳定卡在 10Hz 运行。例:本次里面算法耗时 20ms,sleep()就休眠 80ms,总周期 = 100ms,严格 10Hz.

2. C++ 原生线程休眠std::this_thread::sleep_for

void 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,本轮总耗时 = 3+10=13ms; 算法跑了 15ms,本轮总耗时 = 15+10=25ms,实际频率会波动。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询