Controlling a Servo-based Delta robot with interpolation

Hello guys!

This is my first post here :slight_smile:

For an upcoming project, I would like to investigate the possibility to base a Delta robot on Arduino. I have been working as a PLC programmer for many years now and I have dealt with commercial servo drivers a lot. However, so far it has been only PLCs that I needed to use at the company. I have also experience with computers programming languages so the programming itself doesn't concern me either.

There's been many examples I have come across on YouTube of Delta robots. My major is actually mechanical engineering and I am interested in developing such a robot myself. The topic is very up-to-date, especially with the popularity of 3D printers nowadays.

From what I see on the website, there are some libraries related to the topic - Servo.h, Stepper.h, AccelServo.h(or something like this). I would like to base the system on commercial servo drivers -> using step/dir and reading encoder feedback to ensure everything is OK.

You understand that the Arduino will need to:

  1. do the inverse kinematics calculations in real-time
  2. control the position of the three servo drivers in a synchronized manner.
  3. read the encoders feedback ensuring everything is all right and the pulses are being executed as expected

Programming and servo tuning do not concern me. There are some problems I can't solve for myself reading about Arduino projects on the forums:

  1. do I have any chance of controlling 24VDC drivers (what is the case with my servo drivers)? I could
    not come across a suitable shield for that. Everything seems to be based on 5V.

  2. is there a way to read the encoders back (provided that they are incremental ones)?

  3. will it be capable of performing the interpolation task in real time, calculating inverse kinematics and controlling the drivers? My commercial PLC is doing pulse sending at 200 kHz and I am looking for comparable behavior(or at least 100 kHz). Of course it seems for such frequencies I need a shield.

  4. are there any libraries for interpolation control of stepper/servo drivers? I am not against developing the functionality myself, just don't want to reinvent the wheel :). With Delta robots we have 3 axes interpolation.

You understand that my questions are general and you may think I don't understand enough about the platform but surely it's been several days reading and it's not the first time. It's been a very long period of time I've been hearing about Arduino but haven't had the time to take up so far. Well, the time has come.

Please advise me on the questions above. Maybe I'll go directly for the Arduino Mega as it seems to best option for my case.

I think I've gone through most of the projects for Robot arms or Delta robots but if you have good examples about interpolation of stepper or servo motors, they will be really appreciated.

  1. Yes, but they're unpopular because they're so expensive. Usually someone playing with servo drivers isn't the type of person that asks questions on a (predominantly) hobbyist forum.

  2. Adaencoder is one example. Although in a case like this I always thought it was more common for the servo driver to handle the encoder output while the controller just submits step/dir commands. The G320X, for example, with your only feedback being an error output.

3/4) One example would be Repetier which basically boils down the delta movements to Gcode. But again, as I mentioned in 2), that firmware is assuming that the servo or stepper driver is handling the encoder reading and the primary interface is just step/dir signals. Step rates are in the 40KHz range for ATMega chips.

Be aware that most people who use this Forum use the word "servo" to mean the small devices that are used to control model aircraft and boats. And that is what the Servo library is designed for.

The AccelStepper library is designed for stepper motors and can provide step and direction signals - but not at very high rates. The Stepper library that comes with the Arduino IDE is poor, by comparison. However it is very easy to write your own code to produce step and direction signals without using any library.

Reading an encoder - especially if it has high precision and/or high speed can use up a lot of an Arduino's MCU cycles.

If you want high speed you should probably consider one of the more advanced Arduinos with much higher clock speeds - but I have no experience of them.

...R