Hi Pierre,
Thanks for your contribution. It's alway's nice to get a few compliments so now and then.
Hi Fabian,
this is awsome, good work.
Thanks Fabian. Coding is going in the good direction.
Regarding the ringbuffer, did you already try a code with lots of tiny segments?
Yes we have a file with tiny segments :
spiral_on_surface_0001.ngc
This file is the extreme example of tiny segments.
Concern 1:
When running this file, indeed there is a velocity point where the cnc can't keep up when using endvel>0.
But i have to test this when the codebase is ready to do this.
When using tiny clothoid fits, it will take less time to fit then 25ms. I will report fit times using a low G64 P[x] value.
Concern 2:
The concern is that the motion can just ignore (jumps over) tiny segments at high speeds.
The speeds are so high, one servo cycle moves more distance then the underlying segments.
Wich result in for example passing 4 segments at one servo cycle.
But also this concern has to be tested when code is ready to rock and roll.
In theory we could calculate if we are dealing with scenario's as above and propose a solution for this.
You could set conditions like : the planner should at least pass each segment for minimal 1 servo cycle.
In general, soon we can test above concern's and find a solution.
Ringbuffer info:
Regarding the ringbuffer, the lowest working size i now use is 10 segments.
The expected size to use is around 40 or 50 segments.
- At program start the ringbuffer is allowed to add segments up to 5 at once.
- Then with every move a new segment is added. These new added segments are in this case 5 segments in the future The clothoid fit is done when the segment is added.
- Now the ringbuffer is rotating around 10 segments. So it was important to get it work correctly. To not
overwrite non executed segments for example. And it must run until program is completed.
- When the ringbuffer is working at runtime, there is no "tpIsDone" anymore during the gcode run.
The tpIsDone clear's the buffer. And this results in delay's.
Gladly we have ruled this behaviour out.
It just run's without any delay's trough a program with 50K+ lines.
- The ringbuffer is memory effiecient and needs no copy, remove, etc. in relation to a c++ std::vector
HouseKeeping:
The codebase is now using submodules.
It's worth to take a look at the readme files off the submodules.
- main linuxcnc scurve repository: codeberg.org/skynet/linuxcnc_scurve_compact
- submodule : codeberg.org/skynet/libclothoid3d
- submodule : codeberg.org/skynet/libscurve
The submodules can now easely be used by other developpers to use in their projects.
Today i worked mainly to get this submodules and readme files up to date.
Note, the scurve is 8x faster then Ruckig.
For the people who want to do a financial contribution to our work,
there is a donation button at the end of the readme files.
A donation support's a non-profit organisation related to retired donkey's in the US, located above San Fransisco.
Codebase clone & runtest:
git clone --recurse-submodules https://codeberg.org/skynet/linuxcnc_scurve_compact lcnc
cd lcnc/cmake
./installer
This worked ok!