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

    G2/G3 arcs with R parameter traverse the longer of the two arcs

    Scheduled Pinned Locked Moved Solved
    General Discussion
    5
    15
    1.4k
    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.
    • TDKundefined
      TDK
      last edited by TDK

      The G2/G3 arc command can be specified using either the R parameter to describe the radius or the I/J parameter to describe the center of the arc.

      If using the R parameter, unless you describe an arc of exactly 180 degrees, there are exactly 2 arcs which can fit the description, one goes through an angle under 180 degrees and one goes through an angle under 180 degrees. Both clockwise. (Counterclockwise arcs suffer the same issue, of course.)

      For example, moving between the two white circles (left to right) here spaced 10 units apart with a counterclockwise arc of radius 7.07, one can construct the shorter (red) arc which traverses 90 degrees or the longer (blue) arc which traverses 270 degrees. Both have the same radius, both start and end at the right points.

      arcs.png

      It appears as though RRF always chooses the longer of the two arcs. At least it does on my machine for the path I just constructed. I would have expected the shorter, since now it appears there is no way to traverse an arc under 180 degrees.

      Is this the intended behavior? It seems like one should never use the R parameter for arcs given this ambiguity and use the (over-constrained) I/J parameters instead. Perhaps there should be another parameter which specifies which of the two arcs to traverse? Or perhaps just use the shorter of the two arcs?

      The Marlin firmware doesn't define the behavior either, but their example has an arc of 90 degrees. I don't have a printer with Marlin on it anymore to test.

      FIRMWARE_NAME: RepRapFirmware for Duet 3 MB6HC FIRMWARE_VERSION: 3.1.1 ELECTRONICS: Duet 3 MB6HC v1.01 or later FIRMWARE_DATE: 2020-05-19b2
      
      1 Reply Last reply Reply Quote 1
      • TDKundefined
        TDK
        last edited by

        It appears in CNC a negative R value will correspond to the arc over 180 degrees and a positive one will correspond to the arc under 180 degrees. Seems reasonable.

        https://www.cnccookbook.com/cnc-g-code-arc-circle-g02-g03/

        In RRF, for my path, a negative R value has the same effect as a positive R value.

        G0 X20 Y0 Z10 F6000
        
        G2 X0 Y-20 R20
        G2 X-20 Y0 R20
        G2 X0 Y20 R20
        G2 X20 Y0 R20
        
        botundefined 1 Reply Last reply Reply Quote 1
        • botundefined
          bot @TDK
          last edited by

          @TDK in your code snippet there, you show the X and Y values being negated, but not the R values. I assume you tested this properly but simply made an error in typing the post?

          *not actually a robot

          TDKundefined 1 Reply Last reply Reply Quote 0
          • TDKundefined
            TDK @bot
            last edited by

            @bot Not a typo, just showing the path I'm using. I don't think RRF claims to support negative radii parameters in any capacity, but that's tangential to the original post.

            For clarity, the following two paths produce the same motion on my machine:

            G0 X20 Y0 Z10 F6000
             
            G2 X0 Y-20 R20
            G2 X-20 Y0 R20
            G2 X0 Y20 R20
            G2 X20 Y0 R20
            
            G0 X20 Y0 Z10 F6000
             
            G2 X0 Y-20 R-20
            G2 X-20 Y0 R-20
            G2 X0 Y20 R-20
            G2 X20 Y0 R-20
            
            1 Reply Last reply Reply Quote 1
            • botundefined
              bot
              last edited by

              Gotcha, sorry for the added confusion lol.

              *not actually a robot

              1 Reply Last reply Reply Quote 0
              • dc42undefined
                dc42 administrators
                last edited by

                Thanks for reporting this. I will see if it can be fixed in the next 3.2 beta release.

                Duet WiFi hardware designer and firmware engineer
                Please do not ask me for Duet support via PM or email, use the forum
                http://www.escher3d.com, https://miscsolutions.wordpress.com

                1 Reply Last reply Reply Quote 0
                • MJLewundefined
                  MJLew
                  last edited by

                  I've just spent a couple of very frustrating days trying to print short arcs with G2 and G3, only to find this thread. Always check the forum!

                  The problem is not just when the r parameter is being used. Even with I and J I cannot achieve an arc of less than 180 degrees.

                  It took me so long because I thought I was chasing a bug in my own code (a flaw in my understanding), but now it seems that its firmware. Grrrr.

                  dc42undefined TDKundefined 2 Replies Last reply Reply Quote 0
                  • dc42undefined
                    dc42 administrators @MJLew
                    last edited by

                    @MJLew said in G2/G3 arcs with R parameter traverse the longer of the two arcs:

                    The problem is not just when the r parameter is being used. Even with I and J I cannot achieve an arc of less than 180 degrees.

                    Please explain. It certainly used to be possible to draw short arcs using the I and J parameters and no R parameter.

                    Duet WiFi hardware designer and firmware engineer
                    Please do not ask me for Duet support via PM or email, use the forum
                    http://www.escher3d.com, https://miscsolutions.wordpress.com

                    1 Reply Last reply Reply Quote 0
                    • TDKundefined
                      TDK @MJLew
                      last edited by

                      @MJLew said in G2/G3 arcs with R parameter traverse the longer of the two arcs:

                      The problem is not just when the r parameter is being used. Even with I and J I cannot achieve an arc of less than 180 degrees.

                      I can't reproduce this. The following moves through four 90 degree segments of a circle with radius 20 without issue:

                      G0 X20 Y0 Z10
                      
                      G2 I-20 J0 X0 Y-20
                      G2 I0 J20 X-20 Y0
                      G2 I20 J0 X0 Y20
                      G2 I0 J-20 X20 Y0
                      
                      1 Reply Last reply Reply Quote 0
                      • MJLewundefined
                        MJLew
                        last edited by

                        My test files attempt to print a cylinder centred at Xc=50, Yc=50 with eight segments in each rotation. I tried using G2 and with G3 and for "method 1" I set the I and J parameters to the i=Xc-x and j=Yc-y (where x and y are the current x and y values), and for "method 2" I set i=x-Xc and j=y-Yc.

                        Total of four tries and no cylinders. With G2 method 1 I got an attractive floret like the arrangement of sunflower seeds, with G2 method 2 I got a fluted cylinder, with G3 method 1 I got a fluted cylinder with smaller flutes, and with G3 method 2 I got a flower. (Picture of prints below.)

                        8d3f9cad-5b83-45dd-9676-5d680b3acdf2-image.png
                        G2 method 1.gcode:

                        G90; absolute positioning
                        M83; extuder to relative
                        G1 X100 E10
                        G1 X55 Y50 Z0
                        ;loops with i=xc-x and j=yc-y
                        G2 X53.535534 Y53.535534 Z0.03125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z0.0625 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z0.09375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z0.125 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z0.15625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z0.1875 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z0.21875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z0.25 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z0.28125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z0.3125 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z0.34375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z0.375 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z0.40625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z0.4375 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z0.46875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z0.5 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z0.53125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z0.5625 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z0.59375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z0.625 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z0.65625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z0.6875 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z0.71875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z0.75 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z0.78125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z0.8125 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z0.84375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z0.875 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z0.90625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z0.9375 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z0.96875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z1 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z1.03125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z1.0625 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z1.09375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z1.125 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z1.15625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z1.1875 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z1.21875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z1.25 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z1.28125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z1.3125 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z1.34375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z1.375 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z1.40625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z1.4375 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z1.46875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z1.5 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z1.53125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z1.5625 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z1.59375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z1.625 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z1.65625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z1.6875 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z1.71875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z1.75 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z1.78125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z1.8125 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z1.84375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z1.875 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z1.90625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z1.9375 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z1.96875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z2 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z2.03125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z2.0625 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z2.09375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z2.125 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z2.15625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z2.1875 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z2.21875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z2.25 E0.327 I-5 J0 F600
                        G2 X53.535534 Y53.535534 Z2.28125 E0.327 I-3.535534 J-3.535534 F600
                        G2 X50 Y55 Z2.3125 E0.327 I0 J-5 F600
                        G2 X46.464466 Y53.535534 Z2.34375 E0.327 I3.535534 J-3.535534 F600
                        G2 X45 Y50 Z2.375 E0.327 I5 J0 F600
                        G2 X46.464466 Y46.464466 Z2.40625 E0.327 I3.535534 J3.535534 F600
                        G2 X50 Y45 Z2.4375 E0.327 I0 J5 F600
                        G2 X53.535534 Y46.464466 Z2.46875 E0.327 I-3.535534 J3.535534 F600
                        G2 X55 Y50 Z2.5 E0.327 I-5 J0 F600
                        
                        G10
                        G1 Y100 Z10
                        G91             ; relative positioning
                        G1 Z5 F100      ; lift Z relative to current position
                        

                        Other files not included because the message was identified incorrectly as spam. (I don't know what the rules are, but I'm pretty sure that they are written out somewhere...)

                        1 Reply Last reply Reply Quote 0
                        • nhofundefined
                          nhof
                          last edited by nhof

                          @MJLew If it's centered around (50,50) and you're starting at (55,50),
                          you could try something like this:

                          ; Quarter arc, starting (55,50), moving CW to (50,45).
                          G1 X55 Y50
                          G2 X53.535534 Y46.464466 I-5.000000 J+0.000000
                          G2 X50.000000 Y45.000000 I-3.535533 J+3.535533
                          

                          It looks like in your example, you might have CCW coordinates specified for a G2 CW arc move, which might be causing the spiral weirdness. Additionally it looks like your center point is defined relative to the destination point, rather than the start point. I think defining center relative to start point of the move is the intended usage.

                          In this case your formula would be something like:

                          I = Xcenter - X(start of move)
                          J = Ycenter - Y(start of move)

                          which should work for both G2(CW) and G3 (CCW) moves

                          1 Reply Last reply Reply Quote 2
                          • MJLewundefined
                            MJLew
                            last edited by

                            Your point about defining the centre relative to the ending points is probably exactly why I am getting the fluted cylinders! Thank you. I'll give it a burl with fixed up points.

                            (I am indeed using CCW coordinates for the G2 move, but that's just because I was unable to upload all of the examples I tried. They include CCW coordinates for G3 moves.)

                            1 Reply Last reply Reply Quote 1
                            • MJLewundefined
                              MJLew
                              last edited by

                              Fixed! Thank you. Now I have a beautiful cylinder.

                              1 Reply Last reply Reply Quote 2
                              • nhofundefined
                                nhof
                                last edited by

                                @MJLew Great! Thinking about it a bit more, as long as the center was specified correctly you would still get cylindrical motion with either CW or CCW command, just a matter of whether it goes the 'long way around' or not.

                                Now we just wait for radius mode to be fixed.

                                dc42undefined 1 Reply Last reply Reply Quote 0
                                • dc42undefined
                                  dc42 administrators @nhof
                                  last edited by

                                  @nhof said in G2/G3 arcs with R parameter traverse the longer of the two arcs:

                                  Now we just wait for radius mode to be fixed.

                                  Should be fixed in 3.2beta 2 released yesterday.

                                  Duet WiFi hardware designer and firmware engineer
                                  Please do not ask me for Duet support via PM or email, use the forum
                                  http://www.escher3d.com, https://miscsolutions.wordpress.com

                                  1 Reply Last reply Reply Quote 2
                                  • First post
                                    Last post
                                  Unless otherwise noted, all forum content is licensed under CC-BY-SA