In this video the car is navigating using only GPS and it's IMU, but just for fun I'm using my iPhone as a GPS beacon which it is following. :)
This rotary encoder was retro fit onto my Team Associated RC10-T3. I produced it using a culmination of 3D printing for the mount and gear adapter and CNC laser cutting to make the metal bracket holding the actual encoder in place. The small PCB above the encoder is an Adafruit Trinket-Pro an Arduino compatible AVR based MCU that uses interrupts to count encoder ticks to calculate distance travelled. It can then surface that information via the I2C bus.
The K-Means algorithm is a simple, but very useful, clustering algorithm that can be used to extract the fundamental nature about a signal or set of data. Essentially the algorithm works by first generating a small fixed set of K data points, or "means". This set should roughly coincide with the set you are trying to cluster. Next the algorithm iterates over all N data-points assigning each to the nearest mean. Once that is done, a new position is computed for each of the K means by averaging the position of all the assigned data-points from the previous step. After that the cycle repeats by re-assigning nearest means. This iteration continues until some stop condition or convergence is reached. In this example I was experimenting with cleaning up fake noisy GPS data to yield a high quality representation of the underlying truth values.
Navigation indoors is performed accurately here via dead-reckoning. Dead-reckoning is a simple technique that uses two pieces of information. Your current heading, and how far you've traveled. Using this information you can often accurately infer you position. It is susceptible to error over long periods of time, but for runs it works quite well. This particular algorithm is fusing weighted magnetometer and gyroscope data along with rotary encoder ticks to integrate vehicle position over time.
Point-cloud generation implemented using PulsedLight's LIDAR-Lite V1 module. The LIDAR module generates a PWM signal measured by an interrupt on the rotary encoder MCU. This decoded ranging information is then retrieved by the primary computer (R-Pi) via the I2C bus. The data visualized by the OpenGL program is part of a diagnostic packet surfaced through the Linux networking stack via a socket.
Doctor Octopus Arms
The final product! The arms are articulated randomly, the entire assembly is mounted on a military style backpack frame. Each arm is driven by 3 stepper motors, and controlled by an MCU each. The MCUs keep in sync with each other via a shared serial line. One of them is connected to a button that toggles arm articulation.
The build in progress! Assembly is finished for the first arm and testing is a go! Here I successfully got the first arm to operate. It's just doing some circles :)
A nearly completed assembly of the first arm. It's composed of laser cut aluminum plates with guide holes for control lines. The plates are separated by small aluminum spacers with a spring-steel core running down the center. Motion is controlled by 3 stepper motors activating to reel in their control lines.