距离标定

小车支持通过 YOLO 视觉检测 + 标定公式估算目标物体的真实距离。

标定公式

D = m / P + c
符号含义单位
D目标物体的真实距离cm
P检测框在画面中的像素尺寸(取宽高中的较大值)px
m标定乘数,由相机焦距和物体实际尺寸决定
c标定偏移,修正系统误差

标定参数

标定参数 mc 配置在 app/config.pyHardwareConfig 中:

@dataclass(frozen=True)
class HardwareConfig:
    # ...
    # 距离标定: D = m / P + c
    calib_m: float = 2671.82
    calib_c: float = -2.82

修改后重启小车服务即可生效。

如何标定:将目标物体(如网球)放在已知距离处,在画面中测量其像素尺寸 P,代入公式反算出适合自己场景的 mc 值。

获取标定参数

小车的 /api/camera/snapshot 接口在返回图片的同时,会携带当前的标定参数:

GET /api/camera/snapshot

响应:

{
  "image": "<base64 jpeg>",
  "width": 320,
  "height": 240,
  "format": "jpeg",
  "m": 2671.82,
  "c": -2.82
}
字段说明
image320×240 的 JPEG 图片(letterbox 等比缩放)
m标定乘数
c标定偏移

YOLO 距离仪表盘

项目提供了电脑端仪表盘 tests/server_dashboard.py,可从浏览器直观查看检测结果和距离估算。

启动

python tests/server_dashboard.py --model tests/model/tennis.onnx --port 8080

浏览器打开 http://localhost:8080,输入小车 IP 地址(如 192.168.4.1),点击「开始」即可。

工作流程

小车                         电脑端仪表盘
─────                        ─────────────
/api/camera/snapshot  ←───  拉取图片 + m, c
                             本地 YOLO 检测目标
                             计算 D = m / P + c
                             画框标注,显示距离

界面说明

区域内容
距离显示实时显示计算出的距离值(cm)
标定参数显示当前使用的 m、c 值
P 值显示检测框的像素尺寸
图片320×240 画面,检测框以绿色矩形标注

参数说明

参数默认值说明
--modeltennis.onnxYOLO ONNX 模型路径
--port8080本机监听端口

如果没有 YOLO 模型或模型加载失败,仪表盘仍可运行,仅显示图片和 m/c 参数,不进行检测。