Appearance
无人机端到端飞控挑战赛
- 来源:
noai-train/联合训练/Day1/T2 drone-problem 袁鼎益 - 类型:Control / Simulation
- 原始资料:
Problem.md、baseline.ipynb、scene.py、contest_scene.py、auto_pid.py - 题面完整性:完整,但原目录版本管理较混乱
- 解法资料完整性:有 baseline 与仿真代码;参考解法可信度需结合源码判断
题面大意
任务是在仿真环境中训练一个端到端无人机飞控策略。输入包括目标物体二值 mask 和 19 维 IMU/状态向量,输出四个电机的归一化推力。测试环境中目标形状、重力参数和初始位置会变化,要求无人机尽快接近红色目标。提交包包含 eval.py 与 model.pt,评测器反复调用 Policy.act(mask, state_dict)。
数据特点
训练数据是专家控制器生成的演示轨迹,字段包括压缩 mask、状态、动作、episode metadata 与仿真配置。状态中包含速度、欧拉角、角速度、线/角加速度、飞行时间、目标可见性、速度模长、是否进入成功半径等信息。测试指标同时考察接近目标的最短距离和推理耗时,且模型参数量不超过 1000 万。
考点
核心是行为克隆和实时控制,而不是传统离线分类。参赛者需要把视觉 mask 中的目标位置/大小信息和 IMU 状态结合起来,学习专家控制规律,同时保证推理非常快。另一个考点是分布泛化:训练轨迹中某些起点、重力或目标形状可能覆盖不足,直接拟合动作容易在新场景失稳。
涉及知识点
- 行为克隆:用专家
(observation, action)监督学习策略。 - 视觉状态压缩:从 mask 提取目标中心、面积、边界框或用轻量 CNN 编码。
- 控制稳定性:动作平滑、PID 先验、姿态/速度反馈。
- 仿真泛化:按 episode 切分验证集,避免帧级随机切分造成泄漏。
- 实时推理:小模型、无冗余预处理、NumPy/PyTorch 设备切换控制。
解法思路
实用方案是不要完全依赖 CNN 从 mask 里“自己学几何”。先从 mask 计算目标质心、面积、可见性、bbox 宽高、相对画面中心偏移等低维视觉特征,再与 19 维状态拼接,输入小 MLP 预测四电机推力。这样既快又更稳。
若使用 CNN,可用极浅卷积网络处理低分辨率 mask,再拼接状态向量。训练时以专家动作为标签,用 MSE/Huber loss;验证必须按 episode 分组,观察闭环 rollout 中的最短距离,而不是只看单帧动作误差。可对动作做 clip,并在策略内部维护少量上一帧动作实现平滑,但要在 reset() 中清空状态。
可选/多种解法
纯特征 MLP:mask 几何特征 + 状态向量,训练快、推理快,适合本题实时性。
轻量 CNN + MLP:保留 mask 形状信息,对遮挡或复杂目标更鲁棒,但要控制参数与耗时。
混合控制:用学习模型预测目标方向或期望速度,再通过 PID/规则转成电机推力。这种方法稳定性好,但需要理解仿真动力学和电机映射。
特殊技巧
评测距离只看最短距离,因此策略不一定要完美悬停,关键是快速进入成功半径。可以在训练样本中提高接近目标阶段或可见目标阶段的权重;对目标不可见样本可退化为保持稳定/减速。把 mask 中心偏移转成相对控制误差,往往比原始图像更有泛化性。
调参优化
题解已有的关键点是闭环 rollout 指标和推理耗时。调参时先固定按 episode 切分的验证集,再比较状态 MLP、轻量 CNN+MLP、动作平滑系数、动作 clip 范围、Huber/MSE loss、学习率和 batch size;选择参数时以仿真最短距离与成功率为准,单帧动作 MSE 只能作辅助。若加入上一帧动作或内部状态,要调平滑系数并检查 reset() 是否正确清空,否则验证会虚高。模型规模和 mask 分辨率也要作为超参数,因为耗时会进入评分。
注意事项
题面提到公开场景和隐藏场景,不能只针对 evalA.csv 调参。act 接口必须返回长度为 4、范围合理的 np.ndarray。模型加载应在 Policy.__init__ 完成,不要在每帧重复加载。推理 100 次耗时直接影响 20 分性能分。
推广意义
这题体现了竞赛中端到端控制任务的典型取舍:学习策略不等于完全丢掉控制先验。视觉几何特征、状态反馈和轻量模型的组合,在机器人、无人机、自动驾驶小仿真中都比盲目大模型更可靠。