Currently, there are companies that are building drones to deliver packages to customers. As a way to make the drones work in the real world, we must have a simulation that shows the real scenarios that could affect how the drones are being delivered to the customers, such as avoiding tall buildings, using the most cost-effective paths, and what to do when the batteries drain out.
Dustin Zhang, Aunya Mukherjee, Lin Huynh and I used many design patterns and algorithms that we learned from the CSCI 3081W - Program Design and Development class taught by Professor Timothy Wrenn to make the drone and robot deliveries as efficiently as possible.
Throughout the project, there are three iterations, where each iteration is built on top of the previous one. Everyone in the team must work by themselves for the first iteration, and then combine all of the code and work/collaborate toward iterations two and three simultaneously. The following reflection details are based on the final iteration.
Features
Drone and robot carriers can deliver packages to customers
Only drone carriers can choose which route they’d like to take: Beeline, Parabolic, or Smart route, while robot carriers can only use the Smart route
Beeline route:
Parabolic route:
Smart route:
Recharging carriers stay at the charging station and get out to help when another carrier has notified the station that its battery is all out
Just to be fair to the customers, the charging station stores all of the dead carriers in a queue
Dead carriers: highlighted red; Alive carriers: highlighted green
Documentation
Please head over to our Documentation page to understand more about our projects’ code and progress!
Contribution
Keep team members on track and make sure group deadlines are being met
Manage the project timeline using Trello and plan different tasks
Simulate the drone and robot carriers to deliver the packages from point A to point B (the customer)
Write Google tests and document code
Add robot carrier to deliver packages with Smart route
Add the Smart and Beeline routes for the drone deliveries
Implement the Battery class: charging, depleting, calculating remaining battery life, and so on
Update the carrier to check if its battery is dead. If so, the carrier must drop to the ground and stop what it’s doing.
Work on and implement Carrier, Composite, and Package Factories
Handle the subjects with 3D vectors
Contribute to help with the UML diagram
Review teammates’ codes and approve/disapprove Pull Requests
Deliver a presentation of the overall project
Lessons Learned
How to use Docker to develop, run, and manage application
How to utilize the Strategy, Factory, and Observer patterns
Writing thorough Google tests for every subject from the simulation can be challenging, but it is definitely useful and helpful to make sure the code works perfectly for current and future releases
Since we had control over this project, over what we wanted to do and how to implement it, we were able to have clear communication with other team members to make major decisions
How to use GitHub more effectively as a team: issue numbers, code reviews, pull requests, merging conflicts, etc.
Group check-in two to three times a week and messaging/notifying each other when we have questions or concerns is a great way to keep everyone on the same page
What Could We Do Differently?
Change the capacity at which the recharge drone starts heading to the charging station
Utilize strategy patterns to make better choices for routes
Multiple charging stations/drones with multiple charging stations