Robert Rodriguez Jr

Aerospace Engineering Graduate from ASU

About Me

  Hello, I am Robert Rodriguez. I graduated in December 2021 from Arizona State University with a bachelor's in aeronautical engineering and started working shortly after. I have been interested in mechanical objects since I was very young. I figured out my aerospace-related passions towards the end of high school due to some physics classes I took. I am thankful our high school had a 3D design class as an elective; this is where I first used SOLIDWORKS, followed shortly after by SOLIDWORKS flow simulation.
  Seeing the fluids being simulated and being able to cut a cross-section of the flow, I think it is so interesting to see how fluids move throughout their constraints. Starting with cubes and pipes and seeing how air and water would interact over and in those objects, I then moved to more advanced objects such as relatively simple airfoils and vehicle profiles. At this point, I was learning almost all of my SOLIDWORKS at home on a student account with a computer that wasn't happy about all of this new CPU stress.
  I have always loved cars and racing, especially Formula 1, so I thought going into a field closely related to aerodynamics would be fun. I figured that if I combined my love for cars and aircraft, I would have no problem pursuing aerospace engineering. Luckily this turned out to be true, and even in times I was struggling I still really enjoyed every subject that I took while at Arizona State. Over the course of my education, I found out that I enjoy more than just aerodynamics but just about all parts of aerospace engineering, including flight planning, flight testing, orbits, and geodesy.

  My capstone project was really engaging and entertaining because I really enjoyed what I was doing. The project involved designing and simulating a space tourism aircraft capable of taking off and landing on a runway and being able to make it above 300,000 feet. This project was a lot of fun. I was involved in most aspects of the design as our team lead, but I single-handedly took on the flight testing and flight simulations of our proposed aircraft. Using hundreds of different parameters, our final aircraft was able to sustain greater than 60 seconds above 300k feet and was capable of taking 14 passengers on each trip. Each climb would approach Mach 3.4, and I had to simulate different reentry angles to maintain relatively low stagnation temperatures.
  After beginning working, I was involved with a testing team as an intern. I was involved with testing different GNSS receivers, and this caught my interest. I started learning Python to code in order to do data analysis on the GNSS data. First, by scraping GGA messages, which are simple positioning messages that consist of latitude, longitude, altitude, and a few other details. I became very involved in coding and data analysis. I had coded using MATLAB throughout college, but once I started at this company, my skills greatly improved, so much so that a few months after starting my internship, I became a Test Automation Engineer, where I am currently. This position involved trying to automate the testing procedures as much as possible. This work helped me become much more interested in geodesy and GNSS in general.
  Some other hobbies I have include working on my motorcycle in my free time, designing and printing CAD parts, and I also love snowboarding, mountain biking and rock climbing (bouldering). Anything really to get the blood pumping, and being outdoors while doing it is a plus.

Simulations

  I have added these small simulations to showcase my coding and interests. As a disclaimer, I don't have much experience with Javascript, and these are my first tries with it. Orbiter being my first creation and . I have always loved games that are scientifically based, such as Kerbal Space Program or Universe Sandbox. I have come to realize I love putting together small simulations such as the ones below. Visualizing how physics interact I think is amazing, and it helps me stay sharp on math from university as well as learning new concepts and most importantly, how to implement it into code.

  Also of course this entire website is always a work in progress. Please feel free and take a look at the source code on github to see how I created these sims.

Orbits

  Throughout college I enjoyed most my classes, but one of the few that really stood out for me was orbital dynamics and space vehicle dynamics. It felt great being able to predict the delta-V requirements for different orbital maneuvers. I enjoyed calculating entire orbits from the few Keplerian elements given.
  Below is my orbits simulation. This simulation uses data from the Earth and the Sun in order to accurately model orbits. To model the gravitation forces, Newtons universal law of gravitation is used. This is then converted to acceleration from the planets mass, and then converted further into velocity and position.
 Instead of calculating the entire orbit and having the planet travel on a fixed path, I instead calculate the force every frame. I think that makes this a more interesting simulation, although due to the framerate and timestep, some anomalies may occur. This can be seen in the values that should remain constant in an orbit with no outside forces, such as eccentricity, semi-major axis, period, apoapsis, and periapsis. We can see these values slightly deviate throughout the orbit and especially so in the high velocity areas. If the frame rate was higher it would help immensely, but also slow down the simulation. I had to pick a balance between perfect values and entertaining sim.

Collisions

  This is my third simulation. I wanted to work with physics after creating the autopilot - PID sim. I have attempted this type of code before in Python but I am not fond of PyGame, so the attempts usually sizzle out. The canvases in Javascript are really nice for seeing quick updates to your work. This by itself allowed me to finish this side project. This simulator uses spatial partitioning to monitor collision detection. Although most CPU's can handle a brute force collision detection with this amount of entities, I want to prioritize performance.
  Overall with this collision detection, there are only around 200 collision checks per frame for 25 entities, by comparison with brute force there are 300 checks. As the amount of entities increase the broad phase collision detection shows its true colors with its performance benefits.
  This script was useful for me to learn about classes in Javascript. Each ball is its own class with many different objects inside of it, including X and Y position, speed, color, mass, radius and many more. The major difficulties in creating this simulator were stopping balls from "morphing" into one another. With the lower framerates, there are problems with faster moving balls. Since they move a set amount each frame, if they move into the space where another ball is moving, the collision check will not happen until the frame after. This can cause problems with balls "sticking" together. This was solved by checking if the balls have been touching for more than one frame in a row. This works well in most situations.

Radar Simulator

  In my latest project, I delved into creating a radar simulation. The goal was simple: make a realistic radar experience using ray casting techniques. This project was a great way to explore how radar physics and raycasting come together.
  The simulation's core features include the ability to adjust the number of beams and set their maximum bounces. This not only adds a bit of complexity but also lets users get a hands-on feel for how radar works. I've also added a "radar view" mode, which shows only the returning beams, similar to what a real radar screen would display.
  Figuring out ray casting was a key challenge in this project. It took some effort, but I managed to get it working in about a day. This was crucial for making the simulation resemble how real radar systems detect objects.
  To keep the simulation running smoothly, I set lower default settings for beams and bounces. Also, the rays turn off when the mouse isn't over the screen, preventing the sim from running when it's not needed.
  While working on this, I learned a lot about raycasting and the X-band radar. It was interesting to see how these technologies work and what they're used for.
  Moving forward, I have some ideas to enhance the simulation. I want to add a cross-section view, to show a one-dimensional profile similar to what a 2D radar would detect. I'm also thinking about adding more shapes to make the simulation more detailed and interesting. These updates should make the simulation even more useful for understanding radar technology.

Autopilot

  This simulation takes values of a Boeing 737 (including mass, CL, CD, thrust, and more) and inputs it into a PID controller to keep it both level on the target height, and in the X-center of the window.
  The coefficient of lift and drag are found by taking values from airfoiltools.com, they are then linearly interpolated using the angle of attack. The lift is found by using the lift equation and plugging in the density of air, the velocity of the aircraft and the aircrafts wing reference area (sref).
  In the case of this simulation we are taking the density of air to be near sea-level at 1.225 kg/m3, and velocity is 200 m/s. The SREF of the Boeing 737 is about 125 m2.
  This simulation also features procedurally generated clouds. Each cloud is created out of a random number of "lobes", and each lobe is placed randomly around the cloud. The further out a lobe, the more transparent it becomes. I felt like this gave the clouds a neat digital look. Currently there is a 75% chance to spawn a cloud per tick. I implemented a cloud slider in case they get distracting.

Computational Fluid Solver

  This simulator takes fluid dynamics equations and solves. The equations in particular are the Navier-Stokes Equation and the Poisson Pressure Equation. This took many days and nights of studying, especially LorenABarba's Python CFD lessons.
  To use the simulator first draw a shape on the grid, click the "Set Shape" button, and then click start run. Hopefully everything works and the solution should converge within a second or so. After it completes there should be a heat map of X velocity. Feel free to change that to Y velocity, total velocity, or pressure in the lower left dropdown window.
  Next to this dropdown window is the scale showing the coloring of the minimum, maximum, and the average. Another feature I added was a particle visualizer, to use this choose the interpolation loop amount, where the larger the loops the larger the final matrix will become. Click the particle mode to enable it, and then you can choose how many particles you want.
  This program taught and reaffirmed many things about fluid dynamics and coding for me. To ensure all the particles can move we have to check every particle if they are in every mesh square and only change the velocity of the particle by the value of the grid square it is in. With 200 particles on a 41x41 matrix, we must loop 336,200 times per frame to figure out the velocities of all the particles. To fix this I incorporated a hashmap function for each row of the array. This allowed me to bring the loops to only about 5000 per frame, and it runs must smoother.

NOTE: This simulator is not 100% accurate, nor near it. It does give correct looking results to the cavity-lid problem. Overall I am happy with it. It is hard to balance performance vs entertainment, so I tried to make it as accurate as possible and also able for any computer to run smoothly.

Work in Progress

My latest and current project is creating a heatmap for rental units in San Francisco. Check my github for how it works, but it simply uses the RentCast API to call the data and then post-processes it into neighborhoods using geoJson. The heatmap is then created using folium. I am hoping this will help me (and potentially others) to find a rental unit in San Francisco.

San Francisco Rental Heatmap