Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    rotational axis seem to be acting like linear axis

    Scheduled Pinned Locked Moved Unsolved
    General Discussion
    2
    10
    473
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Jaspergundefined
      Jasperg
      last edited by

      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
      

      null (1).png

      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?
      null (2).png

      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!

      JoergS5undefined 1 Reply Last reply Reply Quote 1
      • JoergS5undefined
        JoergS5 @Jasperg
        last edited by JoergS5

        @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
        Jaspergundefined 1 Reply Last reply Reply Quote 0
        • Jaspergundefined
          Jasperg @JoergS5
          last edited by Jasperg

          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?

          JoergS5undefined 1 Reply Last reply Reply Quote 0
          • JoergS5undefined
            JoergS5 @Jasperg
            last edited by JoergS5

            @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.

            Jaspergundefined 1 Reply Last reply Reply Quote 0
            • Jaspergundefined
              Jasperg @JoergS5
              last edited by

              @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.

              Jaspergundefined JoergS5undefined 3 Replies Last reply Reply Quote 0
              • Jaspergundefined Jasperg marked this topic as a question
              • Jaspergundefined
                Jasperg @Jasperg
                last edited by

                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
                
                1 Reply Last reply Reply Quote 0
                • JoergS5undefined
                  JoergS5 @Jasperg
                  last edited by JoergS5

                  @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...)

                  1 Reply Last reply Reply Quote 1
                  • JoergS5undefined
                    JoergS5 @Jasperg
                    last edited by

                    @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.

                    Jaspergundefined 1 Reply Last reply Reply Quote 1
                    • Jaspergundefined
                      Jasperg @JoergS5
                      last edited by

                      @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

                      JoergS5undefined 1 Reply Last reply Reply Quote 0
                      • JoergS5undefined
                        JoergS5 @Jasperg
                        last edited by

                        @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.

                        1 Reply Last reply Reply Quote 1
                        • Jaspergundefined Jasperg referenced this topic
                        • First post
                          Last post
                        Unless otherwise noted, all forum content is licensed under CC-BY-SA