8.1 KiB
8.1 KiB
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_PINMOTOR_RIGHT_IN3_PIN,MOTOR_RIGHT_IN4_PIN,MOTOR_RIGHT_ENB_PINSERVO_PINULTRASONIC_FRONT_TRIG_PIN,ULTRASONIC_FRONT_ECHO_PINULTRASONIC_SIDE_TRIG_PIN,ULTRASONIC_SIDE_ECHO_PINTCRT5000_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()中轮询其状态来执行。但这会显著增加复杂性。 - 代码注释和可读性: 在您修改和添加代码时,保持良好的注释习惯。
祝您项目顺利!