#ifndef NAVIGATION_H #define NAVIGATION_H #include "config.h" #include "motor_control.h" #include "sensor_handler.h" #include "mqtt_handler.h" // 可能需要访问机器人状态定义 // 循迹PID控制参数 (如果使用PID) #define KP 0.5 // 比例常数 #define KI 0.1 // 积分常数 #define KD 0.2 // 微分常数 // 导航状态,用于 moveToSpot 函数的内部状态管理 enum NavigationState { NAV_IDLE, NAV_FOLLOWING_LINE, NAV_AVOIDING_OBSTACLE, NAV_AT_SPOT_CANDIDATE, // 检测到侧方可能是充电桩 NAV_TARGET_REACHED, NAV_ERROR }; void navigation_setup(); // 主要的移动到指定车位函数 // target_spot_uid: 目标车位的ID (如 "001", "002") // current_robot_status_ptr: 指向主程序中当前机器人状态的指针,用于更新 // returns: true 如果成功到达, false 如果失败或被中断 bool navigation_move_to_spot(const char* target_spot_uid, RobotStatus* current_robot_status_ptr, String* current_location_ptr); // 内部辅助函数,也可以根据需要公开 void navigation_follow_line_once(); // 执行一次循迹逻辑并调整电机/舵机 bool navigation_check_obstacle(); // 检查前方障碍物 void navigation_handle_obstacle(); // 处理障碍物 (例如停止或简单避障) bool navigation_check_spot_arrival(const char* target_spot_uid); // 检查是否到达目标车位 // 简单的自计数车位识别逻辑 void navigation_reset_spot_counter(); int navigation_get_current_spot_count(); // 获取当前导航模块内部状态(用于调试或复杂逻辑) NavigationState navigation_get_state(); #endif // NAVIGATION_H