From 1076355d39473fe7098a88188f119f06ce759dd8 Mon Sep 17 00:00:00 2001 From: 0x23 Date: Mon, 29 Sep 2025 11:05:09 +0200 Subject: [PATCH 01/10] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index befb21f..861dbf4 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,12 @@ A 'magnetic gearing' approach increases the resolution of the low-cost magnetic The device can be controlled via simple G-Code commands over a USB serial interface and is thus easily integrated into other projects. The firmware implements a complete motion planning stack with look-ahead for smooth and accurate path following capabilities. + +## 💬 NEW: Discord Server + +Visit the projects community [Discord Server](https://discord.gg/km6RvSvX) to meet and discuss subjects related to the project, +get help for the build or share ideas and applications. + ## 🐍 NEW: Python-API The lightweight Python API handles all serial communication and provides convenient command execution and debug message printing. From b50bfd19ad1502aaf173a33394ee56a2209530fe Mon Sep 17 00:00:00 2001 From: Gustavo Alberto <83519205+gustavo-alberto@users.noreply.github.com> Date: Wed, 1 Oct 2025 20:30:06 -0300 Subject: [PATCH 02/10] chore: add kicad backup folder and gerber files to gitignore --- electronics/.gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/electronics/.gitignore b/electronics/.gitignore index 4e48574..499d81a 100644 --- a/electronics/.gitignore +++ b/electronics/.gitignore @@ -24,3 +24,10 @@ fp-info-cache # Footprint association file (exported from Pcbnew) *.cmp + +# Kicad default backup folder +*-backups/ + +# Gerber files +*.g* +*.drl From dc488770be2a964f87fcdb4fcac26aefd08251cd Mon Sep 17 00:00:00 2001 From: Gabriel Oliveira Date: Fri, 3 Oct 2025 23:31:01 -0300 Subject: [PATCH 03/10] add NeoPixelConnect lib dependency on platformio.ini --- firmware/MotionControllerRP/platformio.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/MotionControllerRP/platformio.ini b/firmware/MotionControllerRP/platformio.ini index 3bb553f..6696468 100644 --- a/firmware/MotionControllerRP/platformio.ini +++ b/firmware/MotionControllerRP/platformio.ini @@ -25,4 +25,5 @@ platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = rpipico2 # RP2530 # board = rpipico # RP2040 -framework = arduino \ No newline at end of file +framework = arduino +lib_deps = mryslab/NeoPixelConnect From 8a1d8a5e706d07af6071d9fe8b77f661278674ca Mon Sep 17 00:00:00 2001 From: Gabriel Oliveira Date: Fri, 3 Oct 2025 23:36:42 -0300 Subject: [PATCH 04/10] correct typo on IKinemtaicModel class name --- .../kinematic_model_base.cpp | 0 .../kinematic_model_base.h | 6 +++--- .../kinematic_model_delta3d.cpp | 0 .../kinematic_model_delta3d.h | 6 +++--- firmware/MotionControllerRP/src/main.cpp | 4 ++-- .../src/motion_control/path_planner.cpp | 4 ++-- .../MotionControllerRP/src/motion_control/path_planner.h | 8 ++++---- .../src/motion_control/path_segment.cpp | 4 ++-- .../MotionControllerRP/src/motion_control/path_segment.h | 6 +++--- firmware/MotionControllerRP/src/robot.cpp | 4 ++-- firmware/MotionControllerRP/src/robot.h | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) rename firmware/MotionControllerRP/src/{kinemtaic_models => kinematic_models}/kinematic_model_base.cpp (100%) rename firmware/MotionControllerRP/src/{kinemtaic_models => kinematic_models}/kinematic_model_base.h (87%) rename firmware/MotionControllerRP/src/{kinemtaic_models => kinematic_models}/kinematic_model_delta3d.cpp (100%) rename firmware/MotionControllerRP/src/{kinemtaic_models => kinematic_models}/kinematic_model_delta3d.h (90%) diff --git a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_base.cpp b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_base.cpp similarity index 100% rename from firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_base.cpp rename to firmware/MotionControllerRP/src/kinematic_models/kinematic_model_base.cpp diff --git a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_base.h b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_base.h similarity index 87% rename from firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_base.h rename to firmware/MotionControllerRP/src/kinematic_models/kinematic_model_base.h index c4639ab..38a0126 100644 --- a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_base.h +++ b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_base.h @@ -9,11 +9,11 @@ class Pose6DF; -//--- IKinemtaicModel ------------------------------------------------------------------- +//--- IKinematicModel ------------------------------------------------------------------- -class IKinemtaicModel { +class IKinematicModel { public: - virtual ~IKinemtaicModel() {}; + virtual ~IKinematicModel() {}; // returns the number of joints virtual int get_joint_count(); diff --git a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_delta3d.cpp b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_delta3d.cpp similarity index 100% rename from firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_delta3d.cpp rename to firmware/MotionControllerRP/src/kinematic_models/kinematic_model_delta3d.cpp diff --git a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_delta3d.h b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_delta3d.h similarity index 90% rename from firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_delta3d.h rename to firmware/MotionControllerRP/src/kinematic_models/kinematic_model_delta3d.h index e6b5919..788cf9a 100644 --- a/firmware/MotionControllerRP/src/kinemtaic_models/kinematic_model_delta3d.h +++ b/firmware/MotionControllerRP/src/kinematic_models/kinematic_model_delta3d.h @@ -16,9 +16,9 @@ class Pose6DF; -//--- KinemtaicModel_Delta3D ------------------------------------------------------------ +//--- KinematicModel_Delta3D ------------------------------------------------------------ -class KinematicModel_Delta3D : public IKinemtaicModel { +class KinematicModel_Delta3D : public IKinematicModel { public: KinematicModel_Delta3D(); @@ -46,4 +46,4 @@ bool circle_sphere_intersection(double r1, const Vec3F& p, double r2, Vec3F inte bool three_sphere_intersection(const Vec3F& p1, float r1, const Vec3F& p2, float r2, const Vec3F& p3, float r3, - Vec3F intersections[2]); \ No newline at end of file + Vec3F intersections[2]); diff --git a/firmware/MotionControllerRP/src/main.cpp b/firmware/MotionControllerRP/src/main.cpp index ef10bad..683ba2a 100644 --- a/firmware/MotionControllerRP/src/main.cpp +++ b/firmware/MotionControllerRP/src/main.cpp @@ -18,7 +18,7 @@ #include "robot.h" #include "utilities/logging.h" #include "utilities/frequency_counter.h" -#include "kinemtaic_models/kinematic_model_delta3d.h" +#include "kinematic_models/kinematic_model_delta3d.h" #include "version.h" #include "hw_config.h" #include "LittleFS.h" @@ -161,4 +161,4 @@ void setup() { void loop() { main_core0(); -} \ No newline at end of file +} diff --git a/firmware/MotionControllerRP/src/motion_control/path_planner.cpp b/firmware/MotionControllerRP/src/motion_control/path_planner.cpp index 376271d..b85b433 100644 --- a/firmware/MotionControllerRP/src/motion_control/path_planner.cpp +++ b/firmware/MotionControllerRP/src/motion_control/path_planner.cpp @@ -12,7 +12,7 @@ #include -PathPlanner::PathPlanner(IKinemtaicModel* kinematic_model, float time_step) { +PathPlanner::PathPlanner(IKinematicModel* kinematic_model, float time_step) { PathPlanner::segment_time_step = time_step; PathPlanner::kinematic_model = kinematic_model; @@ -23,7 +23,7 @@ PathPlanner::PathPlanner(IKinemtaicModel* kinematic_model, float time_step) { PathPlanner::~PathPlanner() { } -void PathPlanner::set_kinematic_model(IKinemtaicModel* kinematic_model) { +void PathPlanner::set_kinematic_model(IKinematicModel* kinematic_model) { PathPlanner::kinematic_model = kinematic_model; } diff --git a/firmware/MotionControllerRP/src/motion_control/path_planner.h b/firmware/MotionControllerRP/src/motion_control/path_planner.h index 9064901..b48734f 100644 --- a/firmware/MotionControllerRP/src/motion_control/path_planner.h +++ b/firmware/MotionControllerRP/src/motion_control/path_planner.h @@ -14,7 +14,7 @@ //*** CLASS ***************************************************************************** -class IKinemtaicModel; +class IKinematicModel; //--- PathPlanner ----------------------------------------------------------------------- @@ -24,11 +24,11 @@ class PathPlanner { static constexpr int JS_QUEUE_SIZE = 32; public: - PathPlanner(IKinemtaicModel* kinematic_model, float time_step); + PathPlanner(IKinematicModel* kinematic_model, float time_step); ~PathPlanner(); // sets the kinematic model for foreward and inverse kinematic calculations - void set_kinematic_model(IKinemtaicModel* kinematic_model); + void set_kinematic_model(IKinematicModel* kinematic_model); // adds a new cartesian space path segment to the planner queue bool add_cartesian_path_segment(const CartesianPathSegment& path_segment); @@ -67,7 +67,7 @@ class PathPlanner { RingBuffer ct_path_segment_queue; RingBuffer js_path_segment_queue; - IKinemtaicModel* kinematic_model; + IKinematicModel* kinematic_model; JointSpacePathSegmentGenerator* segment_generator = nullptr; float segment_time_step; LinearAngular junction_deviation; diff --git a/firmware/MotionControllerRP/src/motion_control/path_segment.cpp b/firmware/MotionControllerRP/src/motion_control/path_segment.cpp index 27c7402..f9adcf0 100644 --- a/firmware/MotionControllerRP/src/motion_control/path_segment.cpp +++ b/firmware/MotionControllerRP/src/motion_control/path_segment.cpp @@ -7,7 +7,7 @@ #include "path_segment.h" #include "utilities/logging.h" -#include "kinemtaic_models/kinematic_model_base.h" +#include "kinematic_models/kinematic_model_base.h" //--- MotionProfileConstAcc ------------------------------------------------------------- @@ -248,7 +248,7 @@ bool JointSpacePathSegment::is_initialized() { JointSpacePathSegmentGenerator::JointSpacePathSegmentGenerator( const CartesianPathSegment* path_segment, - IKinemtaicModel* kinematic_model, + IKinematicModel* kinematic_model, float time_step) { JointSpacePathSegmentGenerator::path_segment = path_segment; diff --git a/firmware/MotionControllerRP/src/motion_control/path_segment.h b/firmware/MotionControllerRP/src/motion_control/path_segment.h index e5342a6..0f793c1 100644 --- a/firmware/MotionControllerRP/src/motion_control/path_segment.h +++ b/firmware/MotionControllerRP/src/motion_control/path_segment.h @@ -17,7 +17,7 @@ constexpr int NUM_JOINTS = 3; //*** CLASS ***************************************************************************** -class IKinemtaicModel; +class IKinematicModel; //--- JointInfo ------------------------------------------------------------------------- @@ -127,7 +127,7 @@ class JointSpacePathSegmentGenerator { public: JointSpacePathSegmentGenerator( const CartesianPathSegment* path_segment, - IKinemtaicModel* kinematic_model, + IKinematicModel* kinematic_model, float time_step ); @@ -143,6 +143,6 @@ class JointSpacePathSegmentGenerator { float current_joint_pos[NUM_JOINTS]; // current joint positions const CartesianPathSegment* path_segment = nullptr; - IKinemtaicModel* kinematic_model; + IKinematicModel* kinematic_model; }; diff --git a/firmware/MotionControllerRP/src/robot.cpp b/firmware/MotionControllerRP/src/robot.cpp index 2bc6075..c94e0f3 100644 --- a/firmware/MotionControllerRP/src/robot.cpp +++ b/firmware/MotionControllerRP/src/robot.cpp @@ -10,7 +10,7 @@ #include "hw_config.h" #include "utilities/logging.h" #include "utilities/utilities.h" -#include "kinemtaic_models/kinematic_model_delta3d.h" +#include "kinematic_models/kinematic_model_delta3d.h" #include "servo_control/homing_controller.h" #include "servo_control/actuator_calibration.h" #include "pico/multicore.h" @@ -779,4 +779,4 @@ void Robot::process_calibrate_joint_command(const GCodeCommand& cmd, std::string bool ok = calibrate_joint(idx, store_calibration); reply = ok ? "ok\n" : "error\n"; -} \ No newline at end of file +} diff --git a/firmware/MotionControllerRP/src/robot.h b/firmware/MotionControllerRP/src/robot.h index fd2abfe..b78efe1 100644 --- a/firmware/MotionControllerRP/src/robot.h +++ b/firmware/MotionControllerRP/src/robot.h @@ -130,7 +130,7 @@ class Robot : public ICommandProcessor { RobotJoint* volatile joints[NUM_JOINTS]; spin_lock_t* joints_spin_lock = nullptr; - IKinemtaicModel* kinematic_model; + IKinematicModel* kinematic_model; PathPlanner path_planner; MotionController motion_controller; CommandParser command_parser; @@ -146,4 +146,4 @@ class Robot : public ICommandProcessor { FrequencyCounter servo_loop_frequency_counter; FrequencyCounter motion_controller_frequency_counter; -}; \ No newline at end of file +}; From 50bfc98301a1173cbe63b1a41cb2a2336bc03f4f Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sat, 4 Oct 2025 13:17:50 +0200 Subject: [PATCH 05/10] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 861dbf4..80c6125 100644 --- a/README.md +++ b/README.md @@ -169,5 +169,14 @@ The client must wait for an acknowledgment from the previous command before send *Note: The communication protocol uses 3D vectors for rotations. The direction represents the rotation axis and the length of the vector represents the angle of rotation around the axis. +## Support + +If you'd like to support this project, consider the following: + +- **Contribute to the build guide** – Help improve or expand the build instructions by submitting pull requests or opening issues with suggestions. +- **Characterize typical radial stepper motor shaft error motion** – Measure radial error motion of the shaft of multiple Nema-17 stepper motors (see Cylos Garage for more information about the subject: https://www.youtube.com/watch?v=gt2gK-oxy5s). +- **Give feedback on the build experience** – Let us know what worked, what didn’t, and how the process could be smoother for others. +- **Support the project on Ko-fi** – If you find this project valuable, you can support it financially via [Ko-fi](https://ko-fi.com/diffrectionlimited). + ## Youtube Video [![Watch the video](images/thumbnail.jpg)](https://youtu.be/MgQbPdiuUTw) From b963aa44d117d50408ae37ad859fa2aaa099cf6c Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sat, 4 Oct 2025 13:21:07 +0200 Subject: [PATCH 06/10] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 80c6125..78669e3 100644 --- a/README.md +++ b/README.md @@ -169,14 +169,14 @@ The client must wait for an acknowledgment from the previous command before send *Note: The communication protocol uses 3D vectors for rotations. The direction represents the rotation axis and the length of the vector represents the angle of rotation around the axis. -## Support +## ❤️ Support If you'd like to support this project, consider the following: - **Contribute to the build guide** – Help improve or expand the build instructions by submitting pull requests or opening issues with suggestions. - **Characterize typical radial stepper motor shaft error motion** – Measure radial error motion of the shaft of multiple Nema-17 stepper motors (see Cylos Garage for more information about the subject: https://www.youtube.com/watch?v=gt2gK-oxy5s). - **Give feedback on the build experience** – Let us know what worked, what didn’t, and how the process could be smoother for others. -- **Support the project on Ko-fi** – If you find this project valuable, you can support it financially via [Ko-fi](https://ko-fi.com/diffrectionlimited). +- **Support the project on Ko-fi** – If you find this project valuable, you can support it financially via [Ko-fi](https://ko-fi.com/diffrectionlimited) ☕. ## Youtube Video [![Watch the video](images/thumbnail.jpg)](https://youtu.be/MgQbPdiuUTw) From 4f8ec75def243d639c2a41cc78c63d947c712750 Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sat, 4 Oct 2025 13:26:14 +0200 Subject: [PATCH 07/10] added empty build guide file --- documentation/build_guides/buildguide_3dof.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 documentation/build_guides/buildguide_3dof.md diff --git a/documentation/build_guides/buildguide_3dof.md b/documentation/build_guides/buildguide_3dof.md new file mode 100644 index 0000000..e69de29 From a66b0270b1a2079a4648ec14f3d03bf33b670468 Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sat, 4 Oct 2025 13:45:01 +0200 Subject: [PATCH 08/10] Update buildguide_3dof.md --- documentation/build_guides/buildguide_3dof.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/documentation/build_guides/buildguide_3dof.md b/documentation/build_guides/buildguide_3dof.md index e69de29..874c21e 100644 --- a/documentation/build_guides/buildguide_3dof.md +++ b/documentation/build_guides/buildguide_3dof.md @@ -0,0 +1,16 @@ +# Open MircoManipulator 3DOF - Build Guide + +This document shall provide an easy to follow build guide and help with material selection like glues/magnets and so on. +The following structure is just a placeholder, feel free to contribute... + +## Introduction + +## Bill of Materials + +## Components +### Mechanical Parts +### Magnet Selection + +## Balljoints +## Assembly + From 4b2e7c419e2423009416eba044aa53f759743508 Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sat, 4 Oct 2025 23:28:00 +0200 Subject: [PATCH 09/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78669e3..a65a098 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ If you'd like to support this project, consider the following: - **Contribute to the build guide** – Help improve or expand the build instructions by submitting pull requests or opening issues with suggestions. - **Characterize typical radial stepper motor shaft error motion** – Measure radial error motion of the shaft of multiple Nema-17 stepper motors (see Cylos Garage for more information about the subject: https://www.youtube.com/watch?v=gt2gK-oxy5s). - **Give feedback on the build experience** – Let us know what worked, what didn’t, and how the process could be smoother for others. -- **Support the project on Ko-fi** – If you find this project valuable, you can support it financially via [Ko-fi](https://ko-fi.com/diffrectionlimited) ☕. +- **Support the project on Ko-fi** – If you find this project valuable, you can support it financially via [Ko-fi](https://ko-fi.com/diffractionlimited) ☕. ## Youtube Video [![Watch the video](images/thumbnail.jpg)](https://youtu.be/MgQbPdiuUTw) From f34817e424ca183482e1c6867fbbbcdb50d7198a Mon Sep 17 00:00:00 2001 From: 0x23 Date: Sun, 5 Oct 2025 17:16:29 +0200 Subject: [PATCH 10/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a65a098..18ab21a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The firmware implements a complete motion planning stack with look-ahead for smo ## 💬 NEW: Discord Server -Visit the projects community [Discord Server](https://discord.gg/km6RvSvX) to meet and discuss subjects related to the project, +Visit the projects community [Discord Server](https://discord.gg/maRvMVpa2Q) to meet and discuss subjects related to the project, get help for the build or share ideas and applications. ## 🐍 NEW: Python-API