- 实际应用场景描述
场景:
在智慧社区中,快递公司部署了多台自动配送小车(AGV),负责将包裹从小区门口的快递柜送到居民楼下的指定位置。小区内行人较多(老人、儿童、遛狗者等),环境复杂,需要小车能够实时识别行人并优先避让,确保安全、平稳送达。
痛点:
-
行人安全:传统路径规划无法实时应对突然出现的行人。
-
动态环境:小区道路狭窄,障碍物多(车辆、宠物、儿童玩具)。
-
平稳性:急停或急转弯会影响包裹安全及用户体验。
-
效率与安全的平衡:既要快速送达,又要避免事故。
-
核心逻辑讲解
-
传感器数据采集
- 使用摄像头(YOLOv5 行人检测) + 超声波雷达(测距)。
-
行人检测与优先级判断
- 检测到行人 → 计算距离与速度 → 判断是否需要减速或绕行。
-
路径规划
- 静态地图(A* 算法) + 动态避障(DWA 动态窗口法)。
-
运动控制
- PID 控制速度,确保平稳加减速。
-
状态机管理
- 状态:等待任务 → 前往目标 → 避障 → 到达 → 返回。
-
代码模块化设计
delivery_robot/ ├── main.py # 主程序入口 ├── config.py # 配置文件 ├── perception/ # 感知模块 │ ├── pedestrian_detector.py │ └── sensor_fusion.py ├── planning/ # 规划模块 │ ├── static_planner.py │ └── dynamic_planner.py ├── control/ # 控制模块 │ └── motion_controller.py ├── utils/ # 工具函数 │ └── logger.py ├── README.md # 使用说明 └── requirements.txt # 依赖库
3.1 config.py
配置文件
ROBOT_MAX_SPEED = 1.0 # m/s ROBOT_MIN_SPEED = 0.2 DETECTION_CONFIDENCE = 0.6 OBSTACLE_DISTANCE_THRESHOLD = 1.5 # 米 PEDESTRIAN_PRIORITY_DISTANCE = 3.0 # 米
3.2 perception/pedestrian_detector.py
import cv2 import torch from config import DETECTION_CONFIDENCE
class PedestrianDetector: def init(self, model_path='yolov5s.pt'): self.model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_path)
def detect(self, frame):
results = self.model(frame)
pedestrians = []
for *xyxy, conf, cls in results.xyxy[0]:
if conf > DETECTION_CONFIDENCE and int(cls) == 0: # 类别0为person
pedestrians.append({
'bbox': [int(x) for x in xyxy],
'confidence': float(conf)
})
return pedestrians
3.3 planning/dynamic_planner.py
from config import OBSTACLE_DISTANCE_THRESHOLD, PEDESTRIAN_PRIORITY_DISTANCE
class DynamicPlanner: def plan(self, obstacles, pedestrians): # 简单策略:如果行人距离小于阈值,优先避让 for p in pedestrians: if p['distance'] < PEDESTRIAN_PRIORITY_DISTANCE: return "AVOID_PEDESTRIAN" for obs in obstacles: if obs['distance'] < OBSTACLE_DISTANCE_THRESHOLD: return "AVOID_STATIC" return "GO_STRAIGHT"
3.4 control/motion_controller.py
from config import ROBOT_MAX_SPEED, ROBOT_MIN_SPEED
class MotionController: def init(self): self.current_speed = ROBOT_MIN_SPEED
def adjust_speed(self, command):
if command == "AVOID_PEDESTRIAN":
self.current_speed = max(ROBOT_MIN_SPEED, self.current_speed * 0.5)
elif command == "AVOID_STATIC":
self.current_speed = max(ROBOT_MIN_SPEED, self.current_speed * 0.7)
else:
self.current_speed = min(ROBOT_MAX_SPEED, self.current_speed * 1.1)
return self.current_speed
3.5 main.py
from perception.pedestrian_detector import PedestrianDetector from planning.dynamic_planner import DynamicPlanner from control.motion_controller import MotionController import cv2 import time
def main(): detector = PedestrianDetector() planner = DynamicPlanner() controller = MotionController() cap = cv2.VideoCapture(0) # 摄像头
while True:
ret, frame = cap.read()
if not ret:
break
pedestrians = detector.detect(frame)
# 模拟行人距离(实际应结合深度信息)
for p in pedestrians:
p['distance'] = 2.5 # 假设值
obstacles = [] # 可扩展为雷达数据
command = planner.plan(obstacles, pedestrians)
speed = controller.adjust_speed(command)
print(f"Command: {command}, Speed: {speed:.2f} m/s")
time.sleep(0.1)
cap.release()
if name == "main": main()
- README.md
快递小车自动避人配送系统
基于 Python + YOLOv5 的智能避障配送程序,适用于智慧社区快递小车。
功能
- 实时行人检测(YOLOv5)
- 动态避障规划
- 平稳速度控制
- 模块化设计,易于扩展
安装
bash
pip install -r requirements.txt
运行
bash
python main.py
配置
修改 config.py 调整速度、检测阈值等参数。
-
使用说明
-
连接摄像头到设备。
-
安装依赖: "pip install -r requirements.txt"。
-
运行 "python main.py"。
-
观察终端输出的命令与速度,可扩展为实际控制电机。
-
核心知识点卡片
知识点 说明 YOLOv5 实时目标检测模型,用于识别行人 A* 算法 静态路径规划 DWA 动态窗口法,实时避障 PID 控制 平滑加减速 传感器融合 摄像头 + 雷达数据结合 状态机 管理机器人任务流程
- 总结
本项目展示了如何将机器学习(行人检测)、路径规划(静态+动态)、运动控制(PID)结合,构建一个实际可用的快递小车避人配送系统。
通过模块化设计,代码易于维护和扩展,适合作为智能车辆课程的实践案例。
未来可加入多车协同调度、5G 远程监控、强化学习优化路径等高级功能。
如果你需要,还可以生成 requirements.txt 和 Docker 部署方案,让这个项目可以直接跑在嵌入式设备上。
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!