Hi, I am Christopher Dombroski.

I am a software developer.

Look at this awesome robot.

I have always been intrigued by robotics. When I was a kid, I participated in so many FIRST robotics competitions. One time we even won regionals! As such I feel like robotics, both building and programming, was a major cornerstone of my passion for technology.

In a particularly exciting job I took, I had full access to a 3D printer for the first time. I knew what I had to do. I designed up a functional (but slightly ugly) hexapod robot. It was great. So many hours of work went into it and it was my pride and joy. Then tragedy struck; I left it in a hot car and the plastic melted and deformed. But frustrating as it was, I was determined to use what I had learned to push myself and redesign. Now I have a super sleek robot that is better than ever.

The robot is controlled from a website that it hosts over it's WiFi hotspot. Live video is streamed over for a first person view. The interface uses a virtual joystick to look around and drive.

Overall, this project was a lot of fun and a lot of work. It's been difficult making everything work perfectly. So many things have gone so wrong that it's been a major challenge to keep working on it. In fact, so many obstacles have been faced that I named it "Murphy" after Murphy's Law.

Source

Kinetikos
The brains inside the robot.
Telecommander
A companion app to control the robot.

Technologies

Wow, ray tracing! (said nobody ever)

Everyone likes pretty pictures. Humans are inherently visual creatures. It makes sense that I would like rendering as much as robotics. Unfortunately I am not much of an artist. That doesn't stop me though. I find more interest in how things are drawn. In this case, scenes are rendered by simulating light and materials to create a photorealistic image.

The process of simulating light is called "ray tracing" because every photon can be represented by a path. A common approximation is to use a line. For every pixel in the image, a ray is shot out of the camera and bounced around in the scene to approximate lighting. It is a common optimization to trace rays backwards from the camera because it is unlikely for stray light rays to hit the camera.

Because ray tracing simulates light and materials, it can be comparable to real-world images. There are several lighting effects that are inherently solved such as color bleed, ambient occlusion, reflections, refraction, caustics, and soft shadows. Every single one of those effects is very difficult to approximate with the simpler rasterization renderers.

Ray tracing is used heavily in any industry where high quality graphics of 3D environments are required. For example, the movie industry uses it for all of their CG. It is an offline type of rendering, meaning it cannot be done fast enough for real-time animations. Unlike video games where every frame must be done in a matter of milliseconds, ray traced images can take hours for a single image.

Cornell University constructed a real-world model of a box with a green wall, red wall, a light in the top, and two smaller blocks inside. They then took a picture as a reference so they could compare the output from their own renderer. Since then it has become a common test model and baseline for modern renderers. My ray tracer returns an acceptable result but could be improved.

To learn more about my ray tracer, visit github.com/Nyrmburk/RayTrace.

Technologies

Neural networks, how do they work‽

Neural networks are something that is gaining a lot of attention and real-world adoption in the present day. They were actually invented in 1958 but were impractical due to computer speed. Modern day equipment and decades of research have allowed for it to become one of today's most cutting-edge technologies.

A common use case for neural networks is classification. The MNIST handwritten digit database is a popular exercise. The goal is to take an image of a digit from 0-9 and correctly guess which one it is. Modern AI is so good that it can beat most humans for accuracy.

I created a simple feed-forward network. It's the most basic type but still incredibly useful. It is comprised of an input layer, processing layers, and an output layer. Every layer is an array of "neurons" that hold a value. Each layer is fully connected to every neuron in the following layer by "synapses". A synapse holds a value and the host neuron's value is multiplied by it and added to the target neuron (in the next layer). Training is done by iteratively tweaking synapse values by reducing calculated error.

In this case, a 28x28 pixel image is sent to the network containing 40 processing neurons. After calculating the processing layer, it is sent to the 10 output neurons representing the digits 0-9. The output neuron with the highest value is selected as the best guess and displayed.




Draw any number between 0 and 9. The drawing is automatically centered and downscaled to fit the AI. The AI then uses it's prior training to guess the most likely digit.

Technologies