Functional Architecture

In the functional architecture, we have four major blocks for SLAM, Goal Generation, Navigation, and Parking that are derived from our top-level objectives and functional requirements.

The sensor suite continuously feeds in data to the SLAM subsystem, so with every new sensor reading, the system is continuously building a map and localizing itself within that map. The logical flow of the system begins in the middle of the diagram at the diamond “if” block. If an available parking spot is not found, we follow the red arrow to the goal generation subsystem. This subsystem takes as input the raw sensor data, and generated map and estimated position from the SLAM module. The goal generation stack then uses the sensor data to detect lane lines. Given the known lane line position, the system then chooses a desired waypoint that lies ahead of the robot and inside the lane. We next move to the navigation stack, which takes as input the desired goal from the goal generation stack, and the map and localization estimate from the SLAM stack. The navigation stack then generates and follows a path to the goal position. As the robot starts moving toward its goal, the system starts looking for a parking spot once again, completing the main loop within the system. So, as the vehicle traverses the garage, it is constantly updating the map, and generating successive goal poses to extend the map and move closer to an available spot.

When the spot is finally found, we follow the green arrow from the central diamond block to enter the parking subsystem, which takes in as input the current localization estimate from the SLAM stack. The parking subsystem then generates a final desired pose that lies within the detected parking spot. We then go to the diamond “if” block inside the parking stack that checks to see if we have reached the desired spot. If we haven’t, we follow the red arrow to the navigation stack, which as before, plans and follows a path to the goal pose, though this time the goal pose comes from the parking stack rather than the navigation stack. This forms a secondary loop in the functional architecture, with the SLAM, parking, and navigation subsystems. The system finishes when the goal pose inside the parking spot is reached, satisfying the condition for the “if” block in the parking stack.