xiangshengcn / HighPrecisionStepperJuggler

a.k.a Octo-Bouncer. Highly precise stepper motor driving with a Teensy 4.0 and custom pulse generating algorithm and PC based image processing with the goal of getting a machine to juggle a ping pong ball.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HighPrecisionStepperJuggler

a.k.a Octo-Bouncer. Highly precise stepper motor driving with a Teensy 4.0 and custom pulse generating algorithm and PC based image processing with the goal of getting a machine to juggle a ping pong ball.

Here's a blog post with more infos about this project. And here's a YouTube video of the machine in action.

The Arduino folder contains the code for the Teensy 4.0. The Teensy 4.0's job is simple:

  • Listen for movement comments on the serial bus
  • Generate pulses for the stepper motors

The Unity folder contains the code for the Unity Application. This Application is responsible for:

  • Set up the camera (120 FPS 640×480 data stream, gain, exposure, contrast, ISO, saturation) via OpenCV
  • Set up Camera Device and getting image stream via OpenCV
  • Run Image Processing and get 2D pixel position of ping pong ball
  • Get 3D position of ping pong ball using the results of above-mentioned image processing
  • Calculate ball velocity
  • Use ball position and velocity in PID/Analytical control code to calculate correction-tilt of plate
  • Execute Inverse Kinematic code to figure out how much each motor needs to rotate in order to get the plate to a certain height with a specific tilt.
  • Send result of IK calculation to the microcontroller via serial interface
  • Render machine position and movements
  • Render image processing data
  • Render graph showing several data streams

The UVCCameraPlugin folder contains the C++ code for the camera plugin. This is a Unity plugin. All the OpenCV code is being executed in here.

About

a.k.a Octo-Bouncer. Highly precise stepper motor driving with a Teensy 4.0 and custom pulse generating algorithm and PC based image processing with the goal of getting a machine to juggle a ping pong ball.

License:MIT License


Languages

Language:C# 77.6%Language:HLSL 14.2%Language:ShaderLab 5.7%Language:ASP.NET 1.9%Language:GLSL 0.2%Language:C++ 0.2%Language:TeX 0.0%Language:PowerShell 0.0%Language:C 0.0%Language:Python 0.0%