基于中南大学FYT视觉24赛季自瞄开源的考核题

发布时间:2026/9/6 2:37:35
基于中南大学FYT视觉24赛季自瞄开源的考核题 (AI辅助生成)1. 从图像到装甲板消息的完整链路题目请结合本项目说明一帧图像如何最终变成 armor_detector/armors 消息。每一步可能产生什么误检或漏检追问- binary_thres 调大或调小分别有什么影响- 灯条颜色判断使用了哪些通道- 如果红蓝颜色完全反了你如何确认是算法问题还是图像编码问题- 如何利用 debug_lights、debug_armors、binary_img 定位问题评分点- 能说出灰度化、二值化、轮廓提取、灯条筛选、灯条配对、数字分类、角点矫正、PnP。- 注意到源码按 RGB 通道理解图像但 ROS 相机可能发布 bgr8。- 能提出通过检查 sensor_msgs/Image.encoding、保存原图、单元测试颜色样本来验证。- 不只是回答“调阈值”而是能说明参数与误检类型的关系。参考[armor_detector.cpp](\src\\rm_auto_aim\\armor_detector\\src\\armor_detector.cpp)参考答案①预处理RGB-灰度图用固定阈值二值化②灯条检测提取外部轮廓cv::findContours;Light对象-isLight()-统计红蓝像素差值判断颜色center.x排序输出灯条序列)③装甲板匹配遍历筛选isArmor()长度比中心距角度检查干扰containLight;生成Armor对象④数字识别提取数字区域-分类classify-角点修正correctCorners⑤输出返回std::vectorArmor2. PnP 双解、角点矫正与 BA 优化题目本项目使用 solvePnPGeneric同一块平面装甲板可能得到两个位姿解。请解释双解产生的原因并说明本项目如何选择最终解。追问- 重投影误差、装甲板 Roll、灯条倾斜方向分别起什么作用- PCA 角点矫正解决了什么问题- BA 优化依赖什么先验什么情况下可能把结果优化坏- 你会如何用标定板或实车数据验证 PnP 是否可靠评分点- 理解平面目标的位姿歧义而不是简单说“取误差小的”。- 能结合代码说明两个解的重投影误差比较、Roll 约束和灯条倾斜方向判定。- 知道角点顺序和像素角点误差会直接影响深度、Yaw 和弹道。- 能提出重投影误差统计、不同距离和视角测试、TF 外参验证等方法。参考[armor_pose_estimator.cpp](\src\\rm_auto_aim\\armor_detector\\src\\armor_pose_estimator.cpp)参考答案原因单目图像看装甲板既可以朝向相机也可以翻转后朝向相机两者在图像上的投影几乎相同数学上表现为PnP方程有两个实数解对应旋转矩阵的两个不同朝向。选择策略①计算重投影误差若误差比error2/error13.0 说明一个解明显更优不做强制选择保留原顺序②将旋转矩阵转换到云台系计算roll角如果任一解的 roll角 10°说明该解不合理装甲板不应严重倾斜不进行交换。③计算左右灯条的平均倾斜角 angle90°偏移angle 0装甲板左倾angle 0装甲板右倾根据物理规律左倾 → 装甲板 yaw 应为负右倾 → 装甲板 yaw 应为正若当前两个解的 yaw 符号与上述规则不匹配则交换两个解④前哨站装甲板number outpost的倾斜角取反处理3. EKF 跟踪与装甲板跳变处理题目本项目的机器人状态量为[x_c, v_xc, y_c, v_yc, z_c, v_zc, yaw, v_yaw, r, d_zc]观测量为[x, y, z, armor_yaw]请解释为什么要跟踪“机器人中心”而不是直接跟踪当前装甲板位置并说明装甲板旋转跳变时的处理流程。追问- max_match_distance 和 max_match_yaw_diff 各自用于什么- DETECTING、TRACKING、TEMP_LOST、LOST 如何转换- 为什么需要对 Yaw 做连续化处理- 临时遮挡时应该优先调匹配阈值还是调 EKF 的过程噪声和观测噪声评分点- 理解多装甲板旋转模型以及 r1/r2/d_za/d_zc 的意义。- 能说明同编号匹配、位置预测、Yaw 跳变、半径交换和状态重置。- 知道角度不能直接做普通减法需要处理 pi/-pi 跨越。- 能通过高速旋转、短时遮挡、编号误识别等场景分析参数影响。参考[armor_tracker.cpp](\src\\rm_auto_aim\\armor_solver\\src\\armor_tracker.cpp)参考答案核心原因① 物理一致性机器人车辆是一个刚体其中心位置在运动学上是平滑连续的匀速直线运动/转弯而装甲板是固定在机器人表面的点随机器人旋转而绕中心做圆周运动在图像中会周期性跳变。② 预测稳定性状态量中包含 (x_c, y_c) 机器人中心和 r 旋转半径可以在装甲板被遮挡或漏检时用机器人中心半径预测当前应出现的装甲板位置避免因装甲板切换导致的位姿突变使 Kalman 滤波保持平滑③ 观测量关联虽然实际观测到的是装甲板 (x, y, z, yaw)但状态方程描述的是机器人中心的运动匀速模型两者通过几何关系 armor_pos center_pos r * (cos yaw, sin yaw) 关联这是 EKF 更新中的观测模型。装甲板旋转跳变处理流程当机器人原地旋转时同一个 id 的装甲板会在某个时刻从一侧“跳变”到另一侧例如从右侧突然出现在左侧对应函数 handleArmorJump()触发条件-只有一个同 id 装甲板被检测到-当前 yaw 与上一帧预测 yaw 的差值 0.4 rad约 23°处理步骤① 更新 yaw将目标状态中的 yaw 直接设为当前观测到的装甲板 yaw。② 交换半径与高度偏移仅 NORMAL_4 装甲板-四块装甲板成对分布在机器人两侧旋转 180° 后对面的装甲板半径相同但高度可能有偏差-交换 r 和 another_r同时更新 d_zc装甲板高度偏移-这样状态中的“中心位置”保持不变只是当前跟踪的装甲板换到了另一侧③ 状态异常修正-计算当前装甲板位置与由状态推断的位置的距离-若距离 max_match_distance_说明状态严重错误直接重置机器人中心位置到装甲板位置 半径偏移速度归零④ 将修正后的状态写回 EKF继续预测下一帧。4. 延迟预测与弹道补偿计算题目当前帧时间戳比系统当前时间早 0.10 s目标位置为 (6, 0, 0.5) m子弹速度 25 m/s重力加速度 10 m/s²忽略空气阻力prediction_delay0.10 s。请说明系统应该预测多长时间并估算理想弹道下的 Pitch 角和飞行时间。参考结果- 预测时间约为0.10 飞行时间 0.10- 理想弹道飞行时间约 0.24 s。- 总预测时间约 0.44 s。- 理想 Pitch 约 7.5°不包含机械偏置和手动补偿。追问- prediction_delay 和 controller_delay 有什么区别- 为什么目标高速横移时少量时间误差也会导致明显脱靶- isOnTarget() 中的射击窗口由什么决定- 如何实测并标定真实弹速、空气阻力和系统延迟评分点- 能读懂源码中“观测延迟 子弹飞行时间 预测延迟”的计算。- 知道 controller_delay 主要补偿云台控制执行延迟不应混入目标选板逻辑。- 能区分几何瞄准角、弹道补偿角和机械安装偏置。- 能提出时间戳记录、弹速测试、固定距离分组射击等标定方法。参考[armor_solver.cpp](\src\\rm_auto_aim\\armor_solver\\src\\armor_solver.cpp)、[trajectory_compensator.cpp](\src\\rm_utils\\src\\math\\trajectory_compensator.cpp)参考答案预测时间系统预测的时间为总预测时间 图像传输/处理延迟 子弹飞行时间 prediction_delay 0.10 飞行时间 0.10以目标距离约 6m、理想弹道飞行时间约 0.24s 计算**总预测时间约 0.44s**。即系统会用当前目标位置加上 0.44s 的运动外推量去瞄准。概念区分参数作用位置prediction_delay补偿图像/感知链路中的固定延迟例如相机曝光、算法处理耗时在求解**目标位置**时加入影响选板和瞄准点controller_delay补偿云台电机从接收指令到实际转到位的时间延迟仅在 TRACKING_ARMOR 状态加入**不参与选板逻辑**只微调最终瞄准角度简单说prediction_delay 补偿“看到之前”的延迟controller_delay 补偿“动起来”的延迟。高速横移时时间误差的影响目标高速横移时**位置对时间的导数很大**。即使时间误差只有几十毫秒位置误差也 速度 × 时间误差。若目标横向速度 5m/s0.1s 误差就带来 **0.5m** 的脱靶量远大于装甲板大小因此必须精确补偿。射击窗口isOnTarget射击窗口由**装甲板尺寸**和**目标距离**共同决定窗口角度 arctan(装甲板半宽 / 距离)- 距离越近窗口越大视角上装甲板占画面比例大- 设置了最小 1° 的窗口下限防止太远时窗口过小导致永远打不中标定方法实测方案需标定量方法真实弹速固定距离如 5m射击测多次飞行时间反推速度空气阻力在不同距离3m、5m、8m、10m分别射击并记录实际落点拟合阻力系数系统延迟记录相机曝光时间戳与云台实际转动时刻的差值或通过高速相机拍摄“触发-响应”过程核心思路**现场实测 固定变量分组测试**而非纯理论计算。5. 实弹场景中的端到端排障题目现象如下- armor_detector/armors 检测稳定- armor_solver/target 位置和速度看起来正常- 云台能够跟踪目标- 6 米距离连续射击竖直方向稳定偏高约 10 cm。请给出你的排查顺序并说明每一步如何设计实验。参考答案优先检查1. 相机内参、畸变参数和 PnP 重投影误差2. 相机到云台、云台到 odom 的 TF 外参和坐标轴方向3. 图像、目标、云台指令的时间戳4. 实际弹速、重力、空气阻力参数5. 枪管与相机/云台的机械安装偏置6. 手动角度补偿表和控制指令单位7. fire_advice 射击窗口是否过宽或过窄。加分项能发现配置与源码中的潜在问题- 配置写的是 solver.compenstator_type源码读取的是 solver.compensator_type- 配置写的是 pitch_offset源码读取的是 solver.angle_offset- max_tracking_v_yaw 在源码中按弧度每秒比较配置值 60.0 是否合理需要重新确认。优秀回答应包含记录 /target、/cmd_gimbal、TF 和弹着点数据一次只改变一个变量按距离和目标高度建立误差表而不是凭感觉反复调参。