Update to version 2.0.5 beta

Here it is – the next release – packed with new features and functionalities. The biggest is surely the all new Windows client (with its final name) miniEngine Studio!

miniE Studio splash

The new miniEngine Studio can be found on GitHub: https://github.com/airiclenz/miniEngineStudio

The miniEngine software is also on GitHub: https://github.com/airiclenz/miniEngine2

Here is a list of all major updates and changes to the system:

  • Added the minEngine Studio
  • Added minEngine functions for the the minEngine Studio software
  • Added new “Keyframes Mode” which is dedicated to (currently) only work together with the miniEngine Studio
  • Added a function that updates settings to the new version during a software update (no configuration gets lost any longer)
  • Improved dashboards to show only relevant data
  • Improved settings menu-header
  • Optimized system modes and run styles for easier use
  • Fixed a bug where the motor was not moving when motor sleep was enabled
  • Fixed a bug that not saved the keep powered status.

Software

The new Windows client has no documentation yet but should be pretty self explanatory as all button have a tooltip to guide you as much as possible. I also tried to make the user interface as clean and straight-forward as possible. If anyone of you still is not able to figure out how it works, please contact me via the forum. I will help you as good as I can to make it work together with your miniEngine!

If you have any suggestions or find bugs, please let me know. This is the very first release and there is surely lots of space for improvements!

…but mainly I just hope it is of any use for you guys!

miniE Stusio mainForm

Here are some limitations to the functionality which I am aware of:

  • The defined curves can not yet be stored on the miniEngine. After a reboot everything is gone and needs to be sent to the miniEngine again (this will surely some later).
  • The communication between the Studio and and miniEngine might not work 100% in any case. If something is not working, try pressing the button again.
  • The system is not yet “water-proof” and might have some unexpected behavior. I highly recommend using it with care, common sense and limit switches to not destroy your hardware.
  • It does not work together with the miniEngine v1.

Documentation

I also added a big portion to the documentation which should explains the system-assembly in much more detail.

documentation
Link to the documentation….

Have fun with the new stuff!

Cheers,

Airic

path Designer

Hello everyone,

I want to let you know what the current status fo the project is and on what I am working on. So let’s get started…

path Designer

The major development that is ongoing right now is a Windows based client software for editing and testing Bézier-based curves – in other words: you’ll have full control over all axes and thus will be able to define when your motors should be where. The software will connect to your miniEngine via the USB port. The curve / graph editor is basically done and it is already possible to create, save and load setups. Even the basic communication with the Arduino is working.

Here is a screenshot of the client in its current development state:

gD_general

In the screenshot above you can see a setup with 2 axes (the second axis is the gray one in the background). The currently selected axis is using just 2 curve-segments (see below for an explanation what a curve-segment is). You can fill up your miniEngine with setups up to 25 curve-segments in total. This means that all your axes can together use 25 curve-segments. And here is a little graphic that shows what a curve-segment actually is (for the ones that want to know it in more detail – one curve-segment is one quadric Bézier curve):

gD_curve-segments

Here is another screenshot showing that a curve does not need to be curved. The 2 last curve-segments are simply flattened to a linear segments (there is a button for doing that)

gD_edit_point

The client supports selecting multiple points and moving them all together as well as numeric point placement for very precise setups where every mm / ms counts.

The connection to the miniEngine will be initialized by simply choosing its COM-port:

gD_COM

The next steps will be to finalize the communication part of the software so that the the paths can be send to the miniEngine and the program can be started.

The software will be released as open Source under the GPL license. It is being developed in .NET Visual Basic. Please contact me if you want to port it to Mac or Linux (I simply don’t have the time to take care of the miniEngine as well as 3 different  computer-clients thanks to the need to sleep regularly)

Documentation

The other place where things are happening is the documentation. I received some valuable feedback regarding the assembly of the BED-board. The next release will also contain some additional details about how to assemble the BED-board. There will also be explanations about different variants for connecting the Big EasyDrivers to the BED board and for connecting the BED board to the main Board of the miniEngine.

I am looking forward to the next release and hope you too!

Have fun!
Airic

miniE v2 update 4.1

Hello everyone,

this is just a quick update on the Bezier-motor-control engine. I worked the last days pretty much all of my free time on the new “core” system and can say that it is more or less done. I now can define moves based one Bézier curves – or in other words by defining 4 points (2-dimensional: time; position) per curve. The engine is then processing the data to a list of linear segments (based on linear functions). So every curve becomes 200 linear segments. To get a smooth move, I developed an algorithm, that uses a finer granularity where the curve bends the most. In the picture below you can see the segmentation (in this case 100 segments):

intelligent_BezierSegmentation

Every motor-movement in the next version will be based on this new methodology as it allows detailed planning of the motors position in time. I even allows to get information about the speed of the motors at any time. On top of that is the motor movement much smoother as it was with the old delay-based engine. It also allows much greater speeds. I was able to move my dolly along my 100 cm (4 foot) track (this one) in 6 seconds with nice speed-ramping on both sides.

Because the DUE is fast enough and the motor position calculation is based on an easy linear function, there should be plenty of processing power for doing all this for 2 motors simultaneously. Right now there are approx. 0.05 motors steps done per processing loop. This means that the DUE only needs to step the motor every 20 processing loops. [Edit: Running 2 different curves with 2 motors simultaneously is tested and working perfectly.]

The only drawback is that this new control-methodology is making extensive use of the 96kb RAM that that the Arduino DUE has to offer. One of the curves with its 200 linear sub-segments is taking 2400 bytes of RAM. That means that in theory 40 of these curves can be stored in the DUE’s memory. Because the systems itself needs some of the memory too, lets say that 20-25 curves can be stored. I think that this is a good amount to design some pretty complex video-moves. Here is another example of how such a move can look like:

move_graph

It consists of 3 curves and here is the actual source-code to define such a move by hand:

// x coordinate = time in ms
// y coordinate = motor position in cm
curve[0].p0 = Point( 0, 0);
curve[0].p1 = Point( 6000, 0);
curve[0].p2 = Point( 10000, 50);
curve[0].p3 = Point( 20000, 50);

curve[1].p0 = Point( 20000, 50);
curve[1].p1 = Point( 30000, 50);
curve[1].p2 = Point( 31000, 35);
curve[1].p3 = Point( 40000, 35);

curve[2].p0 = Point( 40000, 35);
curve[2].p1 = Point( 51000, 35);
curve[2].p2 = Point( 51000, 100);
curve[2].p3 = Point( 70000, 100);

The cool thing is that I can read the motor position for any time I want. This will end up in a feature to kind of fast preview the programmed move – for example with 16x speed.

I guess I need a good user interface for editing these curves on the system now!

Cheers,
Airic

miniE v2 update 4

Hello everyone,

after some weeks of vacation and some more weeks of coming back to work it is time for another update. This time it will be focused less on the hardware or the user interface but on the core functionalities of the engine. This means that I am currently working on the keyframes engine which will then be used to control the motor movement.

But first let me explain what I am aiming for and why. The motor control-engine of the older miniEngine version don’t allow precise planning of the moves. This means for example that I can precisely define how far the motor should move but I have no real power over its timing. There are possibilities to tweak the speed with which the motor moves but this is far from intuitive and precise. To overcome this issue, I am currently working on ways to have a better control.

The basic idea is to base this new motor-move-management in curves as in the following picture:

Bildschirmfoto 2013-09-12 um 19.39.26

This is a screenshot of a small test-application I wrote in Processing 2. It shows a cubic Bézier-curve which would be the perfect solution for defining motor moves. Out of many of these curves side by side, one could create highly complex moves. Here is an example for 2 motors:

rect3787

Unfortunately are these Bézier-curves pretty processor intensive which is bad because I am using an Arduino. Have a short look at the Wikipedia page of Bézier-curves and you will understand why. For being able to control a stepper-motor with such a curve (or something similar but function-based), I need to calculate the curves y-position (= motor position at this time) based on the time that has elapsed since the program started. The Casteljau’s algorithm can solve this. After I have the y- and thus the motor-position, I can move the motor to that spot. Then I do another calculation based on the new time and so on… All this needs to be done for the two motors + the handling of the cameras, triggers, communication, …

My current main-task is to find a way to do this whole loop that way so that the motor movement is still smooth. To do this I need to find a performant way to do the calculations, pre-calculate as much as possible or use timer-interrupts and time-fragments of constant speeds. I am following different approaches for this and hope to find a good and solid solution.

When this basic technology is developed, I can go ahead and implement a first ready-to-use version which will be based on this new core… This will then be made public to all of you. It will just contain a basic set of features but I know you are waiting to start playing with the new version!

On the hardware side I can tell that the main-PCB is final. I received Revison C and tested it. On the picture below you can see an updated version (Revision D) which just has a nicer silkscreen:

mE2_shield_REV_D_gimp-render

Cheers,
Airic