• Stars
    star
    501
  • Rank 87,500 (Top 2 %)
  • Language
    C#
  • License
    MIT License
  • Created about 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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.

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.