1. Home
    1. Dashboard
    2. Search
  2. Forum
    1. Unresolved Threads
    2. Members
      1. Recent Activities
      2. Users Online
      3. Team Members
      4. Search Members
      5. Trophys
  3. Articles
  4. Blog
  5. Videos
  6. Jobs
  7. Shop
    1. Orders
  • Login or register
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Forum
  3. Industrial Robot Support and Discussion Center
  4. KUKA Robot Forum
Your browser does not support videos RoboDK Software for simulation and programming
Visit our Mainsponsor
IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Sponsored Ads

Normalizing speed along path

  • Marco
  • July 20, 2016 at 8:17 PM
  • Thread is Resolved
  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • July 20, 2016 at 8:17 PM
    • #1

    Hi there,
    I'm programming my milling paths with Sprutcam and I noticed that there are wide variations in speed. Maybe some of you has already experience with this specific aspect. I suppose it is a matter of some setting. Of course I understand that on very narrow arcs and corners speed should slow down but I have the feeling that now there is too much difference. Below a part of a sample program.

    Code
    DEF BCT_C()
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
    INTERRUPT ON 3
    BAS (#INITMOV,0)
    
    
    $LOAD=LOAD_DATA[1]
    $BASE=BASE_DATA[1]
    $TOOL=TOOL_DATA[11]
    HSD_LOGIC_SET=5
    $OUT[13] = TRUE
    HSD_SPEED_SET=9000
    $TIMER[10] = -10000
    $TIMER_STOP[10] = FALSE
    WHILE NOT $TIMER_FLAG[10]
    ENDWHILE
    
    
    $VEL_AXIS[1]=15
    $VEL_AXIS[2]=15
    $VEL_AXIS[3]=15
    $VEL_AXIS[4]=15
    $VEL_AXIS[5]=15
    $VEL_AXIS[6]=15
    $ACC_AXIS[1]=70
    $ACC_AXIS[2]=70
    $ACC_AXIS[3]=70
    $ACC_AXIS[4]=70
    $ACC_AXIS[5]=70
    $ACC_AXIS[6]=70
    $VEL.CP=0.25
    $ACC.CP=2.3
    $VEL.ORI1=200
    $VEL.ORI2=200
    $ACC.ORI1=100
    $ACC.ORI2=100
    $advance=5
    $APO.CDIS=0.2
    
    
    PTP $POS_ACT
    $VEL.CP=0.25
    PTP {A1 30.572, A2 -26.931, A3 84.576, A4 0.231, A5 -57.729, A6 -0.131, E1 0, E2 0, E3 0, E4 0, E5 0, E6 0}
    LIN {X 894.679, Y 156.286, Z 51.64, A 149.656, B 0.102, C 179.96} C_DIS
    $VEL.CP=0.017
    LIN {X 894.727, Y 156.278, Z 26.24, A 149.656, B 0.102, C 179.96} C_DIS
    $VEL.CP=0.063
    LIN {X 900.678, Y 157.108, Z 26.251, A 149.82, B 0.102, C 179.96} C_DIS
    LIN {X 900.689, Y 157.11, Z 26.251, A 149.821, B 0.102, C 179.96} C_DIS
    LIN {X 900.692, Y 157.111, Z 26.251, A 149.821, B 0.102, C 179.96} C_DIS
    LIN {X 900.697, Y 157.112, Z 26.251, A 149.821, B 0.102, C 179.96} C_DIS
    LIN {X 900.705, Y 157.114, Z 26.251, A 149.821, B 0.102, C 179.96} C_DIS
    LIN {X 900.714, Y 157.118, Z 26.251, A 149.821, B 0.102, C 179.96} C_DIS
    LIN {X 900.723, Y 157.121, Z 26.251, A 149.822, B 0.102, C 179.96} C_DIS
    LIN {X 900.728, Y 157.123, Z 26.251, A 149.822, B 0.102, C 179.96} C_DIS
    LIN {X 900.736, Y 157.127, Z 26.251, A 149.822, B 0.102, C 179.96} C_DIS
    LIN {X 900.746, Y 157.133, Z 26.251, A 149.823, B 0.102, C 179.96} C_DIS
    LIN {X 900.75, Y 157.135, Z 26.251, A 149.823, B 0.102, C 179.96} C_DIS
    LIN {X 900.758, Y 157.14, Z 26.251, A 149.823, B 0.102, C 179.96} C_DIS
    LIN {X 900.763, Y 157.144, Z 26.251, A 149.823, B 0.102, C 179.96} C_DIS
    
    
    [...]
    
    
    LIN {X 702.667, Y 833.838, Z 19.177, A -178.745, B 0.108, C -179.981} C_DIS
    LIN {X 708.601, Y 833.776, Z 19.188, A -178.756, B 0.108, C -179.981} C_DIS
    $VEL.CP=0.25
    LIN {X 708.541, Y 833.785, Z 51.088, A -178.756, B 0.108, C -179.981} C_DIS
    HSD_SPEED_SET=0
    $TIMER[10] = -10000
    $TIMER_STOP[10] = FALSE
    WHILE NOT $TIMER_FLAG[10]
    ENDWHILE
    
    
    PTP {A1 0.000, A2 -100.000, A3 120.000, A4 0.000, A5 -20.000, A6 0.000, E1 0, E2 0, E3 0, E4 0, E5 0, E6 0}
    END
    Display More

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • KonstantinosP
    Reactions Received
    1
    Trophies
    3
    Posts
    30
    • July 21, 2016 at 1:14 AM
    • #2

    Marco,
    You can deal with this problem in a number of ways. A very basic way could be a script that would parse your code and estimate the distance between subsequent points and when it encounters a length greater than X then divide that distance into smaller line segments by inserting a number of equidistant, colinear points(LIN commands)set by you. That forces the robot to go through dense in points areas all the time and maintain a more or less consistent speed. More sophisticated scripts could adjust speeds and acceleration on a per-point almost level where needed, considering again changes in length between two points.
    A more practical way is to choose for roughing especially, contour milling strategy. Never worked with Sprutcam but I am sure they have it. Contour roughing will output for the most part curves (hence dense in points)that they are offsets of the intersection curves of a plane with the geometry of the part. If there is an area in your part that is planar then it will output straight lines again as a contour but you can trick it by placing only for the roughing a dummy surface geometry with a slight convexity( not more than a mm) right on top of that area which will brake the linearity of the contours and get you curves again instead of lines. This method will give you a much more consistece in speed Toolpath but at the cost of very large files.
    I hope you found this a bit useful.

    Edited once, last by KonstantinosP (July 21, 2016 at 3:11 AM).

  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • July 21, 2016 at 6:51 AM
    • #3

    Hello Kostantibos,
    of course your comment has been really useful! I have to check my drawing to understand wether arcs, by mistake, have been converted to polylines with too many points (that make robot slow and file really heavy), or I have a sprutcam setup for arcs approximation converting arcs path to high density points polylines. Of course I will rebuild my original curve in order to have a more homogeneous distance between curves control points in order to normalize a bit speed.
    Thanks!
    Marco

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • Online
    vvelikov
    Reactions Received
    6
    Trophies
    4
    Posts
    484
    • July 21, 2016 at 9:47 AM
    • #4

    You can try this option:

    Images

    • path.JPG
      • 21.91 kB
      • 459 × 182
      • 118

    Files

    path.JPG_thumb 10.98 kB – 148 Downloads
  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • July 21, 2016 at 10:06 AM
    • #5

    Good one! I will check the effect of this parameter.

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • KonstantinosP
    Reactions Received
    1
    Trophies
    3
    Posts
    30
    • July 21, 2016 at 1:56 PM
    • #6

    vvelicov:
    So in Sprutcam you can set a max length between two subsequent points and it will break up a long line segment into a collection of shorter line segments? That's great.

  • SkyeFire
    Reactions Received
    1,044
    Trophies
    12
    Posts
    9,391
    • July 21, 2016 at 3:57 PM
    • #7

    Just be careful -- robots don't work well with large numbers of very small moves. You'll need to work out the best compromise between "too many tiny moves" and "moves too large for precise path control."

  • Online
    vvelikov
    Reactions Received
    6
    Trophies
    4
    Posts
    484
    • July 21, 2016 at 4:11 PM
    • #8

    When the movement is not smooth enough i am increasing $APO.CDIS - that improves the transition between the points

  • SkyeFire
    Reactions Received
    1,044
    Trophies
    12
    Posts
    9,391
    • July 21, 2016 at 9:20 PM
    • #9

    Yes, but even with $APO_DIST, it's possible to generate a path with points so close together that the path planner chokes, or the interval falls below $FILTER.

    Also keep in mind, even if $APO_DIST is set to 100mm, if your point-to-point distance is only 5mm, your actual approximation radius is only 2.5mm.

  • KonstantinosP
    Reactions Received
    1
    Trophies
    3
    Posts
    30
    • July 22, 2016 at 4:49 PM
    • #10

    SkyeFire:

    I looked up the $FILTER system variable. Would you be able to elaborate a bit on the effect of choosing a certain value from the range of integers 0-16, and how the magnitude of that value would affect acceleration versus some other smaller or larger value?

    Many thanks in advance.

  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • July 22, 2016 at 8:13 PM
    • #11

    1) After one day of milling and tuning my CAM to get hi precision details I still cannot get sprutcam to do not break big arcs in tiny segments and get the robot slowing down to much. The problem is important as you calibrate spindle speed according to feed speed as well and I'm noticing that tool is overeating when the robot slows down, but I cannot slow spindle speed down otherwise, on fast paths, spreed would be too low... The geometries I export to sprutcam are arcs, so there must be something in sprutcam to control this.

    2)I guess I cannot use $APO.CDIS as I understand (maybe I'm wrong) that it approximates corners by a certain distance, which means that I'm gonna loose precision in details.

    3) I checked the $filter variable and I guess that for milling operations it could be very important to reduce vibrations due to speed and direction change. How doe it works? The highest the value the smoothest? Where I should place this variable?

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • SkyeFire
    Reactions Received
    1,044
    Trophies
    12
    Posts
    9,391
    • July 22, 2016 at 10:44 PM
    • #12
    Quote from KonstantinosP


    SkyeFire:

    I looked up the $FILTER system variable. Would you be able to elaborate a bit on the effect of choosing a certain value from the range of integers 0-16, and how the magnitude of that value would affect acceleration versus some other smaller or larger value?

    Many thanks in advance.

    It's been a while, and the documentaiton I recall was a bit contradictory, but the basic idea of $FILTER is that it established a minimum amount of time (in IPO cycles, IIRC) any motion command must be spread across. The idea is to force a certain minimum degree of motion smoothing, even under RSI. Think of it as a small low-pass filter on the motion planner.

    In effect, if a sequence of three motions (A->B, B->A, A->B) is programmed such that the motion between the points takes less time than $FILTER dictates, the motion planner will slow the motion down so that it is "stretched" out enough to take as long as $FILTER requires. Reducing $FILTER can allow the robot to jerk hard enough on closely-spaced motions that it can damage itself, especially under RSI control.

  • SkyeFire
    Reactions Received
    1,044
    Trophies
    12
    Posts
    9,391
    • July 22, 2016 at 10:47 PM
    • #13
    Quote from Marco


    1) After one day of milling and tuning my CAM to get hi precision details I still cannot get sprutcam to do not break big arcs in tiny segments and get the robot slowing down to much. The problem is important as you calibrate spindle speed according to feed speed as well and I'm noticing that tool is overeating when the robot slows down, but I cannot slow spindle speed down otherwise, on fast paths, spreed would be too low... The geometries I export to sprutcam are arcs, so there must be something in sprutcam to control this.

    2)I guess I cannot use $APO.CDIS as I understand (maybe I'm wrong) that it approximates corners by a certain distance, which means that I'm gonna loose precision in details.

    3) I checked the $filter variable and I guess that for milling operations it could be very important to reduce vibrations due to speed and direction change. How doe it works? The highest the value the smoothest? Where I should place this variable?

    1. Any chance you could control the spindle speed dynamically, so that it speed up and slows down along with the robot's linear speed?
    2. I don't know enough about SprutCAM, but you might be able to use Spline motions?
    3. See my other post. Normally, this variable is set at the factory and never altered except by very high-end users with very exotic requirements. I only toyed with it briefly on one project years ago. In your case, I don't think you want to tamper with it. It's just a matter of being aware that programming a series of very small, tightly-packed motions might behave other than expected, in part due to $FILTER (and other motion-filtering safeties in the robot).

  • Online
    vvelikov
    Reactions Received
    6
    Trophies
    4
    Posts
    484
    • July 22, 2016 at 11:13 PM
    • #14

    Hi Marco, did you asked the Sprutcam team for help? Can'r you use arcs? I think it is switched into the postprocessor - give it a try if you didn't till now.
    As about the $APO.CDIS - yes, it rounds the corners, but in very small scale... it helps me when the points are too dense to avoid wobble movements
    It is not a problem with Sprutcam - it happen to me in Powermill as well. But it shouldn't eat more material when slowing down as it should follow the surface? That is a bit strange... What speed are you using to cut? And material? It sounds like with the speed on the lines you are not cutting all the material may be? Did you check the accuracy of the robot?

  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • July 23, 2016 at 8:03 AM
    • #15

    1) Ok I will investigate things further in Srutcam and let you know.
    2) About dynamic spindle speed control it sounds interesting and important to preserve the tool, I will check it as well. Is there a variable streaming in real time the actual speed of the robot, which I understand is very different respect to the feed rate set in the program?
    3) The problem is not that the tool eats more material when it goes slower, the problem is that the tool stays too much time on the same point. In extreme cases, if your CNC accidentally stops in a point with the spindle on still inside the material you can also get a fire! This is why I need to get rid of very small segments and get the arcs to let the robot run a bit faster and consistently.

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • Online
    vvelikov
    Reactions Received
    6
    Trophies
    4
    Posts
    484
    • July 23, 2016 at 11:15 AM
    • #16

    Do you have Use arcs etc switched on in your machine parameters?
    Like in the attached photo?

    Images

    • arcs.JPG
      • 62.21 kB
      • 513 × 995
      • 43

    Files

    arcs.JPG_thumb 9.82 kB – 134 Downloads
  • KonstantinosP
    Reactions Received
    1
    Trophies
    3
    Posts
    30
    • July 24, 2016 at 4:45 AM
    • #17

    Marco:

    I think we all had similar issues with the robot dropping the feed rate while entering parts of the path very dense in points. I believe your problem is more pronounced in roughing, especially if your strategy involves mainly straight paths and only some areas, probably around the part, where the path is curved and the density of points very high. If you planned your feed rate for the entire program based on how fast the robot moves over long straight lines with only two points basically defining the two end points, then it comes without surprise that it becomes painfully slow around tight curves and dense in points areas.
    One solution would be to plan your speed based on the slowest areas instead. Try the following test. Generate a Toolpath with two straight lines, both 1000mm long. The one it only consists in two end points. On the other line space out points as near as the tolerance of your tool set in CAM. So if say your tool is set at 0.1mm tolerance then put on a 1000mm line 10000 points 0.1mm apart. (By the way, if you are milling large scale with soft materials and large tools, 0.1mm is a ridiculous number to set your tool tolerance by, but I put it as a worst case scenario).
    Run the two lines at the same feed rate with a timer. See how much the speed drops. Divide the min into the max and this is your scaling factor for adjusting your rates in your program.
    Clearly now the problem transfers from the slow areas to the fast areas that now become extremely fast. If you now read again my previous post to your question, it will probably make more sense and you can get an idea of how to deal with it. Once more, the idea is to keep your paths everywhere (reasonably)dense in points so the robot will never have the chance to move as fast as it can, and program your speed as we said based on its speed through the slowest areas but adjusted upwards using the scaling factor found as said.
    Of course that would result in a much heavier file but your feed will become much more consistent.
    The added benefit of having paths with consistent high density in points is the following: it will enhance path accuracy if you ever decide to calibrate your robot for positional accuracy with companies as Dynalog or RoboDK. If you have an error compensation filter that can take the robot safely with accuracy on two subsequent points, unfortunately if they are way apart the one from the other, nothing can assure you that the robot will travel on a dead straight and positionally accurate path whereas if the path is dense in points, then all these points have already been filtered and error-compensated, hence you travel on a straight line.
    I hope that makes some sense.

    Edited once, last by KonstantinosP (July 24, 2016 at 5:15 AM).

  • robot-cnc
    Reactions Received
    10
    Trophies
    4
    Posts
    414
    • August 7, 2016 at 1:53 PM
    • #18

    I think you have to use C_VEL instead of C_DIS.
    This will keep your milling speed constant.
    Set your postprocessor to write lines with the end C_VEL.

  • Marco
    Reactions Received
    3
    Trophies
    3
    Posts
    116
    • August 7, 2016 at 3:10 PM
    • #19

    Good one, I will check the effect of this. I have the feeling that all this approx and acceleration parameters must be set in a very strategic manner to reduce vibrations and improve accuracy and have speed more constant to achieve high precision for milling operations of tiny details. I do a lot of interlocking wooden parts and precision is important. Of course I can accept that milling with a robot is not precise as milling with a Router, but still I'm trying to get the best out of the Kuka. I'm actually wondering if my settings about acceleration are good. I guess I will have to develop a milling test program to fine tune these parameters.

    Kuka KR150-2 KRC2 ed05 V5.6.11<br />VFD TDE Macno<br />Spindle HSD ES915 with Automatic tool changer<br />Sprutcam 11

  • Wall-E
    Reactions Received
    3
    Trophies
    3
    Posts
    245
    • May 15, 2022 at 3:44 PM
    • #20

    Hi Marco, I'm also in need of finding the best settings for wood milling.

    Did the use of C_VEL eliminate those nasty vibrations ?

    What value for C_VEL did you find was the best compromise ?

    Thanks,

Advertising from our partners

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics

Job Postings

  • Anyware Robotics is hiring!

    yzhou377 February 23, 2025 at 4:54 AM
  • How to see your Job Posting (search or recruit) here in Robot-Forum.com

    Werner Hampel November 18, 2021 at 3:44 PM
Your browser does not support videos RoboDK Software for simulation and programming

Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Thread Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™
As a registered Member:
* You will see no Google advertising
* You can translate posts into your local language
* You can ask questions or help the community with your knowledge
* You can thank the authors for their help
* You can receive notifications of replies or new topics on request
* We do not sell your data - we promise

JOIN OUR GREAT ROBOTICS COMMUNITY.
Don’t have an account yet? Register yourself now and be a part of our community!
Register Yourself Lost Password
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on Google Play
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on the App Store
Download