task_manager 是任务状态的唯一权威
This commit is contained in:
parent
875594c213
commit
e94b9d2e89
@ -21,7 +21,6 @@ volatile std::sig_atomic_t signal_received = 0;
|
||||
MQTTManager mqtt_manager;
|
||||
TaskManager task_manager;
|
||||
int last_status = 0;
|
||||
TaskStatus status_up = TaskStatus::PENDING;
|
||||
std::thread status_report_thread;
|
||||
|
||||
// =============== 动态 MQTT topic + 身份控制 ===============
|
||||
@ -563,37 +562,28 @@ class TaskManagerNode : public rclcpp::Node
|
||||
LOG_INFO_THROTTLE(1000, "收到任务状态更新: ID=%d, Status=%d, Name=%s", msg->task_id, msg->task_status,
|
||||
msg->task_name.c_str());
|
||||
|
||||
if (msg->task_status >= TaskStatus::PENDING && msg->task_status <= TaskStatus::PATH_FINISHED)
|
||||
{
|
||||
status_up = static_cast<TaskStatus>(msg->task_status);
|
||||
|
||||
// 如果当前路径已完成,检查是否有下一条路径
|
||||
if (status_up == TaskStatus::PATH_FINISHED)
|
||||
// 只有 PATH_FINISHED 需要 task_manager 处理(切换路径或完成任务)
|
||||
// 其他状态(RUNNING/PENDING/COMPLETED)仅用于日志,不更新 task_manager 内部状态
|
||||
if (msg->task_status == TaskStatus::PATH_FINISHED)
|
||||
{
|
||||
LOG_INFO("当前路径执行完成,检查下一条路径...");
|
||||
if (task_manager.hasNextRoute())
|
||||
{
|
||||
LOG_INFO("发现下一条路径,准备切换...");
|
||||
// 切换到下一条路径
|
||||
if (task_manager.switchToNextRoute())
|
||||
{
|
||||
// 获取新路径并复制
|
||||
ROUTE_INFO nextRoute = task_manager.getCurrentRouteInfo();
|
||||
string filepath = "routes/" + nextRoute.fileName;
|
||||
LOG_INFO("切换到新路径: %s (%s)", nextRoute.routeName.c_str(), nextRoute.fileName.c_str());
|
||||
|
||||
// 复制文件到 gps_load_now.txt
|
||||
std::ifstream src(filepath, std::ios::binary);
|
||||
std::ofstream dst("gps_load_now.txt", std::ios::binary);
|
||||
if (src && dst)
|
||||
{
|
||||
dst << src.rdbuf();
|
||||
LOG_INFO("路径文件复制成功: %s -> gps_load_now.txt", nextRoute.fileName.c_str());
|
||||
|
||||
// 同时更新两个状态,保持任务继续运行
|
||||
task_manager.setTaskStatus(1);
|
||||
task_manager.updateCurrentTaskStatus(TaskStatus::RUNNING);
|
||||
LOG_INFO("任务状态已更新为 RUNNING,等待PL层重载新路径");
|
||||
// task_status_ 保持为 1 (RUNNING),不修改
|
||||
LOG_INFO("等待PL层重载新路径");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -613,26 +603,7 @@ class TaskManagerNode : public rclcpp::Node
|
||||
task_manager.updateCurrentTaskStatus(TaskStatus::COMPLETED);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果不是 PATH_FINISHED 状态,直接同步更新任务管理器的状态
|
||||
// 但忽略来自PL的COMPLETED状态,避免stop后状态被覆盖
|
||||
if (msg->task_status != TaskStatus::COMPLETED)
|
||||
{
|
||||
LOG_INFO_THROTTLE(5000, "更新任务状态: %d", msg->task_status);
|
||||
task_manager.setTaskStatus(msg->task_status);
|
||||
task_manager.updateCurrentTaskStatus(status_up);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_DEBUG("忽略PL的COMPLETED状态,避免stop后状态被覆盖");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_WARN("收到无效的任务状态: %d", msg->task_status);
|
||||
}
|
||||
// 其他状态(RUNNING/PENDING/COMPLETED)不做处理,仅用于 MQTT 上报
|
||||
}
|
||||
|
||||
rclcpp::TimerBase::SharedPtr timer_;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user