Files
mqtt_power/esp32_robot_firmware/NEXT_STEPS.md

126 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ESP32 机器人固件 - 后续步骤与待办事项
本文档旨在记录在当前固件版本基础上,您需要完成的配置、代码调整以及后续的测试和开发步骤。
## 1. 关键配置与代码调整 (必须)
在烧录和测试之前,请务必完成以下配置和代码检查/调整:
### 1.1. `config.h` - 硬件与网络配置
打开 `esp32_robot_firmware/config.h` 文件,根据您的实际情况修改以下宏定义:
* **WiFi 配置**:
* `WIFI_SSID`: 您的WiFi网络名称。
* `WIFI_PASSWORD`: 您的WiFi密码。
* **MQTT Broker 配置**:
* 检查 `MQTT_BROKER_HOST`, `MQTT_BROKER_PORT` 是否适用于您的MQTT代理。
* 如果您的代理需要认证,请更新 `MQTT_USERNAME``MQTT_PASSWORD`
* **设备唯一标识符**:
* `DEVICE_UID`: **极其重要**必须与您在后端系统中注册的机器人ID完全一致。
* **硬件引脚定义**:
* `MOTOR_LEFT_IN1_PIN`, `MOTOR_LEFT_IN2_PIN`, `MOTOR_LEFT_ENA_PIN`
* `MOTOR_RIGHT_IN3_PIN`, `MOTOR_RIGHT_IN4_PIN`, `MOTOR_RIGHT_ENB_PIN`
* `SERVO_PIN`
* `ULTRASONIC_FRONT_TRIG_PIN`, `ULTRASONIC_FRONT_ECHO_PIN`
* `ULTRASONIC_SIDE_TRIG_PIN`, `ULTRASONIC_SIDE_ECHO_PIN`
* `TCRT5000_LEFT_PIN`, `TCRT5000_RIGHT_PIN` (以及您可能添加的更多循迹传感器引脚)
* `RELAY_PIN`
* **请仔细核对这些引脚号是否与您ESP32板子上实际连接的硬件引脚一致。**
* **业务逻辑参数**:
* `SIDE_ULTRASONIC_SPOT_THRESHOLD_CM`: 侧向超声波检测到充电桩的距离阈值,根据实际情况调整。
* `NUM_CHARGING_SPOTS``SPOT_ID_1`, `SPOT_ID_2`, `SPOT_ID_3`: 根据您的充电桩数量和ID定义进行调整。
### 1.2. `navigation.cpp` - 循迹逻辑 (`navigation_follow_line_once`)
当前 `navigation_follow_line_once` 函数中的循迹逻辑非常基础,**很可能无法直接在您的机器人上良好工作**。您需要:
* **大幅调整**: 根据您的循迹传感器类型(模拟/数字)、数量、安装位置以及机器人的机械结构(轮子、电机特性)来修改逻辑。
* **参数校准**: `base_speed`, `turn_speed_diff`, `servo_turn_angle_small`, `servo_turn_angle_large` 等参数需要反复实验和校准。
* **考虑PID控制**: 为了实现更平滑、更准确的循迹强烈建议研究并实现PID比例-积分-微分控制算法。代码中已预留了PID相关的变量和注释框架。
* **脱线处理**: 当前脱线处理很简单(停止),您可能需要实现更复杂的逻辑,如原地旋转搜索线路。
### 1.3. `sensor_handler.cpp` - 传感器校准
* **TCRT5000循迹传感器**:
* 打开 `sensor_handler.h`,校准 `TCRT5000_THRESHOLD` 的值。这个值取决于您的传感器、巡的线的颜色、地面的颜色。
*`sensor_handler.cpp``is_on_line` 函数中,确认 `return sensor_value > threshold;` 这行(或您修改后的逻辑)是否正确反映了传感器在黑线上和不在黑线上的读数关系(是值变大还是变小)。
* **超声波传感器**:
* 测试 `get_ultrasonic_distance_cm` 函数的准确性。`pulseIn` 的超时时间可能需要根据实际最大探测距离调整。
### 1.4. `relay_control.cpp` - 继电器逻辑
* 确认 `relay_setup()``digitalWrite(RELAY_PIN, LOW);` 是否使继电器处于断开状态。有些继电器模块可能是高电平触发断开。相应地调整 `relay_start_charging()``relay_stop_charging()` 中的 `HIGH`/`LOW`
## 2. 后续开发与测试步骤
完成上述配置和初步代码调整后,按以下步骤进行测试和进一步开发:
### 2.1. 模块化硬件测试与校准
逐个模块进行测试,确保硬件按预期工作:
* **电机 (`motor_control.cpp`)**:
* 测试 `motor_move_forward()`, `motor_move_backward()`, `motor_stop()`
* 测试 `motor_turn_left()`, `motor_turn_right()`,观察差速和舵机辅助转向的效果。调整速度、转向强度和舵机角度参数。
* 确保 `set_motor_speed()``MOTOR_LEFT_IN1_PIN` 等引脚的 `HIGH`/`LOW` 组合能正确控制电机方向。
* **舵机 (`motor_control.cpp`)**:
* 测试 `servo_set_angle()`, `servo_center()`。确认舵机转动范围和中心位置是否准确。
* **传感器 (`sensor_handler.cpp`)**:
* **超声波**: 独立测试前方和侧方超声波传感器,验证距离读数的准确性。
* **TCRT5000循迹**: 重点测试 `get_line_follow_values()`,手动移动传感器或机器人,观察 `left_on_line``right_on_line` 是否能正确反映传感器相对于引导线的位置。
* **继电器 (`relay_control.cpp`)**:
* 测试 `relay_start_charging()``relay_stop_charging()` 是否能正确控制继电器(以及与之关联的任何指示灯或设备)。
### 2.2. 导航逻辑调试 (`navigation.cpp`)
这是最复杂且耗时的部分:
* **循迹 (`navigation_follow_line_once`)**:
* 将机器人放在引导线上,逐步调试循迹逻辑。
* 从低速开始,逐步增加速度。
* 细致调整转向逻辑和参数,目标是让机器人能够平稳、准确地跟随线路。
* 处理各种情况:直线、弯道、可能的交叉点(如果场景中有)。
* **车位检测 (`navigation_check_spot_arrival`)**:
* 测试侧向超声波传感器检测充电桩(或模拟物)的逻辑。
* 校准 `SIDE_ULTRASONIC_SPOT_THRESHOLD_CM`
* 测试 `SPOT_DEBOUNCE_TIME_MS` 去抖逻辑,确保路过一个桩时只计数一次。
* 验证 `detected_spot_count` 是否能正确累计。
* **避障 (`navigation_check_obstacle`, `navigation_handle_obstacle`)**:
* 测试前方超声波传感器检测障碍物的逻辑。
* 当前的 `navigation_handle_obstacle` 只是停止,您可以根据需求实现更复杂的避障策略(如后退、转向绕行等)。
* **完整导航 (`navigation_move_to_spot`)**:
* 测试从起点到指定目标充电桩的完整导航过程。
* 观察状态转换、车位计数、最终到达判断是否都符合预期。
* 测试导航超时逻辑 (`MAX_NAV_TIME_MS`)。
### 2.3. 状态同步与MQTT测试 (`mqtt_handler.cpp`, `esp32_robot_firmware.ino`)
* **连接**: 确保ESP32能成功连接WiFi和MQTT Broker。
* **指令接收**: 从后端或使用MQTT客户端工具发送指令MOVE, STOP_CHARGE检查 `handle_mqtt_command` 是否能正确解析并触发相应动作。
* **ACK上报**: 验证机器人是否能正确上报ACK消息包括成功和失败的情况。
* **状态上报**:
* 监控机器人定期上报的状态消息。
* 验证 `current_robot_status`, `robot_current_location`, `robot_battery_level` 等字段是否准确。
* 特别关注 `CHARGING` 状态下的 `durationSeconds``spotId`,以及 `FAULTED` 状态下的 `errorCode``message`
* **心跳**: 检查心跳消息是否按预期发送。
### 2.4. 整体联调与鲁棒性测试
* 将所有模块集成起来,进行完整的业务流程测试:
* 接收移动指令 -> 移动到车位 -> 到达后自动开始充电 -> 状态更新 -> 接收停止充电指令 -> 停止充电 -> 状态更新。
* 测试各种边界条件和异常情况:
* WiFi/MQTT断开重连。
* 导航中途遇到障碍。
* 目标车位不存在或无法到达。
* 电池电量模拟变化是否合理。
* 长时间运行测试观察系统稳定性和资源占用情况虽然在ESP32上较难直接监控内存
## 3. 代码结构与进一步优化建议
* **错误处理**: 当前的错误处理还比较基础,可以考虑更细致的错误码和错误信息。
* **状态机完善**: `esp32_robot_firmware.ino` 中的主循环可以进一步优化为更清晰的状态机。
* **非阻塞操作**: `navigation_move_to_spot` 目前是阻塞函数。对于更复杂的应用,可以考虑将其改造为非阻塞的,通过在 `loop()` 中轮询其状态来执行。但这会显著增加复杂性。
* **代码注释和可读性**: 在您修改和添加代码时,保持良好的注释习惯。
祝您项目顺利!