Trajectory Planner using Ruckig Lib
08 Nov 2023 19:34 #284894
by Grotius
Replied by Grotius on topic Trajectory Planner using Ruckig Lib
Hi Joco,
Sooo impressed with what is being done here!
Thank you very much !
It's not easy.
I am trying to get a test machine set up to actually try this on real hardware.
Ok that would be nice !
I hope you can see the scurve magic on real hardware soon.
Did another test with a plasma file. Not 100% ok, but good for now.
Sooo impressed with what is being done here!
Thank you very much !
It's not easy.
I am trying to get a test machine set up to actually try this on real hardware.
Ok that would be nice !
I hope you can see the scurve magic on real hardware soon.
Did another test with a plasma file. Not 100% ok, but good for now.
The following user(s) said Thank You: akb1212, tommylight
Please Log in or Create an account to join the conversation.
08 Nov 2023 20:10 - 08 Nov 2023 20:11 #284896
by Joco
Replied by Joco on topic Trajectory Planner using Ruckig Lib
Build failing again. Can't build linuxcnc using normal make or cmake.
have you done any changes to break the standard /src build? i.e. does it work for you?
I have just spun up a net clean Debian12 VM, cloned the repo, covered all the dependencies and no joy per above.
Not sure what the issue really is. Appears to be trying to use a directory or open a file in a place it can't?
The cmake issue is truely odd. The same gtk issue as before but the libgtk-3-dev is installed!
have you done any changes to break the standard /src build? i.e. does it work for you?
I have just spun up a net clean Debian12 VM, cloned the repo, covered all the dependencies and no joy per above.
Not sure what the issue really is. Appears to be trying to use a directory or open a file in a place it can't?
Warning: Spoiler!
~/dev/grotius_linuxcnc/src$ make
Reading 0/203 dependency files
Done reading dependencies
Reading 0/117 realtime dependency files
Done reading realtime dependencies
Creating mesa_uart.mak
Creating mesa_7i65.mak
Creating serport.mak
Creating xyzab_tdr_kins.mak
Creating xor2.mak
Creating xhc_hb04_util.mak
Creating wcomp.mak
Creating userkins.mak
Creating updown.mak
Creating tristate_float.mak
Creating tristate_bit.mak
Creating tp.mak
Creating ton.mak
Creating toggle2nist.mak
Creating toggle.mak
Creating tof.mak
Creating timedelta.mak
Creating timedelay.mak
Creating time.mak
Creating threadtest.mak
Creating thcud.mak
Creating thc.mak
Creating sum2.mak
Creating steptest.mak
Creating spindle_monitor.mak
Creating spindle.mak
Creating sphereprobe.mak
Creating simple_tp.mak
Creating sim_spindle.mak
Creating sim_parport.mak
Creating sim_matrix_kb.mak
Creating sim_home_switch.mak
Creating sim_axis_hardware.mak
Creating select8.mak
Creating scaled_s32_sums.mak
Creating scale.mak
Creating sample_hold.mak
Creating safety_latch.mak
Creating reset.mak
Creating raster.mak
Creating plasmac.mak
Creating orient.mak
Creating or2.mak
Creating oneshot.mak
Creating ohmic.mak
Creating offset.mak
Creating not.mak
Creating near.mak
Creating mux8.mak
Creating mux4.mak
Creating mux2.mak
Creating mux16.mak
Creating multiswitch.mak
Creating multiclick.mak
Creating mult2.mak
Creating moveoff.mak
Creating minmax.mak
Creating millturn.mak
Creating message.mak
Creating mesa_pktgyro_test.mak
Creating max31855.mak
Creating matrixkins.mak
Creating match8.mak
Creating maj3.mak
Creating lut5.mak
Creating lowpass.mak
Creating logic.mak
Creating lincurve.mak
Creating limit_axis.mak
Creating limit3.mak
Creating limit2.mak
Creating limit1.mak
Creating led_dim.mak
Creating latencybins.mak
Creating laserpower.mak
Creating knob2float.mak
Creating joyhandle.mak
Creating invert.mak
Creating integ.mak
Creating ilowpass.mak
Creating hypot.mak
Creating homecomp.mak
Creating histobins.mak
Creating gray2bin.mak
Creating gearchange.mak
Creating gantry.mak
Creating flipflop.mak
Creating filter_kalman.mak
Creating feedcomp.mak
Creating estop_latch.mak
Creating eoffset_per_angle.mak
Creating edge.mak
Creating div2.mak
Creating differential.mak
Creating demux.mak
Creating deadzone.mak
Creating ddt.mak
Creating dbounce.mak
Creating corexy_by_hal.mak
converting conv for conv_u64_u32.comp
Creating conv_u64_u32.mak
converting conv for conv_u64_s64.comp
Creating conv_u64_s64.mak
converting conv for conv_u64_s32.comp
Creating conv_u64_s32.mak
converting conv for conv_u64_float.comp
Creating conv_u64_float.mak
converting conv for conv_u64_bit.comp
Creating conv_u64_bit.mak
converting conv for conv_u32_u64.comp
Creating conv_u32_u64.mak
converting conv for conv_u32_s64.comp
Creating conv_u32_s64.mak
converting conv for conv_u32_s32.comp
Creating conv_u32_s32.mak
converting conv for conv_u32_float.comp
Creating conv_u32_float.mak
converting conv for conv_u32_bit.comp
Creating conv_u32_bit.mak
converting conv for conv_s64_u64.comp
Creating conv_s64_u64.mak
converting conv for conv_s64_u32.comp
Creating conv_s64_u32.mak
converting conv for conv_s64_s32.comp
Creating conv_s64_s32.mak
converting conv for conv_s64_float.comp
Creating conv_s64_float.mak
converting conv for conv_s64_bit.comp
Creating conv_s64_bit.mak
converting conv for conv_s32_u64.comp
Creating conv_s32_u64.mak
converting conv for conv_s32_u32.comp
Creating conv_s32_u32.mak
converting conv for conv_s32_s64.comp
Creating conv_s32_s64.mak
converting conv for conv_s32_float.comp
Creating conv_s32_float.mak
converting conv for conv_s32_bit.comp
Creating conv_s32_bit.mak
converting conv for conv_float_u64.comp
Creating conv_float_u64.mak
converting conv for conv_float_u32.comp
Creating conv_float_u32.mak
converting conv for conv_float_s64.comp
Creating conv_float_s64.mak
converting conv for conv_float_s32.comp
Creating conv_float_s32.mak
converting conv for conv_bit_u64.comp
Creating conv_bit_u64.mak
converting conv for conv_bit_u32.comp
Creating conv_bit_u32.mak
converting conv for conv_bit_s64.comp
Creating conv_bit_s64.mak
converting conv for conv_bit_s32.comp
Creating conv_bit_s32.mak
converting conv for conv_bit_float.comp
Creating conv_bit_float.mak
Creating constant.mak
Creating comp.mak
Creating clarkeinv.mak
Creating clarke3.mak
Creating clarke2.mak
Creating charge_pump.mak
Creating carousel.mak
Creating blend.mak
Creating bldc.mak
Creating bitwise.mak
Creating bitslice.mak
Creating biquad.mak
Creating bin2gray.mak
Creating axistest.mak
Creating anglejog.mak
Creating and2.mak
Creating abs_s64.mak
Creating abs_s32.mak
Creating abs.mak
Reading 0/203 dependency files
Done reading dependencies
Reading 0/264 realtime dependency files
Done reading realtime dependencies
Copying test input hal/components/lincurve.comp
Copying test input hal/components/logic.comp
Copying test input hal/components/bitslice.comp
sed hal/drivers/mesa_uart.comp -e "1 s/mesa_uart/mesa_uart_test/" > ../tests/halcompile/serial-out-of-tree/mesa_uart_test.comp
sed ../docs/src/hal/rand.comp -e "1 s/rand/rand_test/" > ../tests/halcompile/userspace/rand_test.comp
cp ../scripts/rtapi.conf ../tests/uspace/spawnv-root/rtapi.conf
Compiling libnml/inifile/inifile.cc
Creating shared library liblinuxcncini.so.0
ln -sf liblinuxcncini.so.0 ../lib/liblinuxcncini.so
Compiling libnml/inifile/inivar.cc
Linking inivar
/usr/bin/ld: cannot open output file ../bin/inivar: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [libnml/inifile/Submakefile:24: ../bin/inivar] Error 1
Reading 0/203 dependency files
Done reading dependencies
Reading 0/117 realtime dependency files
Done reading realtime dependencies
Creating mesa_uart.mak
Creating mesa_7i65.mak
Creating serport.mak
Creating xyzab_tdr_kins.mak
Creating xor2.mak
Creating xhc_hb04_util.mak
Creating wcomp.mak
Creating userkins.mak
Creating updown.mak
Creating tristate_float.mak
Creating tristate_bit.mak
Creating tp.mak
Creating ton.mak
Creating toggle2nist.mak
Creating toggle.mak
Creating tof.mak
Creating timedelta.mak
Creating timedelay.mak
Creating time.mak
Creating threadtest.mak
Creating thcud.mak
Creating thc.mak
Creating sum2.mak
Creating steptest.mak
Creating spindle_monitor.mak
Creating spindle.mak
Creating sphereprobe.mak
Creating simple_tp.mak
Creating sim_spindle.mak
Creating sim_parport.mak
Creating sim_matrix_kb.mak
Creating sim_home_switch.mak
Creating sim_axis_hardware.mak
Creating select8.mak
Creating scaled_s32_sums.mak
Creating scale.mak
Creating sample_hold.mak
Creating safety_latch.mak
Creating reset.mak
Creating raster.mak
Creating plasmac.mak
Creating orient.mak
Creating or2.mak
Creating oneshot.mak
Creating ohmic.mak
Creating offset.mak
Creating not.mak
Creating near.mak
Creating mux8.mak
Creating mux4.mak
Creating mux2.mak
Creating mux16.mak
Creating multiswitch.mak
Creating multiclick.mak
Creating mult2.mak
Creating moveoff.mak
Creating minmax.mak
Creating millturn.mak
Creating message.mak
Creating mesa_pktgyro_test.mak
Creating max31855.mak
Creating matrixkins.mak
Creating match8.mak
Creating maj3.mak
Creating lut5.mak
Creating lowpass.mak
Creating logic.mak
Creating lincurve.mak
Creating limit_axis.mak
Creating limit3.mak
Creating limit2.mak
Creating limit1.mak
Creating led_dim.mak
Creating latencybins.mak
Creating laserpower.mak
Creating knob2float.mak
Creating joyhandle.mak
Creating invert.mak
Creating integ.mak
Creating ilowpass.mak
Creating hypot.mak
Creating homecomp.mak
Creating histobins.mak
Creating gray2bin.mak
Creating gearchange.mak
Creating gantry.mak
Creating flipflop.mak
Creating filter_kalman.mak
Creating feedcomp.mak
Creating estop_latch.mak
Creating eoffset_per_angle.mak
Creating edge.mak
Creating div2.mak
Creating differential.mak
Creating demux.mak
Creating deadzone.mak
Creating ddt.mak
Creating dbounce.mak
Creating corexy_by_hal.mak
converting conv for conv_u64_u32.comp
Creating conv_u64_u32.mak
converting conv for conv_u64_s64.comp
Creating conv_u64_s64.mak
converting conv for conv_u64_s32.comp
Creating conv_u64_s32.mak
converting conv for conv_u64_float.comp
Creating conv_u64_float.mak
converting conv for conv_u64_bit.comp
Creating conv_u64_bit.mak
converting conv for conv_u32_u64.comp
Creating conv_u32_u64.mak
converting conv for conv_u32_s64.comp
Creating conv_u32_s64.mak
converting conv for conv_u32_s32.comp
Creating conv_u32_s32.mak
converting conv for conv_u32_float.comp
Creating conv_u32_float.mak
converting conv for conv_u32_bit.comp
Creating conv_u32_bit.mak
converting conv for conv_s64_u64.comp
Creating conv_s64_u64.mak
converting conv for conv_s64_u32.comp
Creating conv_s64_u32.mak
converting conv for conv_s64_s32.comp
Creating conv_s64_s32.mak
converting conv for conv_s64_float.comp
Creating conv_s64_float.mak
converting conv for conv_s64_bit.comp
Creating conv_s64_bit.mak
converting conv for conv_s32_u64.comp
Creating conv_s32_u64.mak
converting conv for conv_s32_u32.comp
Creating conv_s32_u32.mak
converting conv for conv_s32_s64.comp
Creating conv_s32_s64.mak
converting conv for conv_s32_float.comp
Creating conv_s32_float.mak
converting conv for conv_s32_bit.comp
Creating conv_s32_bit.mak
converting conv for conv_float_u64.comp
Creating conv_float_u64.mak
converting conv for conv_float_u32.comp
Creating conv_float_u32.mak
converting conv for conv_float_s64.comp
Creating conv_float_s64.mak
converting conv for conv_float_s32.comp
Creating conv_float_s32.mak
converting conv for conv_bit_u64.comp
Creating conv_bit_u64.mak
converting conv for conv_bit_u32.comp
Creating conv_bit_u32.mak
converting conv for conv_bit_s64.comp
Creating conv_bit_s64.mak
converting conv for conv_bit_s32.comp
Creating conv_bit_s32.mak
converting conv for conv_bit_float.comp
Creating conv_bit_float.mak
Creating constant.mak
Creating comp.mak
Creating clarkeinv.mak
Creating clarke3.mak
Creating clarke2.mak
Creating charge_pump.mak
Creating carousel.mak
Creating blend.mak
Creating bldc.mak
Creating bitwise.mak
Creating bitslice.mak
Creating biquad.mak
Creating bin2gray.mak
Creating axistest.mak
Creating anglejog.mak
Creating and2.mak
Creating abs_s64.mak
Creating abs_s32.mak
Creating abs.mak
Reading 0/203 dependency files
Done reading dependencies
Reading 0/264 realtime dependency files
Done reading realtime dependencies
Copying test input hal/components/lincurve.comp
Copying test input hal/components/logic.comp
Copying test input hal/components/bitslice.comp
sed hal/drivers/mesa_uart.comp -e "1 s/mesa_uart/mesa_uart_test/" > ../tests/halcompile/serial-out-of-tree/mesa_uart_test.comp
sed ../docs/src/hal/rand.comp -e "1 s/rand/rand_test/" > ../tests/halcompile/userspace/rand_test.comp
cp ../scripts/rtapi.conf ../tests/uspace/spawnv-root/rtapi.conf
Compiling libnml/inifile/inifile.cc
Creating shared library liblinuxcncini.so.0
ln -sf liblinuxcncini.so.0 ../lib/liblinuxcncini.so
Compiling libnml/inifile/inivar.cc
Linking inivar
/usr/bin/ld: cannot open output file ../bin/inivar: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [libnml/inifile/Submakefile:24: ../bin/inivar] Error 1
The cmake issue is truely odd. The same gtk issue as before but the libgtk-3-dev is installed!
Warning: Spoiler!
[ 68%] Built target halcmd
[ 68%] Built target halmeter
[ 70%] Built target halscope
[ 70%] Building C object classicladder/CMakeFiles/classicladder.dir/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c.o
/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c:52:10: fatal error: gtk/gtk.h: No such file or directory
52 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[2]: *** [classicladder/CMakeFiles/classicladder.dir/build.make:90: classicladder/CMakeFiles/classicladder.dir/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2642: classicladder/CMakeFiles/classicladder.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
current folder:
/home/james/dev/grotius_linuxcnc
[ 68%] Built target halmeter
[ 70%] Built target halscope
[ 70%] Building C object classicladder/CMakeFiles/classicladder.dir/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c.o
/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c:52:10: fatal error: gtk/gtk.h: No such file or directory
52 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[2]: *** [classicladder/CMakeFiles/classicladder.dir/build.make:90: classicladder/CMakeFiles/classicladder.dir/home/james/dev/grotius_linuxcnc/src/hal/classicladder/arrays.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2642: classicladder/CMakeFiles/classicladder.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
current folder:
/home/james/dev/grotius_linuxcnc
Last edit: 08 Nov 2023 20:11 by Joco.
The following user(s) said Thank You: tommylight, Grotius
Please Log in or Create an account to join the conversation.
- tommylight
- Online
- Moderator
Less
More
- Posts: 19196
- Thank you received: 6434
08 Nov 2023 20:13 #284897
by tommylight
And i am still looking from the sideline, no time to test ... and i have best of both worlds, plenty of plasma machines and a 3.5 ton Mazak lathe, would love to give those a run with this.
I am dreading the fact that if this works as Grotius and Beef are hell bent on making it, i may have to go and install this on all existing machines, over 20 of ... oh s#iiiiiiiiittt !
Replied by tommylight on topic Trajectory Planner using Ruckig Lib
+1Sooo impressed with what is being done here!
And i am still looking from the sideline, no time to test ... and i have best of both worlds, plenty of plasma machines and a 3.5 ton Mazak lathe, would love to give those a run with this.
I am dreading the fact that if this works as Grotius and Beef are hell bent on making it, i may have to go and install this on all existing machines, over 20 of ... oh s#iiiiiiiiittt !
Please Log in or Create an account to join the conversation.
08 Nov 2023 20:34 - 08 Nov 2023 21:01 #284898
by Joco
Replied by Joco on topic Trajectory Planner using Ruckig Lib
Hang fire - I may have fixed it.
Half fixed. There is a missing 'bin' directory int he repo root. I added that by hand and the normal /src compile now completes.
Axis will not start due to linkage to new planner. Qtdragon sim works.
Had to fix a bunch of other missing dependencies that are not caught or obviously documented as part of linuxcnc build script. Installing linuxcnc-uspace-dev solved them.
However the gtk error continues.
Half fixed. There is a missing 'bin' directory int he repo root. I added that by hand and the normal /src compile now completes.
Axis will not start due to linkage to new planner. Qtdragon sim works.
Had to fix a bunch of other missing dependencies that are not caught or obviously documented as part of linuxcnc build script. Installing linuxcnc-uspace-dev solved them.
However the gtk error continues.
Last edit: 08 Nov 2023 21:01 by Joco.
Please Log in or Create an account to join the conversation.
08 Nov 2023 20:38 #284899
by Grotius
Replied by Grotius on topic Trajectory Planner using Ruckig Lib
Hi Joco,
Ok i will install a vm tomorrow and try it out.
Then i can see my self what has to be done.
Gtk error:
If you want to avoid the gtk includes, just outcomment the classicladder in the ~/cmake/cmakelists.txt
We don't need classicladder for now. Like this : # add_subdirectory(${SRC_DIR}/classicladder)
I think we use the gtk2 version in the cmake, you could change this to gtk3.
now in classicladder cmake file:
include_directories(/usr/include/gtk-2.0)
add this line:
include_directories(/usr/include/gtk-3.0)
Installing :
At my place, the make command runs ok. then sudo make setuid and done.
Then i start a axis config and it runs.
Good luck !!
Hopely tomorrow cmake runs as a charm on a vm.
Ok i will install a vm tomorrow and try it out.
Then i can see my self what has to be done.
Gtk error:
If you want to avoid the gtk includes, just outcomment the classicladder in the ~/cmake/cmakelists.txt
We don't need classicladder for now. Like this : # add_subdirectory(${SRC_DIR}/classicladder)
I think we use the gtk2 version in the cmake, you could change this to gtk3.
now in classicladder cmake file:
include_directories(/usr/include/gtk-2.0)
add this line:
include_directories(/usr/include/gtk-3.0)
Installing :
At my place, the make command runs ok. then sudo make setuid and done.
Then i start a axis config and it runs.
Good luck !!
Hopely tomorrow cmake runs as a charm on a vm.
Please Log in or Create an account to join the conversation.
08 Nov 2023 20:46 #284900
by Grotius
Replied by Grotius on topic Trajectory Planner using Ruckig Lib
@ Hi Joco,
The git is updated, but for the gtk3 thing, i will fix that tomorrow.
You have to check a few cmakefiles if you want to change the gtk version yourself.
And take your time. We will fix the installation for you. Thanks for your efforts so far.
@ Hi Tommy,
Installed on all your machines...
I hope this will be the outcome of our work eventually. Cheers!
The git is updated, but for the gtk3 thing, i will fix that tomorrow.
You have to check a few cmakefiles if you want to change the gtk version yourself.
And take your time. We will fix the installation for you. Thanks for your efforts so far.
@ Hi Tommy,
Installed on all your machines...
I hope this will be the outcome of our work eventually. Cheers!
The following user(s) said Thank You: tommylight
Please Log in or Create an account to join the conversation.
08 Nov 2023 21:08 #284902
by Joco
Replied by Joco on topic Trajectory Planner using Ruckig Lib
SOLVED
sudo apt install libgtk2.0-dev
I wasn't aware gtk2 was needed I had the impression from early in the thread that gtk3 was the depdency.
Cheers - j.
sudo apt install libgtk2.0-dev
I wasn't aware gtk2 was needed I had the impression from early in the thread that gtk3 was the depdency.
Cheers - j.
Please Log in or Create an account to join the conversation.
09 Nov 2023 00:35 - 09 Nov 2023 00:57 #284912
by Joco
Replied by Joco on topic Trajectory Planner using Ruckig Lib
Have axis config working on the plasma machine. Just movement no cutting. Qtplasmac on 2.10 has broken. Some UI startup issue. QTDragon working fine.
Anyway been trying to get the feel of the max jerk settings. Currently running twice max acceleration which happens to be half max speed.
Any advice on what the max jerk number is doing could be useful to help dial things in.
The lag on direction change on sharp corners is bit of a problem for plasma. So hoping tunible with jerk settings.
I will also try and trap some of the debug info going to screen. I have had one total machine freeze and axis go unresponsive multiple times.
Cheers.
Anyway been trying to get the feel of the max jerk settings. Currently running twice max acceleration which happens to be half max speed.
Any advice on what the max jerk number is doing could be useful to help dial things in.
The lag on direction change on sharp corners is bit of a problem for plasma. So hoping tunible with jerk settings.
I will also try and trap some of the debug info going to screen. I have had one total machine freeze and axis go unresponsive multiple times.
Cheers.
Last edit: 09 Nov 2023 00:57 by Joco.
Please Log in or Create an account to join the conversation.
09 Nov 2023 03:36 - 09 Nov 2023 03:52 #284914
by Joco
Replied by Joco on topic Trajectory Planner using Ruckig Lib
Some testing done.
Linucnc plasma test file, Metric Spanner. Acceleration 3000mm/s/s, Feed rate 7000mm/min. max_jerk=6000
Standard Planner
Notice the vibration in the torch head from the sharp changes at high acceleration.
S-Curve
Notice the pauses at various points. These are very bad for plasma and on spinning tooling (mills) will cause rubbing and will dull tools.
S-Curve freezing - requiring power cycle of mesa card and PC to get working again:
please let me know what else I can look at or if you need some kind of logs captured
cheers - J
Linucnc plasma test file, Metric Spanner. Acceleration 3000mm/s/s, Feed rate 7000mm/min. max_jerk=6000
Standard Planner
Notice the vibration in the torch head from the sharp changes at high acceleration.
S-Curve
Notice the pauses at various points. These are very bad for plasma and on spinning tooling (mills) will cause rubbing and will dull tools.
S-Curve freezing - requiring power cycle of mesa card and PC to get working again:
please let me know what else I can look at or if you need some kind of logs captured
cheers - J
Attachments:
Last edit: 09 Nov 2023 03:52 by Joco.
The following user(s) said Thank You: Grotius
Please Log in or Create an account to join the conversation.
09 Nov 2023 10:06 - 09 Nov 2023 10:06 #284926
by rodw
Replied by rodw on topic Trajectory Planner using Ruckig Lib
In your screen dump I noticed nan = not a number so perhaps a null pointer has been passed.
I was a bit disappointed with the pauses when cutting. I suspect that they may be due to our implementation. The Plasmac spanner is a very simple file.
I was a bit disappointed with the pauses when cutting. I suspect that they may be due to our implementation. The Plasmac spanner is a very simple file.
Last edit: 09 Nov 2023 10:06 by rodw.
Please Log in or Create an account to join the conversation.
Time to create page: 0.232 seconds