Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed-Time Motion with Input Shaping by Ulendo #25394

Conversation

thinkyhead
Copy link
Member

@thinkyhead thinkyhead commented Feb 16, 2023

This PR adds Fixed-Time Motion Control with various methods of Input Shaping, based on code provided by Ulendo.io. The original implementation, based on Marlin 2.1.1, is posted at https://github.com/S2AUlendo/MarlinCollaborative.

This feature uses a lot of SRAM for the step event buffer and does a lot of extra computation to apply shaping, so it requires a powerful board.

Main changes from the code provided by Ulendo include renaming the new options, allowing for fewer axes and no extruder, general code cleanup, and applying coding standards.

This version adds the G-code M493 to enable Fixed-time motion and set its parameters.

@thinkyhead thinkyhead force-pushed the bf2_ulendo_input_shaping_PR branch 4 times, most recently from 41ea78c to a3f4d38 Compare February 18, 2023 10:16
@thinkyhead thinkyhead force-pushed the bf2_ulendo_input_shaping_PR branch 11 times, most recently from c8453e0 to 808ae0b Compare March 5, 2023 07:45
@thinkyhead thinkyhead force-pushed the bugfix-2.1.x branch 2 times, most recently from e90c213 to 4b9bb85 Compare March 7, 2023 05:17
@javlonsodikov
Copy link
Contributor

Hey there! I wanted to take a moment to leave a comment on your GitHub PR and let you know how excited I am for this future feature to be implemented. Your proposed changes look really promising, and I can tell that a lot of thought and effort has gone into them.

@thinkyhead thinkyhead force-pushed the bugfix-2.1.x branch 6 times, most recently from 27df113 to 8d31429 Compare March 25, 2023 04:25
@thinkyhead thinkyhead force-pushed the bf2_ulendo_input_shaping_PR branch 4 times, most recently from f6e7715 to 6adf539 Compare April 1, 2023 01:30
@thinkyhead thinkyhead force-pushed the bf2_ulendo_input_shaping_PR branch 3 times, most recently from 7831a11 to b7f8869 Compare April 1, 2023 01:39
@thinkyhead thinkyhead merged commit c37fa3c into MarlinFirmware:bugfix-2.1.x Apr 1, 2023
@thinkyhead thinkyhead deleted the bf2_ulendo_input_shaping_PR branch April 1, 2023 02:18
@dc42
Copy link

dc42 commented Apr 3, 2023

Can someone explain what is meant by "Fixed-time motion control"? That term does not appear to be in general use. The entry for M593 at https://reprap.org/wiki/G-code#M493:_Fixed-Time_Motion_Control doesn't explain it either.

@ellensp
Copy link
Contributor

ellensp commented Apr 3, 2023

PDF about it
230119_marlin_fixed_time_ctrl.pdf

mikezs added a commit to mikezs/Marlin that referenced this pull request Apr 5, 2023
* bugfix-2.1.x: (159 commits)
  🐛 Clean up DELTA babystep Z
  🐛 Ensure root for 'M503 C'
  🩹 FT_MOTION Followup
  🔨 Move Docker local test script
  🌐 Update Italian language (MarlinFirmware#25587)
  🐛 Fix Long FIlename lookup (MarlinFirmware#25598)
  ✨ Fixed-Time Motion with Input Shaping by Ulendo (MarlinFirmware#25394)
  🎨  HAS_SHAPING => HAS_ZV_SHAPING
  [cron] Bump distribution date (2023-04-01)
  🧑‍💻 CardReader adjustments (MarlinFirmware#25611)
  🔧 Fix SENSORLESS hit state error (MarlinFirmware#25604)
  🔧  DGUS_LCD_UI selectable options
  [cron] Bump distribution date (2023-03-31)
  🩹 Fix displayed mix percentages
  🎨 Refine probe, more debug
  🐛 Fix _HAS_FAN for fan on Pin 0
  🩹 Fix Ender-3 V2 with no fan
  🩹 Update Trigorilla V006 fan pin
  [cron] Bump distribution date (2023-03-30)
  🔨 MarlinSimUI updates (MarlinFirmware#25589)
  ...

# Conflicts:
#	.github/workflows/test-builds.yml
#	Marlin/Configuration.h
shadow578 added a commit to shadow578/Marlin-H32 that referenced this pull request Apr 7, 2023
* [cron] Bump distribution date (2023-03-05)

* 🐛 Fix apply_power for SPINDLE_SERVO (MarlinFirmware#25465)

* 🐛 Fix Flash EEPROM for STM32G0B1CB (MarlinFirmware#25469)

* 🌐 Update Turkish language (MarlinFirmware#25447)

* [cron] Bump distribution date (2023-03-06)

* 🧑‍💻 Script to make non-accented languages

* 🌐 Update Turkish language

Followup to MarlinFirmware#25447

* [cron] Bump distribution date (2023-03-07)

* 🌐 DGUS Reloaded non-accented French (MarlinFirmware#25443)

Co-authored-by: Scott Lahteine <[email protected]>

* 🔧 Add DGUS_LCD_UI RELOADED conditions

* [cron] Bump distribution date (2023-03-08)

* ✨ Extra Z Servo Probe options (MarlinFirmware#21427)

Co-authored-by: Scott Lahteine <[email protected]>

* 🔧 Update some config.ini options

* 🔨 VSCode + Devcontainer support (MarlinFirmware#22420)

* [cron] Bump distribution date (2023-03-09)

* ✨ Z_SAFE_HOMING_POINT_ABSOLUTE (MarlinFirmware#23069)

* [cron] Bump distribution date (2023-03-10)

* ✨ BTT Octopus Max EZ 1.0, SKR 3.0 / 3.0 EZ (MarlinFirmware#25387)

BTT Octopus Max EZ V1.0 (STM32H723VE/ZE), SKR V3.0 / V3.0 EZ (STM32H723VG)

* [cron] Bump distribution date (2023-03-11)

* 🐛 Fix Anet ET4 SD_SS_PIN (MarlinFirmware#25492)

* [cron] Bump distribution date (2023-03-12)

* BTT Octopus … followup (MarlinFirmware#25495)

Followup to MarlinFirmware#25387

* ⚡️ Exit from ISR on AVR already does sei

Co-Authored-By: tombrazier <[email protected]>

* 🎨 Cosmetic stepper updates

Co-Authored-By: tombrazier <[email protected]>

* ✨ MAX7219_DEBUG_MULTISTEPPING

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Use hal_timer_t for timing vars

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Use cached la_active state

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Use AxisFlags for step_needed

Co-Authored-By: tombrazier <[email protected]>

* [cron] Bump distribution date (2023-03-13)

* ⚡️ Major shaper optimization

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Set steps_per_isr in calc_multistep_timer_interval

Co-Authored-By: tombrazier <[email protected]>

* 🔧 Expose MULTISTEPPING_LIMIT option

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Optimize speed lookup for AVR

Co-Authored-By: tombrazier <[email protected]>

* ⚡️ Update ISR cycle counts

Co-Authored-By: tombrazier <[email protected]>

* 📺 DGUS_RELOADED 1.03 (MarlinFirmware#25490)

* [cron] Bump distribution date (2023-03-14)

* 🐛 Fix Polargraph without Z (MarlinFirmware#25514)

* 🐛 Fix long filename read/report (MarlinFirmware#25509)

* 🩹 Fix IA_CREALITY float, startup (MarlinFirmware#25493)

Followup to MarlinFirmware#25440

* [cron] Bump distribution date (2023-03-15)

* 🎨 Misc. formatting

* 🎨 Misc. tramming menu cleanup (MarlinFirmware#25519)

* 🩹 Fan Menu / Status fixes

Followup to MarlinFirmware#21888

* 🩹 Fix DWIN MarlinUI Fan/E/XY (MarlinFirmware#25502)

* [cron] Bump distribution date (2023-03-16)

* 🔧 Safer default for Z_MIN_PROBE_PIN override (MarlinFirmware#25524)

Co-authored-by: Scott Lahteine <[email protected]>

* ♻️ Refactor PROBE_PT_[123]

* ♻️ Refactor UBL 'G29 J'

* [cron] Bump distribution date (2023-03-17)

* 🚸 Refinements for UBL G29 J (tilt mesh) (MarlinFirmware#25486)

* [cron] Bump distribution date (2023-03-18)

* 🔧 Optional MPC_AUTOTUNE to save 5.5 - 5.8KB

* ✨ Sovol v1.3.1 (Sovol SV06) (MarlinFirmware#25267)

* 🧑‍💻 More IntelliSense-friendly declares

* 🎨 Clean up IA_CREALITY includes (MarlinFirmware#25530)

* 🎨 Suppress warning (MarlinFirmware#25529)

* 🔧 SQUARE_WAVE_STEPPING => EDGE_STEPPING (MarlinFirmware#25526)

Co-Authored-By: Scott Lahteine <[email protected]>

* 🚸 Improve Z-Probe raise for deploy (MarlinFirmware#25498)

Co-authored-by: Scott Lahteine <[email protected]>

* 🐛 Fix LVGL / MKS WiFi long filename (MarlinFirmware#25483)

Co-authored-by: Scott Lahteine <[email protected]>

* 🔨 Fix STM32H723Vx_btt for case-sensitive (MarlinFirmware#25535)

* 🐛 Fix FYSETC Cheetah v2.0 Servo/Probe pins (MarlinFirmware#24635)

Co-authored-by: Scott Lahteine <[email protected]>

* 🐛 Prevent MPC E-permm overrun in Load Filament (MarlinFirmware#25531)

Co-authored-by: Scott Lahteine <[email protected]>

* 🚸 Fix / improve LCD_BED_TRAMMING (MarlinFirmware#25425)

Co-authored-by: Scott Lahteine <[email protected]>

* 🔧 Sanity-check PRINTCOUNTER_SAVE_INTERVAL + ESP32 I2S Exp (MarlinFirmware#25527)

Co-authored-by: Scott Lahteine <[email protected]>

* ⚡️ Smart Adaptive Multi-Stepping (MarlinFirmware#25474)

* 🚸 Temperature Variance Monitor tweaks (MarlinFirmware#23571)

Co-authored-by: Scott Lahteine <[email protected]>

* 🩹 Fix Ender 2 stock LCD (MarlinFirmware#25538)

* ⚡️ Misc. optimizations

* [cron] Bump distribution date (2023-03-19)

* ✨ REPORT_ADAPTIVE_FAN_SLOWING (MarlinFirmware#25537)

* 🩹 Fix a serial_ternary

* ✨ Z_SERVO_DEACTIVATE_AFTER_STOW (MarlinFirmware#24215)

* 🐛 Avoid step rate overflow (MarlinFirmware#25541)

* [cron] Bump distribution date (2023-03-20)

* ✨ PROBING_TOOL (MarlinFirmware#24411)

* [cron] Bump distribution date (2023-03-22)

* ✨ FILAMENT_SWITCH_AND_MOTION (MarlinFirmware#25548)

Co-authored-by: Scott Lahteine <[email protected]>

* 🧑‍💻 ExtUI::onSetPowerLoss

* [cron] Bump distribution date (2023-03-23)

* 🎨 calibration_stage => stage

* [cron] Bump distribution date (2023-03-24)

* 🩹 Reset touch screen calibration on failure (MarlinFirmware#25334)

Co-authored-by: Scott Lahteine <[email protected]>

* 🎨 TMC SPI Pins

Co-Authored-By: Martin Turski <[email protected]>

* 🎨 Pins header comments

Co-Authored-By: Martin Turski <[email protected]>

* 🎨 Wrap font includes

Co-Authored-By: Martin Turski <[email protected]>

* 🎨 LPC_SOFTWARE_SPI => SOFTWARE_SPI

Co-Authored-By: Martin Turski <[email protected]>

* 🔨 INI Updates

Co-Authored-By: Martin Turski <[email protected]>

* 🎨 Misc. fixes, cleanup

Co-Authored-By: Martin Turski <[email protected]>

* 🩹 Update TRONXY_V10 SPI_FLASH pins

* [cron] Bump distribution date (2023-03-25)

* 🩹 Fix Chitu3D V6 default probe pin (MarlinFirmware#25552)

* 🔧 Remove TVPM warning (MarlinFirmware#25551)

* 🐛 Fix MKS Gen L 2.1 MOSFET pins (MarlinFirmware#25542)

* 🩹 Refine MKS boards with a dedicated FAN port (MarlinFirmware#25567)

* 🎨 Rename FAN_PIN to FAN0_PIN (MarlinFirmware#25568)

* 📝 Fix spelling (MarlinFirmware#25563)

* [cron] Bump distribution date (2023-03-26)

* 🎨 Timer tweaks

* 🔧 Refactor endstop state config (MarlinFirmware#25574)

* ✨ AnyCubic Vyper / Vyper LCD (MarlinFirmware#25405)

* 🩹 Fix Touch Calibration first point (MarlinFirmware#25298)

* 🧑‍💻 Auto Fan / Cooler Fan updates (MarlinFirmware#25554)

* 🐛 Prevent divide-by-zero in calc_timer_interval (MarlinFirmware#25557)

* 🔧 Sanity-check for endstop inverting

Followup to MarlinFirmware#25574

* 🔧 Clarify axis disable / timeout (MarlinFirmware#25571)

* [cron] Bump distribution date (2023-03-27)

* 🔨 Fix thread-unsafe deque iteration

* 🐛 Fix AnyCubic Vyper ProcessPanelRequest

Followup to MarlinFirmware#25405

* 🎨 Suppress a type warning (MarlinFirmware#25575)

* ⚡️ Improve TFT DMA for STM32 (MarlinFirmware#25359)

* 🐛 Fix M23 long filename support (MarlinFirmware#25540)

* [cron] Bump distribution date (2023-03-28)

* 🎨 Misc. cleanup

* 🔧 Fix up WiFi options (MarlinFirmware#25586)

* 🔨 Update config.ini endstop states

Followup to MarlinFirmware#25574

* [cron] Bump distribution date (2023-03-29)

* 🔧 Impose Hephestos 2 Bed Kit requirements (MarlinFirmware#25585)

* 🎨 Remove unused ProUI : UBLValidMesh (MarlinFirmware#25591)

* 🔨 Improve Docker local tests support (MarlinFirmware#25583)

* 🔨 MarlinSimUI updates (MarlinFirmware#25589)

* [cron] Bump distribution date (2023-03-30)

* 🩹 Update Trigorilla V006 fan pin

Followup to MarlinFirmware#25568

* 🩹 Fix Ender-3 V2 with no fan

* 🐛 Fix _HAS_FAN for fan on Pin 0

* 🎨 Refine probe, more debug

* 🩹 Fix displayed mix percentages

* [cron] Bump distribution date (2023-03-31)

* 🔧  DGUS_LCD_UI selectable options

* 🔧 Fix SENSORLESS hit state error (MarlinFirmware#25604)

* 🧑‍💻 CardReader adjustments (MarlinFirmware#25611)

* [cron] Bump distribution date (2023-04-01)

* 🎨  HAS_SHAPING => HAS_ZV_SHAPING

* ✨ Fixed-Time Motion with Input Shaping by Ulendo (MarlinFirmware#25394)

Co-authored-by: Ulendo Alex <[email protected]>

* 🐛 Fix Long FIlename lookup (MarlinFirmware#25598)

* 🌐 Update Italian language (MarlinFirmware#25587)

* 🔨 Move Docker local test script

Followup to MarlinFirmware#25583

* 🩹 FT_MOTION Followup

* 🐛 Ensure root for 'M503 C'

* 🐛 Clean up DELTA babystep Z

* 🐛 INVERT_*_DIR for FT_MOTION (MarlinFirmware#25637)

* 🔧 Move DOGLCD options

* 🧑‍💻 Update pinsformat.js

* 📝 Update Ender # labels

* [cron] Bump distribution date (2023-04-07)

* 🚸 Support CoreXY without Z (MarlinFirmware#25630)

* 🎨 Apply const (MarlinFirmware#25643)

* update `pins_Aquila_X2.h` to new format

---------

Co-authored-by: thinkyhead <[email protected]>
Co-authored-by: Hans-Christian Ebke <[email protected]>
Co-authored-by: alextrical <[email protected]>
Co-authored-by: Abdullah YILMAZ <[email protected]>
Co-authored-by: albatorsssx <[email protected]>
Co-authored-by: Kurt Haenen <[email protected]>
Co-authored-by: Sion Williams <[email protected]>
Co-authored-by: Evgeniy Zhabotinskiy <[email protected]>
Co-authored-by: Keith Bennett <[email protected]>
Co-authored-by: tombrazier <[email protected]>
Co-authored-by: Neo2003 <[email protected]>
Co-authored-by: jbubik <[email protected]>
Co-authored-by: Eduard Sukharev <[email protected]>
Co-authored-by: Davide Rombolà <[email protected]>
Co-authored-by: dwzg <[email protected]>
Co-authored-by: ellensp <[email protected]>
Co-authored-by: jamespearson04 <[email protected]>
Co-authored-by: Michael Hill <[email protected]>
Co-authored-by: James Gilliland <[email protected]>
Co-authored-by: Liam Powell <[email protected]>
Co-authored-by: George Fu <[email protected]>
Co-authored-by: Piotr Paczyński <[email protected]>
Co-authored-by: Farva42 <[email protected]>
Co-authored-by: John Robertson <[email protected]>
Co-authored-by: John Lagonikas <[email protected]>
Co-authored-by: StevilKnevil <[email protected]>
Co-authored-by: FilippoR <[email protected]>
Co-authored-by: BIGTREETECH <[email protected]>
Co-authored-by: Martin Turski <[email protected]>
Co-authored-by: Giuliano Zaro <[email protected]>
Co-authored-by: Bob Kuhn <[email protected]>
Co-authored-by: Alexander Gavrilenko <[email protected]>
Co-authored-by: Andrew <[email protected]>
Co-authored-by: John Unland <[email protected]>
Co-authored-by: Chris Pepper <[email protected]>
Co-authored-by: Ulendo Alex <[email protected]>
EvilGremlin pushed a commit to EvilGremlin/Marlin that referenced this pull request Apr 8, 2023
thinkyhead added a commit that referenced this pull request Apr 10, 2023
thinkyhead added a commit to thinkyhead/Marlin that referenced this pull request May 16, 2023
EvilGremlin pushed a commit to EvilGremlin/Marlin that referenced this pull request May 17, 2023
tspiva pushed a commit to tspiva/Marlin that referenced this pull request May 25, 2023
Andy-Big pushed a commit to Andy-Big/Marlin_FB_Reborn that referenced this pull request Jul 11, 2023
@vovodroid
Copy link
Contributor

it requires a powerful board.

Any suggestion for minimum hardware? Is any 32 bit CPU board good enough?

@vovodroid
Copy link
Contributor

Hi, is Ulendo VC algorithm available in Marlin with M493?

There are several modes like

S0: Standard Motion S1: Fixed-Time Motion S10: ZV Input Shaping S11: ZVD Input Shaping S12: ZVDD Input Shaping S13: ZVDDD Input Shaping S14: EI Input Shaping S15: 2HEI Input Shaping S16: 3HEI Input Shaping S17: MZV Input Shaping

but what is meaning of each mode? Is one of them Ulendo VC?

@vovodroid
Copy link
Contributor

@tombrazier ?

@tombrazier
Copy link
Contributor

No, the VC algorithm is not available in Marlin.

You can web search for the terms ZV, ZVD, ZVDD, EI, 2EI, etc. to find out what they mean. Most of the info out there is in the form of academic papers, though.

This link has some graphs that show curves of how well the different algorithms damp resonant frequencies in the region of the configured frequency. You will see that ZV has a fairly narrow band and it gets wider the more D's you add (D is for "derivative" and refers IIRC to the derivatives of the curve at the configured frequency). EI is an alternative which has a small hump at the configured frequency and there are variants with more and more humps, again increasing the width of the frequency band.

Generally a wider band also means more distortion of corners so you want to choose the algorithm with the narrowest band that covers your main resonances.

@vovodroid
Copy link
Contributor

vovodroid commented May 8, 2024

So what is IS algorithm without FT MOTION enabled? ZV?

Also what is difference between default M900 Linear Advance and FT MOTION one?

And what is "Dynamic Frequency mode"?

@tombrazier
Copy link
Contributor

Yes, without FT_MOTION, you get ZV. My input shaping can easily be extended to other algorithms. It's just no one has done it.

The FT_MOTION implementation of linear advance is a completely separate one. I don't know why Ulendo implemented it or how good it is.

Dynamic frequency mode can change the resonant frequency configuration as Z changes (because some machines have different resonant frequencies at different Z heights, I think) or as filament is extruded (because the bed on a bedslinger gets heavier as a print progresses and the resonant frequency decreases).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants