last_msg_time_ 变量在多线程环境下没有同步保护

This commit is contained in:
Alvin-lyq 2026-03-31 17:33:45 +08:00
parent a5aef93432
commit c928d5f225

View File

@ -131,7 +131,13 @@ class RemoteCtrlNode : public rclcpp::Node
auto now = std::chrono::steady_clock::now(); auto now = std::chrono::steady_clock::now();
// 超时阈值:建议 800ms ~ 1500ms // 超时阈值:建议 800ms ~ 1500ms
if (now - last_msg_time_ > 800ms) std::chrono::steady_clock::time_point last;
{
std::lock_guard<std::mutex> lock(last_msg_time_mtx_);
last = last_msg_time_;
}
if (now - last > 800ms)
{ {
// 只在第一次进入“失活”时打印日志 // 只在第一次进入“失活”时打印日志
if (remote_alive_.exchange(false)) if (remote_alive_.exchange(false))
@ -286,7 +292,10 @@ class RemoteCtrlNode : public rclcpp::Node
LOG_INFO("[REMOTE] ✓ control recovered"); LOG_INFO("[REMOTE] ✓ control recovered");
} }
{
std::lock_guard<std::mutex> lock(last_msg_time_mtx_);
last_msg_time_ = std::chrono::steady_clock::now(); last_msg_time_ = std::chrono::steady_clock::now();
}
LOG_DEBUG("[REMOTE] Processing command: %s", cmd.c_str()); LOG_DEBUG("[REMOTE] Processing command: %s", cmd.c_str());
@ -399,6 +408,7 @@ class RemoteCtrlNode : public rclcpp::Node
std::atomic<bool> remote_authorized_{false}; // 是否允许远控(锁存) std::atomic<bool> remote_authorized_{false}; // 是否允许远控(锁存)
std::atomic<bool> remote_alive_{false}; // 是否活跃(心跳) std::atomic<bool> remote_alive_{false}; // 是否活跃(心跳)
std::chrono::steady_clock::time_point last_msg_time_; std::chrono::steady_clock::time_point last_msg_time_;
std::mutex last_msg_time_mtx_; // 保护 last_msg_time_
float current_feedback_angle_{0.0f}; float current_feedback_angle_{0.0f};