基于 Arduino Nano 的 AI 巡线迷宫机器人
所需元件
| 元件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano | 1 | 主控 |
| 蓝牙主从一体模块 (HC-05/06 类) | 1 | 无线调参/手动控制 |
| 红外循迹模块 (5 路阵列 + 2 路侧向) | 1 | 共 7 路 IR 传感器 |
| 360° 连续旋转舵机 | 2 | 差速驱动 |
| 4.8V 电池组 (NiMH 或 2S LiFe) | 1 | 供电 |
设计思路
从简单的巡线升级为具备“迷宫求解智能”的机器人。核心思想:
- PID 巡线:5 路传感器读取偏差,计算 PID 输出控制左右舵机速差
- 路口识别:2 路侧向传感器 + 5 路阵列状态机,判断十字、T字、左/右转、直行、死胡同、终点
- 左手法则求解:首次探索记录路径 (L/R/S/B),回溯简化路径
- 二次优化:按简化路径全速通过,不再探索
- 蓝牙调参:实时发送/接收 Kp/Ki/Kd,手动模式辅助调试
传感器布局与状态定义
5 路巡线传感器 (LFS0–LFS4,从左到右)
数字输出:检测到黑线输出 1,否则 0。中心传感器 (LFS2) 对准线时为 1。典型模式:
10000 11000 01000 01100 00100 00110 00010 00011 00001 00000 11111
-4 -3 -2 -1 0 +1 +2 +3 +4 无线 全线
误差值 error 映射为 -4…+4,全 1 判定为 CONT_LINE (路口/终点),全 0 判定为 NO_LINE (死胡同)。
侧向传感器
- 远左/远右模拟量读取,阈值
THRESHOLD = 150判断是否检测到横线 - 用于区分“直行+左/右转”路口
迷宫求解算法:左手法则
路口类型与动作映射
| 路口类型 | 可能动作 | 左手法则强制动作 |
|---|---|---|
| 十字 | 左/右/直 | 左转 |
| T字 | 左/右 | 左转 |
| 仅右转 | 右转 | 右转 |
| 仅左转 | 左转 | 左转 |
| 直行或左 | 左/直 | 左转 |
| 直行或右 | 右/直 | 直行 |
| 死胡同 | 掉头 | 掉头 (B) |
| 终点 | 停止 | 停止 |
“多跑一寸”消歧策略
遇到 CONT_LINE 或侧向触发时,先按 PID 前进一小段 (extraInch ≈ 200 ms),再读传感器:
- 仍是全线 → 十字 → 记录 'L'
- 非全线 → T字 → 记录 'L'
- 侧向再次触发 → 终点 → 停止
同理处理左/右转消歧。
路径简化
记录路径字符串 (如 LBL),遇到 ...B... 即回溯简化:
LBL → S LBS → R RBL → B SBL → L 等价角度模 360° 映射
简化后路径长度减半以上,二次运行极快。
代码模块结构
- RobotDefines.h:引脚、常量、PID 参数、路径数组、模式枚举
- sensorFunctions:
readLFSsensors()读取 7 路传感器、计算error、设定mode - motorFunctions:舵机微秒脉冲控制、PID 输出映射、转向/前进封装
- generalFunctions:LED 闪烁、蓝牙指令解析、手动控制、PID 参数无线下发
- mazeSolve():首次探索状态机
- mazeOptimization():二次按简化路径执行
关键代码片段
PID 计算
void calculatePID() {
P = error;
I += error;
D = error - previousError;
PIDvalue = Kp*P + Ki*I + Kd*D;
previousError = error;
}
电机 PID 控制
void motorPIDcontrol() {
int left = 1500 - (iniMotorPower + adj) - PIDvalue;
int right = 1500 + iniMotorPower - PIDvalue;
left = constrain(left, 1000, 2000);
right = constrain(right, 1000, 2000);
leftServo.writeMicroseconds(left);
rightServo.writeMicroseconds(right);
}
蓝牙调参命令
// 手机串口助手发送:
p50 // 设 Kp=50
i0 // 设 Ki=0
d20 // 设 Kd=20
g // 进入自动巡线
s // 停止
f/b/l/r // 手动前/后/左/右
调试建议
- 先在直线上调 PID,令
Kp从小增大至微震荡,再加Kd抑制超调,Ki通常置 0 - 侧向传感器阈值需实测校准,避免环境光干扰
- 舵机零点校准:
writeMicroseconds(1500)应静止,微调adj - 电池电压跌落会导致舵机扭矩不足,建议加稳压或监测电压
扩展方向
- 引入 OpenMV/ESP32-CAM 视觉识别,替代红外阵列
- 加装超声波/ToF 实现避障与墙跟随
- 上位机可视化地图构建 (SLAM 入门)
- 迁移至 ROS 2 + micro-ROS,实现分布式控制
制造工艺
- 人造雪机如何改变冬季运动
- 树莓派避障机器人构建:分步指南
- 基于树莓派的视觉避障移动机器人
- Star Automation 书法机器人亮相 NPE2018:三轴伺服头演绎日本书法
- Wittmann Battenfeld发布WX153:面向大吨位注塑自动化的先进机器人线
- 汉诺威工业博览会:Bosch 发布 AI 驱动制造解决方案
- FANUC 扩充 SCARA 机器人阵容:六款新品,3-20 kg 负载,400-1100 mm 作业半径
- AI驱动机器人:前沿智能机器
- AI赋能机器人通过触觉识别90多种物体
- 人工智能:效益、风险与行业影响
- 大数据与AI:数字化转型背后的协同效应
- 零售业人工智能:实证收益,非昙花一现