Improving positional accuracy / Minimizing backlash effect #1

Open
opened 2026-07-08 12:39:31 +02:00 by osiu97 · 1 comment
Owner

Proposal: Optimize Pathing & Hardware to Mitigate Stepper Backlash

Context: The 28BYJ-48 stepper motors have a significant amount of gear backlash (slop) in their internal reduction gears. Every time a motor reverses direction, the internal motor shaft spins for a few steps before the output shaft engages, leading to positional inaccuracy and drift at the end effector of the 5-bar linkage.

To improve positional accuracy without replacing the motors, we can explore the following solutions:

1. The "Consistent Approach" Method (Firmware or Frontend)

Enforce a rule that the arms must always approach a final target coordinate from the exact same motor direction.

  • How it works: If we decide both motors must always end their movement going Clockwise (CW), any command that requires moving Counter-Clockwise (CCW) will intentionally overshoot the target by a small amount (e.g., 50 steps CCW). It will then reverse and move forward (CW) by 50 steps to reach the final position.
  • Why it works: It ensures the gears are always fully meshed in the exact same direction when the arm comes to rest, completely eliminating backlash variables at the target points.
  • Drawback: Adds a slight "wiggle" (overshoot and return) at the end of some movements.

2. "Slack Take-up" on Reversal (Firmware)

Handle the backlash invisibly under the hood by adding hidden steps during direction changes.

  • How it works: Track the last_direction of each motor in main.cpp. Measure the exact backlash amount B (usually 15–30 steps). Whenever a motor receives a command to reverse direction, the firmware instantly moves the motor an extra B steps in the new direction before it begins counting the actual movement.
  • Why it works: The firmware uses these B steps just to "spool up" the gears until they bite, without updating the currentPosition tracking.

3. Path Sorting / Traveling Salesperson (Frontend)

Minimize the number of reversals that happen during a sequence.

  • How it works: Before sending a sequence (like spelling a word or visiting spots), the frontend sorts the points to minimize drastic direction changes.
  • The Catch: Due to the non-linear IK curves of a 5-bar SCARA linkage, moving in a straight line in Cartesian (X/Y) space often requires the motors to speed up, slow down, and frequently reverse direction anyway. This is helpful but won't eliminate reversals on this specific kinematic setup.

4. Hardware Hack: Elastic Pre-loading

A physical solution to keep the gears permanently engaged.

  • How it works: Attach a light tension spring or rubber band pulling the two elbow joints toward each other (or pulling them toward the base).
  • Why it works: The spring provides a constant, unidirectional force on the linkage. The gears inside the motors are always being pushed against one side of their teeth, taking up the slack permanently. This is a very common and effective trick for cheap robotic arms.
# Proposal: Optimize Pathing & Hardware to Mitigate Stepper Backlash **Context:** The 28BYJ-48 stepper motors have a significant amount of gear backlash (slop) in their internal reduction gears. Every time a motor reverses direction, the internal motor shaft spins for a few steps before the output shaft engages, leading to positional inaccuracy and drift at the end effector of the 5-bar linkage. To improve positional accuracy without replacing the motors, we can explore the following solutions: ## 1. The "Consistent Approach" Method (Firmware or Frontend) Enforce a rule that the arms must always approach a final target coordinate from the *exact same motor direction*. - **How it works:** If we decide both motors must always end their movement going Clockwise (CW), any command that requires moving Counter-Clockwise (CCW) will intentionally *overshoot* the target by a small amount (e.g., 50 steps CCW). It will then reverse and move forward (CW) by 50 steps to reach the final position. - **Why it works:** It ensures the gears are always fully meshed in the exact same direction when the arm comes to rest, completely eliminating backlash variables at the target points. - **Drawback:** Adds a slight "wiggle" (overshoot and return) at the end of some movements. ## 2. "Slack Take-up" on Reversal (Firmware) Handle the backlash invisibly under the hood by adding hidden steps during direction changes. - **How it works:** Track the `last_direction` of each motor in `main.cpp`. Measure the exact backlash amount $B$ (usually 15–30 steps). Whenever a motor receives a command to reverse direction, the firmware instantly moves the motor an extra $B$ steps in the new direction *before* it begins counting the actual movement. - **Why it works:** The firmware uses these $B$ steps just to "spool up" the gears until they bite, without updating the `currentPosition` tracking. ## 3. Path Sorting / Traveling Salesperson (Frontend) Minimize the number of reversals that happen during a sequence. - **How it works:** Before sending a sequence (like spelling a word or visiting spots), the frontend sorts the points to minimize drastic direction changes. - **The Catch:** Due to the non-linear IK curves of a 5-bar SCARA linkage, moving in a straight line in Cartesian (X/Y) space often requires the motors to speed up, slow down, and frequently reverse direction anyway. This is helpful but won't eliminate reversals on this specific kinematic setup. ## 4. Hardware Hack: Elastic Pre-loading A physical solution to keep the gears permanently engaged. - **How it works:** Attach a light tension spring or rubber band pulling the two elbow joints toward each other (or pulling them toward the base). - **Why it works:** The spring provides a constant, unidirectional force on the linkage. The gears inside the motors are always being pushed against one side of their teeth, taking up the slack permanently. This is a very common and effective trick for cheap robotic arms.
Author
Owner

We should try 4 if unable 2 should be easiest

We should try 4 if unable 2 should be easiest
osiu97 added the Kind/Enhancement
Status
Blocked
Priority
Medium
labels 2026-07-08 22:25:22 +02:00
Sign in to join this conversation.