Duet3D / RepRapFirmware

OO C++ RepRap Firmware
GNU General Public License v3.0
944 stars 535 forks source link

Change keepout zones to user instead of machine coordinates #772

Open T3P3 opened 1 year ago

T3P3 commented 1 year ago

In many cases the tool/user coordinates are the most important for keepout areas: 1) CNC machines that change the cutting tool will have different lengths of tool so the Z position in user coordinates needs to stay out the keepout areas. 2) Toolchanging 3d printers, with a no go areas like bed clips will need to coordinates in tool space so the nozzle does not hit them. On the other hand, the Z axis rail and leadscrew area on an e3d toolchanger makes most sense to define in machine coordinates.

T3P3 commented 1 year ago

also consider the impact of workspace co-ordinates:

We need to also test that workspace co-ordinates are taken into account for the keep out zone. As the zone is a physical area in the machine, a keep out zone should be the same machine co-ordinates, no matter the workspace offset.

dc42 commented 1 year ago

Changing keepout zones to use user coordinates would cause them to move when changing to a workplace with a different origin, which would in most cases be undesirable.

Although it might be useful to take account f the Z offset of a tool when applying a keepout zone, it is less obvious whether applying X and Y tool offsets would be a good idea. For example, if a tool head carries two nozzles spaced some X and/or Y distance apart, and the keepout zone is to avoid the tool head crashing into something, then we definitely want to use machine coordinates for X and Y not user coordinates.

lucas-wilkins commented 1 year ago

How about local (user coordinate / tool assigned) keepout zones and global (machine coordinate) keepout zones?

T3P3 commented 1 year ago

The key reason for using user co-ordinates is variable tool length. Especially in CNC with a different cutting tool potentially being a different length.

It may be an over simplification to specify Z as the axis impacted by tool length. It is in a traditional routing application but adding in rotary axes could change this.

A keepout zone should ideally be a fixed area in machine co-ordinates. But the position that the tool tip is at that could violate the zone should take into account the tool offsets.

T3P3 commented 1 year ago

keep out zones will also need to be considered when cutter radius compensation is implemented.

T3P3 commented 1 year ago

Keeping this in machine co-ordinates for now. Will re-evaluate in a future release for optional tool offsets application.

Braintoe commented 6 months ago

Another use case would be to avoid crashes with print bed clips or such on a 3D printer - for this case I would very much prefer these valuse to be machine coordinates, not tool/user coordinates. But I also understand the reason for defining a keep-out zone as a tool/user coordinate. Might it be a way forward to let the user choose which case he wants - either by creating a second command "M599.2 - Define tool keepout zone" which then uses tool/user coordinates, or by adding a flag to M599 on how to interpret the coordinate?