Merge branch 'main' of https://github.com/0x23/MicroManipulatorStepper
This commit is contained in:
commit
351266ddbb
15 changed files with 63 additions and 24 deletions
15
README.md
15
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/maRvMVpa2Q) 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.
|
||||
|
|
@ -163,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/diffractionlimited) ☕.
|
||||
|
||||
## Youtube Video
|
||||
[](https://youtu.be/MgQbPdiuUTw)
|
||||
|
|
|
|||
16
documentation/build_guides/buildguide_3dof.md
Normal file
16
documentation/build_guides/buildguide_3dof.md
Normal file
|
|
@ -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
|
||||
|
||||
7
electronics/.gitignore
vendored
7
electronics/.gitignore
vendored
|
|
@ -24,3 +24,10 @@ fp-info-cache
|
|||
|
||||
# Footprint association file (exported from Pcbnew)
|
||||
*.cmp
|
||||
|
||||
# Kicad default backup folder
|
||||
*-backups/
|
||||
|
||||
# Gerber files
|
||||
*.g*
|
||||
*.drl
|
||||
|
|
|
|||
|
|
@ -25,4 +25,5 @@
|
|||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
|
||||
board = rpipico2 # RP2530
|
||||
# board = rpipico # RP2040
|
||||
framework = arduino
|
||||
framework = arduino
|
||||
lib_deps = mryslab/NeoPixelConnect
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
@ -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]);
|
||||
Vec3F intersections[2]);
|
||||
|
|
@ -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"
|
||||
|
|
@ -160,4 +160,4 @@ void setup() {
|
|||
|
||||
void loop() {
|
||||
main_core0();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include <algorithm>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<CartesianPathSegment, CT_QUEUE_SIZE> ct_path_segment_queue;
|
||||
RingBuffer<JointSpacePathSegment, JS_QUEUE_SIZE> js_path_segment_queue;
|
||||
|
||||
IKinemtaicModel* kinematic_model;
|
||||
IKinematicModel* kinematic_model;
|
||||
JointSpacePathSegmentGenerator* segment_generator = nullptr;
|
||||
float segment_time_step;
|
||||
LinearAngular junction_deviation;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -782,4 +782,4 @@ void Robot::process_calibrate_joint_command(const GCodeCommand& cmd, std::string
|
|||
|
||||
bool ok = calibrate_joint(idx, store_calibration, print_measurements);
|
||||
reply = ok ? "ok\n" : "error\n";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue