Have you tried turning it off and on again?


I’ve been trying recently to get into the habit of taking notes while I learn about new concepts/technologies/languages, and thought that it might be interesting to share some of my journey and thoughts along the way.

Before I begin, I must warn the reader that my mistakes are sometimes very dumb but that is the cost of learning! I hope that one day (soon?) I will be able to look back on this and smile over how green I was. Since my capstone project of using ML/RL to make a self-driving car is the first large software undertaking, I knew there would be a lot of growing pains. If I had to sum it up in one sentence, it would be “How did you do that?”. I have begun to learn how visual studio projects interact with Unreal Engine, and executing different python files as well as C++ files, and building, and compiling, and plugins, and so on and so forth. It almost feels like being in a dark place with a flashlight. There are so many things to see, but so little that I can look at at once.

How did I get here?

I am responsible with integrating infrared sensor data in our self-driving car. To begin my work, I started with the short guide on AirSim’s homepage on using IR data in an environment called “Africa”. The guide instructed to run two python files in a specific order. After fumbling a bit with downloading the environment and installing the required dependencies in my python environment — which happened to be a journey in and of itself — I ran into my first head scratcher.

OK, so it looks like something is not being found. What is the method ‘simListSceneObjects’ doing? It’s a method for ‘client’ and ‘client’ is a quad-rotor drone. This file references that file, which uses something from another file, and.. what was it I was doing again?

While working on my capstone, I remembered two things this week.

  1. Be present enough to know that you’re going down a rabbit hole.
  2. Occam’s razor

I will go backwards and address #2 first. For those unfamiliar, Occam’s razor is the idea that usually, the most simplest or obvious answer is the correct answer. When I was trying to get the environment to run, I got an error that a dependency could not be found. I knew that I had installed it earlier, and I verified that it was indeed installed. I thought of all the possible reasons that the program could not find it. Was it somehow installed in the wrong place? Was it the wrong version of correct software? Did I accidentally install a different software? etc. To make a long story short, it was because I installed the software to my computer but not to the environment that I was running the software in. A short ‘npm install’ later, I was up and running.

Doing this project has reminded me how much I love learning and problem solving. I frequently found myself voraciously looking through anything that I thought was interesting while working on getting my program to work, however; I quickly realized that this was not sustainable. This might be controversial, but I am trying to adopt a mindset of “learn only as much as you need to know”. I don’t mean this in a classroom setting, as much as applying it to solving a problem. Sometimes I need to take a step back and ponder, “Is this information applicable to me? Will it help me overcome my obstacle?”. If there is more to be learned, I will learn it when I need it. Time is a resource that I must keep in mind. Even though the article I am reading teaches me things, it may not be wise to be spending time reading it.

So these are the things that I will try to keep in mind going forward. I’m excited to see what I learn next!

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *