One of the first tasks our team worked on was buoy detection. Most of the navigation courses in Roboboat require us to identify buoys and then figure out how to navigate them. Using a ZED camera, we developed the following algorithmic steps to properly identify buoys on the course:
Performs erosion with a segmentation kernel
Performs dilation with the same segementation kernel
Converts the image to HSV
Gets the mask for each color range we are looking at(red, green, yellow)
Generates a bounding box for each disjoint blob in the color range mask
Our controller is a Pixhawk 4 running Ardupilot. It takes in GPS waypoint coordinates and headings and handles the motor commands to achieve the desired position and heading. For the two main navigation tasks, we plan to first identify them and head to the position shown in each of the above figures on the left. Then, we will run through pre-planned paths that are adjusted in realtime by a local planner for obstacle avoidance. The preplanned paths are shown visualized in RVIZ in the above figures on the right.