From MAE/ECE 148 - Introduction to Autonomous Vehicles
Jump to navigation Jump to search
Team 3 Final Project

The course began with the completion of 3 autonomous laps through the use of DonkeyCar AI. After completing this initial task, our team progressed to an autonomous dumping vehicle. This was achieved by scanning an AprilTag, a very useful and simple fiducial marker that was used as a robotic action trigger, or more specifically, the movement of a servo motor. The idea was to encompass a crude model of Wall-E with a focus on the dumping of cargo or waste.

Team Members

From left to right: Albert Liao, Janette Juarez, Dallas Dominguez, Nathan Burdick

Dallas Dominguez (ECE)

Albert Liao (ECE)

Janette Juarez (MAE)

Nathan Burdick (MAE)

Mechanical Design


The camera mounting assembly was designed with the ability to adjust the angle orientation of the camera so that we could find a proper position of the track. The height, on the other hand, was kept at one length to maintain simplicity. Since the base was mounted to a higher elevated car plate, the height was kept to a short length. The protection of the camera was instead prioritized in preparation for potential accidents (they did occur).

As for the car plate that the electrical components were mounted to, our team went through different stages. The original design of the plate was unable to be used due to a cutting error and time constraints. Team 2 supplied an extra plate they had on hand which proved to work well for both the autonomous laps and the dumping system. After moving forward with the dumping system, more space was needed on the plate to place the servo motor and cargo holder. Another plate was then made to sit much lower so that the electrical components could be mounted underneath the higher plate.

Shown below is the cargo holder. It consisted of 2 hinges that were fixed to the higher plate on one end whereas the other end was free.


An arm was attached to the servo motor to then lift the free end of the cargo holder.


The full dumping system is shown below.

DumpingSystem1.PNG DumpingSystem2.PNG

Electrical Schematic

The image below displays the complete nervous system of the robot.



The following GitHub Repo Link will take you to a repository with all the scripts we used for our final project.

GitHub Repo AprilTag/OpenCV/Servo Movement

Specifically, navigate to the file directory called 'April_tag'. In this file, you should see a few scripts you can work with:

continuous_detect.py (Responsible for the recognition of the AprilTag from a continuous video stream)

functions.py (Some custom functions that work in conjunction with continous_detect.py for servo movement, distance calculation, and tag detection)

Other useful scripts:

detect_apriltag.py (Useful starter script for AprilTag detection from a local saved image)

Get in there and have a look around!

Libraries you will need to run the code:

Adafruit Servokit Library

Installation instructions can be found here


Installation Instructions can be found here

AprilTag Library

Installation instructions can be found here



Autonomous Laps

First 3 Tent Laps (Slow)

Tent Laps High Speed Race Model

Outdoor Laps Failure

Outdoor Laps Success

Final Project

AprilTag Detection and Servo Movement

Completed Final Project

Stretch Goals

If there was more time to work on the final project, our next goal would have been to have the car perform the dumping mode while driving autonomously. The car would detect the AprilTag and come to a full stop. Any cargo in the holder would then be dumped and the car would proceed to drive once completing this action.

Our secondary goal would be the implementation of an arm that would pick up the cargo from the floor and place it into the cargo holder. This would also be done through the detection of an AprilTag. Ideally, the car would have been able to perform both the driving mode and picking up mode while driving autonomously.


Start your project early and do not bite off more than you can chew. Three weeks is a lot shorter than you think! If you find yourself in the case where something is not working for you, take another course of action as soon as you realize it would be beneficial. As an example, we were having a difficult time implementing our ideas into a ROS environment. We decided to gear our focus towards writing python scripts from scratch, which worked out to be much simpler for us upon implementation.

Other Documentation

Final Presentation Slides