rotational axis seem to be acting like linear axis
-
Hi all,
I am trying to understand if I am using rotational axis correctly.
As I understand it, when moving from point 1 to point 2 (blue line) in the drawing below linear axis calculate the X and Y contribution to that move and scale each to the correct amount. But when if I was moving along red line the distance traveled is less.
This means moving 2 axis at one time will result in the each individual axis running slower than if I was running each on its own.G0 X2 Y2 f80000
will result in each axis moving slower than
G0 X2 f80000
But if I use rotational axis they do not impact on each other in the same way. So in the example below if I rotate A 90 or both A and B 90 both they will run at the same speed?
But when I set up the axis below, they seem to behave like linear axis, as in moving 2 axis at one time by the same amount results in slower movement for both of them, even though from the reference it looks like A,B,C are all treated as rotational axis
M584 A0:2:5:7 B1:3:6:8 M584 C4:9
I have also tried
M584 A0:2:5:7 B1:3:6:8 M584 C4:9 R1
and
M584 A0:2:5:7 R1 M584 B1:3:6:8 R1 M584 C4:9 R1
and
M584 X0:2:5:7 R1 M584 Y1:3:6:8 R1 M584 Z4:9 R1
my complete config file looks like this at the moment
; Configuration file for Duet WiFi (firmware version 3.3) ; executed by the firmware on start-up ; ; for feeder 01-01-2023 ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"chip-chop" ; set printer name ; Network M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; Drives M569 P0 S0 ; physical drive 0 goes backwards M569 P1 S0 ; physical drive 1 goes backwards M569 P2 S0 ; physical drive 2 goes backwards M569 P3 S0 ; physical drive 3 goes backwards M569 P4 S0 ; physical drive 4 goes backwards M569 P5 S1 ; physical drive 5 goes forwards M569 P6 S6 ; physical drive 6 goes forwards M569 P7 S1 ; physical drive 7 goes forwards M569 P8 S1 ; physical drive 8 goes forwards M569 P9 S9 ; physical drive 9 goes forwards M584 A0:2:5:7 B1:3:6:8 ; set drive mapping M584 C4:9 R1 ; M350 C16 A16 B16 I1 ; E6:6:6 ; configure microstepping with interpolation M92 C40.00 A40.00 B40.00 ; set steps per mm M566 C180.00 A180.00 B180.00 ; set maximum instantaneous speed changes (mm/min) M203 C350000.00 A350000.00 B350000.00 ; set maximum speeds (mm/min) M201 C34000.00 A34000.00 B34000.00 ; set accelerations (mm/s^2) M906 C1800 A1800 B1800 I10 ; set motor currents (mA) and motor idle factor in per cent M84 S1 ; Set idle timeout ; RepRapFirmware applies the M204 accelerations to the move as a whole, and also applies the limits set by M201 to each axis and extruder ; Axis Limits M208 C-10000 A-10000 B-10000 S1 ; set axis minima M208 C10000 A10000 B10000 S0 ; set axis maxima ; Heaters M140 H-1 ; disable heated bed (overrides default heater mapping)
so when running
G92 A0 B0 C0 ;reset cutter motor position to 0 G0 C4000 B4000 f80000 G92 A0 B0 C0 G0 A4000 C4000 f80000 G92 A0 B0 C0 G0 A4000 f80000 G92 A0 B0 C0
I was expecting that moving C and B or A and C would result in a move that is the same speed as just moving A, but it dose not
I think I am missing something? Although I cannot see what!
Any help is much appreciated!
-
@Jasperg hello, the speed is not only limited by the axis limits, but also by
- kinematics limit, depending on what kinematics you use, see LimitSpeedAndAcceleration function in source. If your first example is CoreXY, the diagonal speed is limited e.g.
- E limit, maybe there is a default which is lower than the speeds you use for ABC. You have defined a E, but no speeds for it, if I looked correctly.
- BC or AC calculated speed will probably be higher than A alone, so the firmware may slow it down
-
Hi @JoergS5 ,
Thanks for the advice, but I am not sure it is a speed limit that is causing it... as I am able to get AB to run at the same speed as A alone, but only by scaling up the feed rate when running them both at once, which will be OK as a workaround for what I am doing. But makes it harder to trouble shoot. I will have a look at the kinematics setting you mentioned though, but ideally I would like each axis to be calculated individually.
Do you know am I correct that in theory that rotation axis do not influence each others speed calculation other than scaling them to finish at the same time?
-
@Jasperg said in rotational axis seem to be acting like linear axis:
that in theory that rotation axis do not influence each others
I know of no other limits than I mentioned.
Only thing I can think of could be that the step count is so high that the steps cannot be processed all. You can see it with M122 hiccups.One point I saw is that M566 is very low. For rotary axes, all units are degrees instead of mm, so 180 degrees per minute only for jerk, i. e. 3 degrees per second.
-
@JoergS5 do you know what (r)(c) mean in the out put form the Console below?
if I type M584 into the terminal I get
Driver assignments: X2:7 Y3:8 Z4:9 (r)(c)V0:5 (r)(c)W1:6, 5 axes visible
while my drive mapping is like this
M584 V0:5 R1 S1 ; set drive mapping M584 W1:6 R1 S1 M584 X2:7 R1 S1 M584 Y3:8 R1 S1 M584 Z4:9 R1 S1
then I get
Driver assignments: X2:7 Y3:8 Z4:9 (c)V0:5 (c)W1:6, 5 axes visible
with drive mapping like this
M584 V0:5 R1 ; set drive mapping M584 W1:6 R1 M584 X2:7 R1 M584 Y3:8 R1 M584 Z4:9 R1
and I get
Driver assignments: X2:7 Y3:8 Z4:9 (r)V0:5 (r)W1:6, 5 axes visible
with mapping like this
M584 V0:5 S1 M584 W1:6 S1 M584 X2:7 S1 M584 Y3:8 S1 M584 Z4:9 S1 ; set drive mapping
I am still trying anything I can to understand what is going on. I am beginning to think there is a bug in the source code that means rotational axis are not working I assuming the (r) and (c) are something to do with rotational and linear axis, but no matter what I do it dose not seem to effect the speed of axis movement.
-
-
I realised I never mentioned what firmwhere or hardwhere I am using
M115 FIRMWARE_NAME: RepRapFirmware for Duet 2 WiFi/Ethernet FIRMWARE_VERSION: 3.4.1 ELECTRONICS: Duet WiFi 1.02 or later + DueX5v0.11 FIRMWARE_DATE: 2022-06-01 21:05:38
-
@Jasperg said in rotational axis seem to be acting like linear axis:
know what (r)(c) mean in t
I didn't know it myself but in this cases I look into the source directly. Searching for 584, I found the method DoDriveMapping in GCodes3.cpp, in the section starting with "Driver assignments", there are the cases:
if (platform.IsAxisRotational(axis)) { reply.cat("(r)"); } if (platform.IsAxisContinuous(axis)) { reply.cat("(c)"); } if (platform.IsAxisShortcutAllowed(axis)) { reply.cat("(s)"); }
The last s is probably not implemented yet. (it is commented out in my 3.5 beta release)
Please be aware that the drive letter have default behaviour: XYZUVW as linear, ABCD as rotational.
The continuous means that there is no angle limit, but the axis can rotate freely. It does not mean that the axis rotates continuously, this is another ongoing discussion. Joined with this continuous axis is the shortcut option, this means 0 to 270 degree rotation can be shortcout by rotating 0 to -90 instead. This depends on whether there are hindernesses like wires which inhibit it.
The C table of a 5 axis CNC machine is a nice example where continuous and shortcut would make sense. (sorry, this was OT a bit...) -
@Jasperg to understand the behaviour of the axes better, the thread https://forum.duet3d.com/topic/21880/g1-feedrate may also be helpful, especially what dc42 explained. And the mentioned https://forum.duet3d.com/topic/21816/rotational-axis-abc-limits-behaviour about mixing rotational with linear axes.
-
@JoergS5 Thanks so much for your advice! I'll read over this more, these posts look like they will help me get my head around it better
-
@Jasperg I hope you'll find the solution for your question. It may be a combination of all the topics mentioned.
It helped me a lot the last three years to look into the RRF code to understand it. This is all open source, so it is also changeable by oneself, so there is freedom to implement own ideas. For example, I added some logging to the console here and there (and recompilation) to understand the code better, especially what the different variables mean. Maybe you want to go a similar route like me.
-