From c928d5f22542b8390004bd12eb6bf22304e7862b Mon Sep 17 00:00:00 2001 From: Alvin-lyq Date: Tue, 31 Mar 2026 17:33:45 +0800 Subject: [PATCH] =?UTF-8?q?last=5Fmsg=5Ftime=5F=20=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=9C=A8=E5=A4=9A=E7=BA=BF=E7=A8=8B=E7=8E=AF=E5=A2=83=E4=B8=8B?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=90=8C=E6=AD=A5=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/remote_ctrl/src/remote_ctrl_node.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/control/remote_ctrl/src/remote_ctrl_node.cpp b/src/control/remote_ctrl/src/remote_ctrl_node.cpp index 35a1df3..491a612 100644 --- a/src/control/remote_ctrl/src/remote_ctrl_node.cpp +++ b/src/control/remote_ctrl/src/remote_ctrl_node.cpp @@ -131,7 +131,13 @@ class RemoteCtrlNode : public rclcpp::Node auto now = std::chrono::steady_clock::now(); // 超时阈值:建议 800ms ~ 1500ms - if (now - last_msg_time_ > 800ms) + std::chrono::steady_clock::time_point last; + { + std::lock_guard lock(last_msg_time_mtx_); + last = last_msg_time_; + } + + if (now - last > 800ms) { // 只在第一次进入“失活”时打印日志 if (remote_alive_.exchange(false)) @@ -286,7 +292,10 @@ class RemoteCtrlNode : public rclcpp::Node LOG_INFO("[REMOTE] ✓ control recovered"); } - last_msg_time_ = std::chrono::steady_clock::now(); + { + std::lock_guard lock(last_msg_time_mtx_); + last_msg_time_ = std::chrono::steady_clock::now(); + } LOG_DEBUG("[REMOTE] Processing command: %s", cmd.c_str()); @@ -399,6 +408,7 @@ class RemoteCtrlNode : public rclcpp::Node std::atomic remote_authorized_{false}; // 是否允许远控(锁存) std::atomic remote_alive_{false}; // 是否活跃(心跳) std::chrono::steady_clock::time_point last_msg_time_; + std::mutex last_msg_time_mtx_; // 保护 last_msg_time_ float current_feedback_angle_{0.0f};