You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Udacity自动驾驶模拟器运行drive.py加载model.h5无响应求助

Udacity自动驾驶模拟器无响应问题排查方案

针对你训练完model.h5后,运行drive.py控制模拟器无响应的问题,结合提供的代码,从以下几个方向排查:

1. 图像预处理逻辑一致性

模型的输入必须和训练时的预处理完全匹配,否则会输出无效的控制指令:

  • 检查crop_image函数:你注释掉了x轴中心裁剪的代码(x_start = int(width/2)-int(img_width/2)),如果训练模型时对图像做了保留中间200宽度的裁剪,那必须恢复这部分逻辑,否则输入图像的宽度和模型预期不匹配,导致预测的转向角无效
  • 确认训练代码中是否有其他预处理步骤(比如图像归一化、RGB转YUV颜色空间转换),如果有,必须在drive.py的telemetry函数中同步添加,示例:
    # 添加归一化和颜色空间转换示例
    image_array = image_array / 255.0  # 归一化到0-1区间
    image_array = cv2.cvtColor(image_array, cv2.COLOR_RGB2YUV)
    
  • 可以在crop_image后添加print(image_array.shape),对比训练时模型的输入形状,确保维度完全一致

2. SocketIO连接验证

模拟器和drive.py的通信依赖SocketIO,连接异常会导致控制指令无法传递:

  • 确认模拟器已切换到自动驾驶模式(Manual模式下不会接收drive.py的控制信号)
  • 查看运行drive.py的终端,是否输出了connect [sid]字样:
    • 如果没有输出,说明连接未建立,检查端口是否冲突(默认4567),可以修改eventlet.listen(('', 4567))中的端口号,同时在模拟器设置中同步修改
    • 如果有连接日志但无后续steering_angle和throttle打印,说明telemetry函数未触发,可能是模拟器的图像传输异常

3. 控制指令有效性测试

临时简化控制逻辑,验证指令是否能传递到模拟器:

  • 在telemetry函数中,替换掉模型预测和PI控制器的逻辑,改用固定值测试:
    steering_angle = 0.0  # 固定直行
    throttle = 0.3  # 固定油门
    
    如果车辆能正常移动,说明问题出在模型预测或PI控制器逻辑上;如果还是无响应,说明通信或模拟器设置有问题
  • 检查终端打印的steering_angle和throttle数值,如果数值异常(比如NaN、极大值),说明模型预测出错,回到图像预处理或模型加载环节排查

4. 模型加载与版本兼容性

即使训练无报错,模型加载可能存在隐性问题:

  • 代码中已做Keras版本检查,如果版本不一致,建议安装和训练时完全相同的Keras版本,避免模型加载后的兼容性问题
  • 尝试用model = load_model(args.model, compile=False)加载模型,跳过编译步骤,部分版本差异可以通过这种方式规避

5. PI控制器参数调整

当前设置的set_speed = 30,初始状态下PI控制器计算的油门可能不足以启动车辆:

  • 临时降低set_speed到10,或者直接设置固定油门值测试,确认车辆是否能正常启动
  • 检查终端打印的throttle数值,如果接近0,说明控制器输出的油门太小,调整SimplePIController的Kp和Ki参数(比如增大Kp到0.2)

内容的提问来源于stack exchange,提问作者Hamza Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:45:43