Agricultural Drone Software

Agricultural Drone Software

Software that automates agricultural drones to assist farmers with crop monitoring and management.

Back to Projects

Project Overview

This project was developed during my Software Engineering course, where we created a drone control software that could automate agricultural tasks. The software was designed to eventually link to an actual drone and fly as instructed.

We first developed a GUI interface where users could plot structures on the farm area and have a simulated drone fly over those structures. Once the GUI was coded, tested, and working properly, we implemented the Adapter pattern to integrate a real DJI Tello drone using their SDK, allowing the physical drone to mimic the movements of our GUI drone.

Throughout the development process, I implemented various software engineering design patterns to create a robust, maintainable, and extensible system. This project provided hands-on experience with real-world software architecture principles and drone automation technologies.

Design Patterns

Singleton
Visitor
Composite
Adapter

Project Showcase

Agricultural Drone Software Dashboard

Dashboard layout for the Agricultural Drone Software

Key Features

Automated Flight Paths

Pre-programmed flight routes that allow drones to navigate fields autonomously, covering the entire area efficiently.

Crop Monitoring

Sensors and cameras that collect data on crop health, growth patterns, and potential issues like pests or diseases.

Data Analysis

Processing of collected data to provide actionable insights for farmers, helping them make informed decisions.

Weather Integration

Consideration of weather conditions to adjust flight plans and ensure safe operation of the drones.

User-Friendly Interface

Intuitive dashboard that allows farmers to easily program, monitor, and control drone operations.

Extensible Architecture

Modular design that allows for easy addition of new features and integration with other agricultural systems.

GUI Simulation to Real Drone Control

Seamless transition from simulated drone in the GUI to controlling a physical DJI Tello drone using the same interface and commands.

Design Patterns Implementation

Singleton Pattern

Implementation: Used for the drone controller to ensure only one instance controls the drone at any time, preventing conflicting commands.

Benefit: Provides a global point of access to the drone controller while ensuring that multiple instances don't interfere with each other, maintaining system stability.

Visitor Pattern

Implementation: Applied to perform operations on different components of the drone system without changing their classes.

Benefit: Allows for adding new operations to existing object structures without modifying those structures, making the system more flexible and maintainable.

Composite Pattern

Implementation: Used to represent hierarchical structures of drone commands and flight paths.

Benefit: Enables clients to treat individual objects and compositions of objects uniformly, simplifying the client code and making it more intuitive.

Adapter Pattern

Implementation: Implemented to integrate the DJI Tello drone with our software system. The Adapter pattern allowed our application to communicate with the Tello SDK without modifying our core application code.

Benefit: Enabled seamless transition from our GUI simulation to controlling a real drone, allowing the physical DJI Tello drone to mimic the movements of our simulated drone. This pattern facilitated the integration of hardware components and third-party systems with minimal changes to our existing codebase.

Learning Outcomes

This project provided valuable experience in software engineering principles and practices:

  • →

    Design Pattern Application: Gained practical experience implementing various design patterns and understanding their real-world applications.

  • →

    Software Architecture: Developed skills in creating maintainable, extensible software architectures that can adapt to changing requirements.

  • →

    Java Proficiency: Enhanced Java programming skills, particularly in object-oriented design and implementation.

  • →

    Problem-Solving: Improved ability to analyze complex problems and develop elegant, efficient solutions using appropriate design patterns.

Explore the Code

Check out the GitHub repository to see how I implemented these design patterns and created a comprehensive drone control system.