Background Knowledge: The Jetson TX2 is a Nvidia embedded computer, which is an arm cortex CPU and a nvidia graphics card. This is the 3rd of the Jetson family with the newest addition being the Jetson Xavier. I had experience working with all previous Jetsons as well, and as with all things Nvidia + linux the task was not easy. Quick Run: The main issue I had was the outdated OpenCV for Tegra, several computer vision techniques have been added in later OpenCV versions which just cannot show up in the OpenCV for Tegra.
Background Knowledge: Bounding objects are now quite a common technique for object identification. Unfortunately objects are quite complex, to combat this a particular class of geometric shapes have been developed. This class is superquadratics, and they are defined by functions which resemble those of ellipsoids and other quadrics, however the square is replaced by arbitrary powers. Quick Run: A superquadratic function is defined as follows: $$|x|^r + |y|^s + |z|^t = 1$$
Background Knowledge: Model fitting is a problem that has been around as long as physics. The main purpose of physics is to reliably predict the changes in the world around us. Unfortunately while research has been done in this field, it is quite limited and we can only fit models to specific datasets. While this is the case, we have simpler methods for the time being, such as neural networks.
Background Knowledge: Human computer interfaces are growing more prominent as we enter a more digitalized society. Robotics must react to split second decisions, in a quick and timely manner. In the case of self driving cars it is even more important as we see now, that effects must be instantaneous. Most robotics systems today unfortunately do not use RTOS systems, but rather use ROS. Which has quite a large delay in processing information.
Background Knowledge: Machine learning is another field which takes a larger portion of our lives. Unfortunately when talking with most individuals their knowledge of machine learning can be summed up quite quickly under the umbrella term neural network. They know nothing about different neural network topologies, and much less about concepts like Boosting which helps you train neural networks. They mostly worked with one or two frameworks such as tensorflow or caffe, and fewer still know about model fitting or superquadratics which work on identifying quite a lot of models.
Background Knowledge: Servers are the backbone of all our smart electronics now, they act as the brains behind our connected devices. As such, server design is an ever increasing field of coding. Unfortunately, we have some poorly designed servers, and there is no standardized rules for server design. From my experience coding servers, I have learned some of the standards in a few companies. Which I took from this what works and what does not, and implemented this as the standards for server programming at MIM.
Background Knowledge: As smart phones become a more permanent part of our lives, we must grow to accept and work with them. Android programming is a HUGE field and the Android team has done a very good job with their documentation. So this will focus on the less known areas of Android programming. Quick Run: The nicest area of android programming has been a change from Java into Kotlin. This has allowed for more complex software designs, as well as a movement away from object oriented programming into more procedural paradigms.
Background Knowledge: Calibration for sensors is arguably the most important step you can take for making sense of data. This was without a doubt the hardest task we had at Mycionics, due to the complexity involved in a proper camera calibration. There are multiple types of camera calibrations, depending on your particular application a different calibration should be used. I will only go over the ones offered by OpenCV libraries.
Background Knowledge: Build systems are essential for a programmer to know, without it you will never be able to compile large scale programs. It is vital to know both the compiler you are using as well as the build system, as the program you make will be limited by both. Unfortunately there have not been many good tutorials on Makefiles, for that reason majority of this post will be on Makefiles.
Background Knowledge: Electronics engineers use computer assisted drawing tools in order to create PCBs. No longer must engineers draw circuit boards by hand and place them in acid to create the PCBs. As such we get a list of possible CADs for electronic engineers. Unfortunately this list is incredibly extensive, so I will limit my discussion to KiCad specifically. Quick Run: Out of the 3 CADs (OrCad, Eagle, KiCad), KiCad was the one that offered the most extensibility, as well as being completely free.