我的机器人课程作业

AI Robotics 课程作业整理

View project on GitHub

Week 12 作业记录:手机摄像头、ArUco 识别与距离测量

1. 学习目标

  • 了解手机摄像头接入电脑或 WSL 的基本思路。
  • 使用 OpenCV 识别 ArUco 标记。
  • 理解相机标定、像素坐标和实际距离估计之间的关系。

2. 课程重点

2.1 手机摄像头接入

手机摄像头可以作为临时实验相机,用于采集实时图像。接入后,OpenCV 可以通过视频流或摄像头编号读取画面。

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

2.2 ArUco 标记识别

ArUco 是一种带 ID 的方形视觉标记。OpenCV 可以检测标记角点和编号:

dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)
parameters = cv2.aruco.DetectorParameters()
detector = cv2.aruco.ArucoDetector(dictionary, parameters)
corners, ids, rejected = detector.detectMarkers(frame)

2.3 距离测量思路

如果已知 ArUco 标记的真实边长,并完成相机标定,就可以利用标记在图像中的大小估计相机到标记的距离。

关键数据:

  • 标记真实尺寸
  • 相机内参矩阵
  • 畸变参数
  • 图像中检测到的四个角点

3. 实验流程

  1. 准备 ArUco 标记并打印或在屏幕显示。
  2. 使用手机摄像头采集画面。
  3. OpenCV 读取视频帧。
  4. 检测 ArUco 角点和 ID。
  5. 根据标记尺寸和相机参数估算距离。
  6. 在画面上绘制检测框、ID 和距离信息。 scan.jpg

    4. 核心理解

  • 图像检测得到的是像素坐标,不是直接的真实世界距离。
  • 相机标定的作用是建立像素坐标与相机坐标之间的关系。
  • ArUco 标记适合作为机器人视觉实验中的定位参考物,因为形状明确、ID 可识别、角点容易检测。

5. 问题与解决

  • 检测不到标记:检查光照、清晰度、标记是否完整出现在画面中。
  • 距离抖动:可以连续多帧取平均,减少噪声。
  • 摄像头打不开:确认摄像头权限、设备编号和 WSL/Docker 是否能访问摄像头。

6. 本周总结

本周把 OpenCV 图像处理推进到视觉测量任务,理解了从“看到标记”到“估计距离”的完整链路。这部分内容可以与后续机器人导航、视觉抓取和目标跟踪结合。