Time for Lulzbot to upgrade to the latest cura

I’ve been using it, it is a lot better than the lulzbot edition. I have had to write a sed script to do some post processing but I just found out you can also add python scripts. With this piece of information, I don’t see anything that is stopping lulzbot from using the latest cura. It might be a tiny bit kludgy but some of the new slicer features are downright awesome. For example, fuzzy on outside, ability to change number of walls so that the infill gets meshed into the walls better.

What am I missing? Is it a question of human resources? Or that a competitor has their name on the slicer?

image

image

Anyway, if anybody is interested I can write a post on the things that I’ve done. I’ve also been experimenting slicing with and without fuzzy outside walls, and then cutting and pasting at a layer to have it go from fuzzy to not fuzzy.

I want Lulzbot to be successful and Americans to have jobs. So please consider these small improvements.

2 Likes

This is long over due.

1 Like

While you might think that LulzBot is the roadblock, its not. Please see:

https://github.com/Ultimaker/Cura/pull/10232

I am not sure I used or implied roadblock. But short of resource issues, it is not what I assume you are implying. Lulzbot the entity can fix it or fork it or offer money to expedite it.

Are you implying that another competing corporation is the “roadblock”?

Anyway, back to original point…the amount of work to the benefit of lulzbot seems from my perspective to be small compared to the value. Again, I hope Lulzbot has continued success but in this world that means innovating.

Forking it creates fragmentation in that developers will continue to add innovation to the mainline, but those innovations don’t go into the fork. Ideally you want to avoid fragmenting a product.

Having tried many other slicers … the main challenge I’ve faced is dealing with the bed-leveling system. Detecting the bed via conductivity requires having clean points of contact. That requires warming filament to the melting point, polishing the nozzle clean, dropping the temperature below the melting point to ensure that filament doesn’t ooze while probing the corners.

This means I need a way to define temperatures for softening, wiping, and probing … which other slicers don’t seem to define.

BTW, I’ve been doing some testing. Slic3r and Prusa Slicer (a derivative of Slic3r) support doing math in the g-code … which makes it a bit easier to handle the missing variables. I thought Cura supported this as well. I did a bit of testing and could not make this work. Then I did a bit of reading and ultimately discovered that Cura doesn’t support processing math in g-codes.

I say this because Cura supports “material_standby_temperature” … so you’d be able to simulate things like softening temp, wipe temp, and probe temp by doing math. E.g. {[material_standby_temperature] + 20} to get to a soften temp. But unfortunately Cura doesn’t seem to support this after all.

This means that Ultimaker Cura would need to add more standard variables (aka “replacment tokens”) or allow us to have user-defined tokens.

Otherwise you need to customize the start g-code for each new material type … which gets tedious.

BTW, those with Sidekick machines use BLtouch bed-leveling … which bypasses the need for cleaning and wiping the nozzle … so no need to customize start g-code based on filament profiles.

2 Likes

Interesting discussion.

It seems like there is already a fork–cura LE, and innovations have been made in the mainline–at least on cura ultramaker. So we are there.

My suggestion is to easily mitigate the problem you identified and open those new innovations to at least some if not all lulzbot users.

I’m not familiar with the other products Lulzbot sells. I tried to buy one but was talked out of it by of all things a lulzbot sales guy. But cleaning the nozzle automatically seems like a nice feature even if not for conductive probing for I assume backlash compensation.

Anyway, my cura LE has start gcode that looks like this:

;This G-Code has been generated specifically for the LulzBot Sidekick with a Universal Tool Head
G90 			            ; absolute coordinate
M82     	            	; set extruder to absolute mode
G92 E0     					; set extruder position to 0
M117 Heating...         	; progress indicator message on LCD
M109 R{material_soften_temperature} ; soften filament before homing Z
G28 ; Home all axis
G1 E-15 F100 ; retract filament
M140 S{material_bed_temperature_layer_0}     	; start bed heating up
M104 S{material_probe_temperature}     	        ; start extruder heating to probe temp
M190 S{material_bed_temperature_layer_0}     	; wait for bed to reach printing temp
G29     					; start auto leveling
G0 X0 Y0 F5000
M109 R{material_print_temperature_layer_0}     	; wait for extruder to reach initial printing temp
M117 SideKick Printing...   ; progress indicator message on LCD
G1 Z2 E0 F75 ; prime tiny bit of filament into the nozzle

And end gcode that looks like this:

;This G-Code has been generated specifically for the LulzBot Sidekick with a Universal Tool Head
M400                                      ; wait for moves to finish
M140 S{material_part_removal_temperature} ; start bed cooling
M104 S0                                   ; disable hotend
M107                                      ; disable fans
G92 E5                                    ; set extruder to 5mm for retract on print end
M117 Cooling please wait                  ; progress indicator message on LCD
G1 Y-10 Z251.3 E0 F3000                ; move to cooling position
G1 E5                                     ; re-prime extruder
M190 R{material_part_removal_temperature} ; wait for bed to cool down to removal temp
G27                            ; present finished print
M140 S{material_keep_part_removal_temperature_t}; keep temperature or cool down
M77					                      ; End GLCD Print Timer
G90                                       ; absolute positioning
M18 X E				                  	  ; turn off x and e axis
M117 Print Complete.                      ; print complete message

When I bring this code to the mainline Cura ultimaker the generated gcode looks like this, as the parameters in {curly braces} don’t get resolved bu cura ultramaker. The generated gcode has this:

M109 R{material_soften_temperature} ; soften filament before homing Z
;gcode snipped
M140 S{material_bed_temperature_layer_0}      ; start bed heating up
;gcode snipped
M104 S{material_probe_temperature}              ; start extruder heating to probe temp
;gcode snipped
M190 S{material_bed_temperature_layer_0}      ; wait for bed to reach printing temp
;gcode snipped
M109 R{material_print_temperature_layer_0}      ; wait for extruder to reach initial printing temp
;gcode snipped
M140 S{material_part_removal_temperature} ; start bed cooling
;gcode snipped
M190 R{material_part_removal_temperature} ; wait for bed to cool down to removal temp
; gcode snipped
M140 S{material_keep_part_removal_temperature_t}; keep temperature or cool down

However, I modify it with a simply sed script. I’ve since learned that it might be possible to port this code to python, and add it to the scripts folder of cura ultramakers, though I have not yet tried this.

Anyway, here is the trivial sed script.

#!/bin/bash
if test $# -ne 3; then
  echo example:
  echo "    Usage:  $0 <filename>.gcode <material>"
  echo "    Where material can be:"
  echo "    o ABS_IC3D_1_75"
  echo "    o POLY_PLA_1_75"
  echo "    o PETG_1_75"
  echo "    o NinjaFlex_1_75"
  exit
fi

case $1 in
  ABS_IC3D_1_75)
    MST=170
    MPT=170
    MPRT=60
    MKPRT=60
    ;;

  ABS_CHROMA_1_75)
    MST=170
    MPT=170
    MPRT=60
    MKPRT=60
    ;;

  PETG_1_75)
    MST=170
    MPT=170
    MPRT=50
    MKPRT=50
    ;;

  POLY_PLA_1_75)
    MST=140
    MPT=140
    MPRT=45
    MKPRT=45
    ;;

  NinjaFlex_1_75)
    MST=180
    MPT=180
    MPRT=0
    MKPRT=0
    ;;
esac
sed -i "s/{material_soften_temperature}/$MST/g" $2
sed -i "s/{material_probe_temperature}/$MPT/g" $2
sed -i "s/{material_part_removal_temperature}/$MPRT/g" $2
sed -i "s/{material_keep_part_removal_temperature_t}/$MKPRT/g" $2

So, it looks at least for softening and part removal, that there is an easy enough work around.

So softening is covered, and I have confirmed that it helps keep the sidekicks nozzle from oozing.

I assume other curly brace flags could be inserted to have scripts insert the correct wiping and probing commands into the gcode at the correct locations…but I have no experience with wiping and probing lulzbot printers…wish I did.

I didn’t realize you own a TAZ Sidekick. Things are much simpler for you since you have BLtouch to handle bed-leveling. Your printer doesn’t have the nozzle scrubbing pad at the side of the bed.

You do want to do bed-leveling with the bed fully warmed up … as thermal expansion of the bed plate could impact leveling (I have another printer that heats the bed … then waits a few minutes for to allow the bed temp to equalize as they don’t want to check for level when the bed has only just reached the desired temp… they want to wait a bit.

But since your nozzle isn’t being relied upon for bed leveling… you don’t need to worry about reaching the soften temp and retracting. You could just comment out those rows in the g-code.

;This G-Code has been generated specifically for the LulzBot Sidekick with a Universal Tool Head
G90 			            ; absolute coordinate
M82     	            	; set extruder to absolute mode
G92 E0     					; set extruder position to 0
M117 Heating...         	; progress indicator message on LCD
;   M109 R{material_soften_temperature} ; soften filament before homing Z
G28 ; Home all axis
;   G1 E-15 F100 ; retract filament
M140 S{material_bed_temperature_layer_0}     	; start bed heating up
;   M104 S{material_probe_temperature}     	        ; start extruder heating to probe temp
M104 S150                                       ; pre-warm extruder to a value below soften temp
M190 S{material_bed_temperature_layer_0}     	; wait for bed to reach printing temp
G29     					; start auto leveling
G0 X0 Y0 F5000
M109 R{material_print_temperature_layer_0}     	; wait for extruder to reach initial printing temp
M117 SideKick Printing...   ; progress indicator message on LCD
G1 Z2 E0 F75 ; prime tiny bit of filament into the nozzle

The above eliminates the need to worry about the special replacement tokens (temperature variables). Instead of setting it to a material-specific probe temp (not needed) I would just start pre-warming the hot-end to a temperature that is safely below the soft temp for just about any filament. (e.g., I picked 150°C)

As for the End G-code. When LulzBot finishes a print, they pull the bed back and use the print-head to “guard” the part … and wait for the bed to cool down to the {material_part_removal_temperature} … this is a temperature where it might be cool enough for the part to break free of the bed (e.g., if using the PEI surface).

At that point, the bed slides forward to “present” the part to you for removal. And … if you didn’t specify to “keep heating” the bed in Cura (I never do this) it will turn off the bed heater completely. I suppose if you were going to do repeat prints then it might be nice to keep the bed a little warm to save time getting set up for the next print.

You could simply comment out the

M190 R{material_part_removal_temperature} 

and change the

M140 S{material_keep_part_reoval_temperature_t}

to

M140 S0     ; turn off bed heater

This would remove the special dependency on those replacement tokens and let you use the Start/End G-codes in Ultimaker Cura 4.

My other half and I are discussing the notion of writing a Cura plug-in to handle the LulzBot hardware by post-processing the g-code and handle the material soften, wipe, and probe temps possibly using the Cura SDK to be able to pull the {material_standby_temperature} value from the material profile.

2 Likes

Out of curiosity, is that in response to my example here, or were you thinking about doing this all along?

'cause if you were talking about this before, you could have led with that:)

If in response to me, cool, glad I could help. If not, well, sometimes great minds think alike I guess.

I don’t know about that. But I think I either just gave them a path to do a simple workaround, or they were independently thinking about it and I uncovered it. In any event, I do have the latest version of Cura working with my Sidekick 747, so that is good.