From a44c3fbbe6cd56d19d3083ad5b50ca0d07954e6e Mon Sep 17 00:00:00 2001 From: Henrik Date: Fri, 17 May 2019 10:07:36 +0200 Subject: [PATCH] 1.0.3 - Added more clarification in the README file, hopfully this will clear up any confusion --- LICENSE | 2 ++ README.md | 23 +++++++++++++++++++---- library.properties | 6 +++--- setup/3DOFSetup.png | Bin 0 -> 34830 bytes setup/4DOFSetup.png | Bin 0 -> 26387 bytes src/FABRIK2D.cpp | 2 +- src/FABRIK2D.h | 2 +- 7 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 setup/3DOFSetup.png create mode 100644 setup/4DOFSetup.png diff --git a/LICENSE b/LICENSE index fa44a3c..80606bb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,5 @@ +MIT License + Copyright (c) 2018 Henrik Söderlund Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index ec27314..b1a6c7a 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ FABRIK based 2D Inverse kinematics solver ===== *************************************************************** -* FABRIK 2D inverse kinematics solver - Version 1.0.1 +* FABRIK 2D inverse kinematics solver - Version 1.0.3 * By Henrik Söderlund -* This Library is licensed under a GPLv3 License +* This Library is licensed under a MIT License *************************************************************** A FABRIK based inverse kinematics solver for Arduino. @@ -52,10 +52,12 @@ void loop() { // Write to the servos with limits, these will probably not be the same // for your manipulator and will have to be changed depending on your - // setup. + // setup. Since the library may output negative angles, it is important + // to apply limits before sending the angles to the servos! shoulder.write(min(180, max(0, shoulderAngle + 180/2))); elbow.write(min(180, max(0, elbowAngle + 180/2))); + // The following delay is just a part of this example delay(1000); // Solve IK, move down to x=150, y=10 @@ -71,6 +73,7 @@ void loop() { shoulder.write(min(180, max(0, shoulderAngle + 180/2))); elbow.write(min(180, max(0, elbowAngle + 180/2))); + // The following delay is just a part of this example delay(1000); } ``` @@ -94,6 +97,18 @@ Five usage examples are included which give more in-depth information: :------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------: ![Example3DOFGrippingOffset](https://github.com/henriksod/Fabrik2DArduino/blob/master/examples/example_3DOFGrippingOffset/preview.gif) | ![Example4DOF](https://github.com/henriksod/Fabrik2DArduino/blob/master/examples/example_4DOF/preview.gif) +Robot Arm Configuration +------------ +Due to many requests by email, I have decided to provide you with figures illustrating the configuration of the robot arm that is necessary for this library to work as it is supposed to. Remember that these are only examples of how your arm could look like, but the same concept is applied to any arm that you use with this library. + +Robot arm configuration in 2D: +![3DOFSetup](https://github.com/henriksod/Fabrik2DArduino/blob/master/setup/3DOFSetup.png) + +Robot arm configuration in 3D: +![4DOFSetup](https://github.com/henriksod/Fabrik2DArduino/blob/master/setup/4DOFSetup.png) + +What is important, and can be seen in the figures, is that the servos' angles have to be zero when the link is parallel to the previous link. By setting up the servos in this manner, the arm will be pointing straight up when all joint angles are set to zero. + Installation ------------ Clone this repository to your local machine, and place it in your Arduino libraries folder as 'Fabrik2DArduino'. @@ -120,4 +135,4 @@ Methods of Fabrik2D class Notice ------------ -It is recommended that you implement your own acceleration and velocity functions to make sure that your manipulator does not snap into the solved positions (which could cause breakage or slipping)! One way of doing this is to just increment the x and y positions and solving inverse kinematics over time until the manipulator has reached it's destination. +It is recommended that you implement your own acceleration and velocity functions to make sure that your manipulator does not snap into the solved positions (which could cause breakage or slipping)! One way of doing this is to interpolate the joint angles over time until the manipulator has reached it's destination. I would reccoment using [RAMP](https://github.com/siteswapjuggler/RAMP), an Arduino interpolation library made by [siteswapjuggler](https://github.com/siteswapjuggler). diff --git a/library.properties b/library.properties index bdf9ee1..b5d73c7 100644 --- a/library.properties +++ b/library.properties @@ -1,7 +1,7 @@ name=Fabrik2D -version=1.0.2 -author=Henrik Söderlund -maintainer=Henrik Söderlund +version=1.0.3 +author=Henrik Söderlund +maintainer=Henrik Söderlund sentence=A library for solving inverse kinematics in 2 dimensions using the FABRIK algorithm. paragraph=FABRIK is an iterative inverse kinematics solver algorithm by Andreas Aristidou, Joan Lasenby. It is optimal for computationally inefficient systems. category=Data Processing diff --git a/setup/3DOFSetup.png b/setup/3DOFSetup.png new file mode 100644 index 0000000000000000000000000000000000000000..f8959be8cf9fcc3ec2518cbd32b245134f0b01a9 GIT binary patch literal 34830 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 UCe&^OGeKQa)VPqXa3$b>0M}C(2><{9 literal 0 HcmV?d00001 diff --git a/setup/4DOFSetup.png b/setup/4DOFSetup.png new file mode 100644 index 0000000000000000000000000000000000000000..cfcdf022e525802ce633e423ac926cb7fbed8976 GIT binary patch literal 26387 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 literal 0 HcmV?d00001 diff --git a/src/FABRIK2D.cpp b/src/FABRIK2D.cpp index ecde32a..4f3a505 100644 --- a/src/FABRIK2D.cpp +++ b/src/FABRIK2D.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** - * FABRIK 2D inverse kinematics solver - Version 1.0.0 + * FABRIK 2D inverse kinematics solver - Version 1.0.3 * by Henrik Söderlund * * Copyright (c) 2018 Henrik Söderlund diff --git a/src/FABRIK2D.h b/src/FABRIK2D.h index cfa5b05..8070cf7 100644 --- a/src/FABRIK2D.h +++ b/src/FABRIK2D.h @@ -1,5 +1,5 @@ /********************************************************************************************** - * FABRIK 2D inverse kinematics solver - Version 1.0.1 + * FABRIK 2D inverse kinematics solver - Version 1.0.3 * by Henrik Söderlund * * Copyright (c) 2018 Henrik Söderlund