Today we finished developing a robust buoy detection algorithm, primarily using HSV filtering and contour matching.
Here’s the high-level overview of the process:
- Load in a reference image of the buoy that provides a reference contour.
- On each camera frame received:
- Perform HSV filtering to filter out most pixels, except for the buoy, it’s reflection, and a few extraneous ones
- Find all contours in the image
- Filter out all contours except for the top 3 with the largest area
- Filter out contours that don’t have a close match with the reference contour. This usually only leaves the buoy and its reflection.
- If there are two contours left, filter out the one on the top. This usually only leaves the buoy.
- Convert the contour to a bounding box
- Of the last 10 detections:
- Filter out all bboxes whose distances to the average center of all bboxes were above two standard deviations from the average distance AND
- Filter out all bboxes whose areas were above one standard deviation from the average area
- Of the remaining detections, keep the most recent one
This has been proven to be a robust and reliable way to detect the buoy, whilst filtering out false positives and avoiding false negatives.
We also began to write the task planning code to complete the buoy task, but this is still a work in progress.
We also had persistent issues with the tether randomly disconnecting or being significantly slowed down (<10 MB/s). And the thruster arduino disconnected a few times.
No water leaks, due to copious amounts of grease (humidity actually kept going down throughout the pool test).