|
The goal of this project was to create a swarm of autonomous drones that can navigate through a mapped environment without crashing into any obstacles or each other. This could pave the way for warehouse logistic drones that can organize packages or move boxes. Using C++ and Crazyflie 2.1 drones, we were able to create a variation of the RRT* algorithm. After multiple iterations and optimizations (over 1300% speedup), we were able to calculate the trajectories for over 50 drones and navigate through a large mapped area. This is a scalable solution that should work with any number of drones.
In order to complete this project we had to implement many data structures, including hash maps, B+ trees, and linked lists, along with some custom ones specific to our project. Using these, were were able to take a naive implementation of RRT and optimize it to find a path while performing minimal calculations. One of the most significant optimizations was the implementation of a bidirectional tree. By creating a branching tree from both the start and end locations, we were able to find a suitable path much faster. Although the code for this project is complete and we are able to run simulations with a high level of success, we are still looking to improve the hardware side by running tests on larger numbers of drones in increasingly complex environments. |
|
For the past year and a half, I have been leading the Telemetry sub team of the UCI Solar Car. This consists of two main tasks. First, we are using the CAN Protocol to transmit data from various modules in the car and processing/displaying them to the driver in a central location. I was able to do this by using a Raspberry pi in tandem with a CANBus shield to collect data from systems such as the battery, the motor, the MPPT, and more. The relevant information was then displayed to the driver on an LCD screen on the dashboard. The second task is to wirelessly transmit the data to a computer outside of the car for in depth data analysis. To do this, I used Java to create a data analysis app. In this, one is able to view graphs of all the collected data (car speed, battery temperature, etc.) as well as raw numbers in order to determine what is or isn't working efficiently in the car.
|
![]() |
One of the biggest issues we face to day is the rate at which our energy needs are increasing. It is vital that we find a renewable source of energy to keep up with this. A largely untapped pool of energy comes from human footsteps. The average American takes about 4000 steps everyday. If we could harness just a fraction of that, we could generate vast amounts of electricity. For this reason, I decided to start the Power Mat project. I led a group of students to design, prototype and fabricate a mat that was capable of generating electricity when stepped upon. We used piezoelectric material to collect it. When this material is bent, it induces a current. By capturing that current in capacitors and then using those to charge a battery, we were able to collect energy from human footsteps. Unfortunately the costs per mat were too high to realistically be used, but I genuinely believe that with more research, that this could be a step into the future!
|
![]() |
In order to practice recursive algorithms I decided to design a Java algorithm that would build mazes. The approach was simple. After drawing borders for the outside of the maze, I would keep splitting the space into 2 randomly sized pieces and then recursively calling the function on both pieces, leaving a gap at one point along the split. It would keep splitting it until the minimum size is reached. In the end, I was able to build mazes of any size. My next challenge will be to create an algorithm to solve the mazes! |
![]() |
I was able to use C++ to build a chess AI that can actually beat me! Although the AI itself was quite fun to program, there was a lot more work that was needed in order to make this application a reality. The first step was to set the rules of the game, including the movement of pieces, win/lose conditions, and taking pieces. While some of this was quite straightforward, there were some elements like castling or en passant that proved to be a bit more challenging. However I was able to persevere and complete this. Next was the AI itself. Before it can choose a move though, it needs a metric to determine which move yields the highest chance of success. I did this by assigning values to each piece along with multipliers for opposition pieces threatened, position on the board and friendly pieces guarded. Based on this I generated a score. Next, I created a tree of all valid moves and scored them. I used the minimax algorithm to determine which branches to traverse and which to ignore. Once this was complete I had a functioning AI! |