2021WinterTeam3
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
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.
Electrical Schematic
The image below displays the complete nervous system of the robot.
Software
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
OpenCV
Installation Instructions can be found here
AprilTag Library
Installation instructions can be found here
Results
Videos
Autonomous Laps
Tent Laps High Speed Race Model
Final Project
AprilTag Detection and Servo Movement
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.
Recommendations
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.