Welcome! Log In Create A New Profile


Edit Marlin for Polar Coordinates

Posted by dexrod 
Edit Marlin for Polar Coordinates
October 03, 2022 05:51PM
Hey all!

I'm building a cantilevered 3d printer, similar to the one in the attached picture. However, I'm not sure how to adapt Marlin to account for this. I need rotation of the arm around the z axis, change of the length of the arm, and the linear motion along the z axis (up-down) shouldn't need any changes since I'll just be using threaded rods for that.
open | download - ApisCor_febr_02-1024x410-1.jpeg (48.2 KB)
Re: Edit Marlin for Polar Coordinates
October 04, 2022 01:49PM
Marlin is not the only firmware. RepRapFirmware supports polar printers natively. You don't even need to recompile it. It runs on 32-bit boards such as a Duet and good STM-based boards.

Large delta printer [miscsolutions.wordpress.com], E3D tool changer, Robotdigg SCARA printer, Crane Quad and Ormerod

Disclosure: I design Duet electronics and work on RepRapFirmware, [duet3d.com].
Re: Edit Marlin for Polar Coordinates
October 04, 2022 05:35PM
Probably easiest to modify the SCARA code, since that's already got angular coordinates involved. The forward and inverse kinematics for polar are much simpler than for SCARA.

void forward_kinematics(const_float_t a, const_float_t b) {
    cartes.x = scara_offset.x + cos(RADIANS(a)) * b;
    cartes.y = scara_offset.y + sin(RADIANS(a)) * b;

void inverse_kinematics(const xyz_pos_t &raw) {
    const float x = raw.x - scara_offset.x, y = raw.y - scara_offset.y;
    delta.set(DEGREES(ATAN2(y, x)), HYPOT2(x, y));

The "axis steps per mm" for X will be in steps per degree, and Y in steps per mm.

scara_offset is the location of the rotary axis relative to the bed zero (center or bottom left corner depending on BED_CENTER_AT_0_0). But in your case you may just set it to 0,0 and avoid placing any models close to the origin.
Sorry, only registered users may post in this forum.

Click here to login