Advanced Search

Search Results (Searched for: )

  • my1987toyota
  • my1987toyota's Avatar
19 Jan 2025 19:53
Brilliant Bambu Lab was created by my1987toyota

Brilliant Bambu Lab

Category: Off Topic and Test Posts

  So their is a lot of buzz around Bambu Lab with their soon to be released firmware for their 3D printers ( X1C for now, the rest later)
where they're starting down the path of closing their echo system and exerting more control of what the printer's owner can or can't
do with the machine they paid for. I myself own an X1C but made sure it couldn't update it's firmware using a temporary router and
loading programs via SD cards.

  All one has to do is a search on YouTube to see what's going on. And all under the guise of safety and security of the end consumer.
(Yeah where have I heard that one before.) Hilariously I was looking into building a Voron to deal with future tariffs imposed in the
US. Now it seems like I will be building one because I refuse to put up with being fenced in by obvious cash grabs and money funnels.
( You will own nothing and be happy ) Oh yeah, hold my caliper

  It's a shame, I really do like my X1C and have recommended them in the past to those not interested in building and tuning
a 3D printer. Yes I was one of them as well. That said If Bambu Lab wants to continue this course then they can go the way of
the Do-Do. So I guess it's either Prusa or Voron for the masses.

If one would like a Louise Rossman take on it enjoy the below


 
  • Stanislavz
  • Stanislavz
19 Jan 2025 19:26
Replied by Stanislavz on topic Custom scara kinematic.

Custom scara kinematic.

Category: General LinuxCNC Questions

Thank you. Did try to make some code, all loks trivial, except i do not undrestood how does we keep our z axis/ ensure 0 of z axis at the middle. ie - if in config i set up z as viable from 0 till 1800, then i could manipulate D1 (console height) and D5 (effector length) as in code below to compensate for this. but i to not see how it would work for different setups or and shell i do the same for forward kinematic. Or better skip both, and just setup machine for -900 till 900 z travel and play coordinate transfer ?  this line : z_transformed = z - D1 + D5 ; // should return as at 0 level of arms for -900
#include "rtapi.h"
#include "rtapi_math.h"
#include "rtapi_string.h"
#include "posemath.h"
#include "hal.h"
#include "kinematics.h"
#include "switchkins.h"

struct scara_data {
    hal_float_t *d1, *d2, *d3, *d4, *d5, *d6;
} *haldata = 0;

#define D1 (*(haldata->d1))
#define D2 (*(haldata->d2))
#define D3 (*(haldata->d3)) // Now used as Z_parallelogram height
#define D4 (*(haldata->d4)) // Keep as fixed second arm length
#define D5 (*(haldata->d5))
#define D6 (*(haldata->d6))

static
int scaraKinematicsForward(const double * joint,
                      EmcPose * world,
                      const KINEMATICS_FORWARD_FLAGS * fflags,
                      KINEMATICS_INVERSE_FLAGS * iflags)
{
    double a0, a1, a3;
    double x, y, z, c;

    a0 = joint[0] * ( PM_PI / 180 );
    a1 = joint[1] * ( PM_PI / 180 );
    a3 = joint[3] * ( PM_PI / 180 );

    a1 = a1 + a0;
    a3 = a3 + a1;

    // Compute projected second arm length dynamically
    double D4_projected = sqrt(D4 * D4 - joint[2] * joint[2]);
    
    x = D2*cos(a0) + D4_projected*cos(a1) + D6*cos(a3);
    y = D2*sin(a0) + D4_projected*sin(a1) + D6*sin(a3);
    
    // Compute parallelogram-based Z
    z = sqrt((D3 - joint[2]) * (D3 - joint[2]) + D4_projected * D4_projected);
    c = a3;

    *iflags = 0;
    if (joint[1] < 90)
        *iflags = 1;

    world->tran.x = x;
    world->tran.y = y;
    world->tran.z = z;
    world->c = c * 180 / PM_PI;

    world->a = joint[4];
    world->b = joint[5];

    return (0);
}

static int scaraKinematicsInverse(const EmcPose * world,
                                  double * joint,
                                  const KINEMATICS_INVERSE_FLAGS * iflags,
                                  KINEMATICS_FORWARD_FLAGS * fflags)
{
    double a3;
    double q0, q1;
    double xt, yt, rsq, cc;
    double x, y, z, c;
    
    double D4_projected, z_transformed;
    
    x = world->tran.x;
    y = world->tran.y;
    z = world->tran.z;
    c = world->c;

    a3 = c * ( PM_PI / 180 );

    xt = x - D6*cos(a3);
    yt = y - D6*sin(a3);
    
    z_transformed = z - D1 + D5 ; // should return as at 0 level of arms for -900

    rsq = xt*xt + yt*yt;
    
    D4_projected = sqrt(D4 * D4 - z_transformed * z_transformed);
    
    cc = (rsq - D2 * D2 - D4_projected * D4_projected) / (2 * D2 * D4_projected);
    if(cc < -1) cc = -1;
    if(cc > 1) cc = 1;
    q1 = acos(cc);

    if (*iflags)
        q1 = -q1;

    q0 = atan2(yt, xt);
    xt = D2 + D4_projected*cos(q1);
    yt = D4_projected*sin(q1);
    q0 = q0 - atan2(yt, xt);

    q0 = q0 * (180 / PM_PI);
    q1 = q1 * (180 / PM_PI);

    joint[0] = q0;
    joint[1] = q1;
    
    // Compute inverse for parallelogram Z
    
    joint[2] = sqrt(z_transformed * z_transformed - D4_projected * D4_projected);
    
    joint[3] = c - ( q0 + q1);
    joint[4] = world->a;
    joint[5] = world->b;

    *fflags = 0;

    return (0);
}    //scaraKinematicsInverse()

#define DEFAULT_D1 1200
#define DEFAULT_D2 1200
#define DEFAULT_D3 600
#define DEFAULT_D4 1500
#define DEFAULT_D5 300
#define DEFAULT_D6 0

static int scaraKinematicsSetup(const  int   comp_id,
                                const  char* coordinates,
                                kparms*      kp)
{
    int res=0;

    haldata = hal_malloc(sizeof(*haldata));
    if (!haldata) goto error;

    res += hal_pin_float_newf(HAL_IN, &(haldata->d1), comp_id,"%s.D1",kp->halprefix);
    res += hal_pin_float_newf(HAL_IN, &(haldata->d2), comp_id,"%s.D2",kp->halprefix);
    res += hal_pin_float_newf(HAL_IN, &(haldata->d3), comp_id,"%s.D3",kp->halprefix);
    res += hal_pin_float_newf(HAL_IN, &(haldata->d4), comp_id,"%s.D4",kp->halprefix);
    res += hal_pin_float_newf(HAL_IN, &(haldata->d5), comp_id,"%s.D5",kp->halprefix);
    res += hal_pin_float_newf(HAL_IN, &(haldata->d6), comp_id,"%s.D6",kp->halprefix);
    if (res) { goto error; }

    D1 = DEFAULT_D1;
    D2 = DEFAULT_D2;
    D3 = DEFAULT_D3;
    D4 = DEFAULT_D4;
    D5 = DEFAULT_D5;
    D6 = DEFAULT_D6;

    return 0;

error:
    return -1;
}    // scaraKinematicsSetup()

int switchkinsSetup(kparms* kp,
                    KS* kset0, KS* kset1, KS* kset2,
                    KF* kfwd0, KF* kfwd1, KF* kfwd2,
                    KI* kinv0, KI* kinv1, KI* kinv2
                   )
{
    kp->kinsname    = "scarakins"; // !!! must agree with filename
    kp->halprefix   = "scarakins"; // hal pin names
    kp->required_coordinates = "xyzabc"; // ab are scaragui table tilts
    kp->allow_duplicates     = 0;
    kp->max_joints = strlen(kp->required_coordinates);

    rtapi_print("\n!!! switchkins-type 0 is %s\n",kp->kinsname);
    *kset0 = scaraKinematicsSetup;
    *kfwd0 = scaraKinematicsForward;
    *kinv0 = scaraKinematicsInverse;

    *kset1 = identityKinematicsSetup;
    *kfwd1 = identityKinematicsForward;
    *kinv1 = identityKinematicsInverse;

    *kset2 = userkKinematicsSetup;
    *kfwd2 = userkKinematicsForward;
    *kinv2 = userkKinematicsInverse;

    return 0;
}     // switchkinsSetup()
  • bnet
  • bnet's Avatar
19 Jan 2025 19:03

Fanuc Serial Pulse Coders - Red cap servos, mesa 7i76e, how to?

Category: Driver Boards

Thanks for confirming this, I haven't used multiple Mesa boards at once before. What a great system.
  • Aciera
  • Aciera's Avatar
19 Jan 2025 18:53 - 19 Jan 2025 18:57
Replied by Aciera on topic Custom scara kinematic.

Custom scara kinematic.

Category: General LinuxCNC Questions

For a simple example of a custom kinematic see
'configs/sim/axis/vismach/millturn'

The kinematic file used is this one:
github.com/LinuxCNC/linuxcnc/blob/master...onents/millturn.comp

These .comp files can be compiled and installed using the 'halcompile' tool.

[edit]
For a more complex example see:
github.com/LinuxCNC/linuxcnc/blob/master.../xyzab_tdr_kins.comp
 
  • chrischan
  • chrischan
19 Jan 2025 18:40
Replied by chrischan on topic Maus funktioniert nicht bei Spindel Start

Maus funktioniert nicht bei Spindel Start

Category: Deutsch

Also manchmal ist die "Lösung" doch simpler als gedacht. Sicherlich ist trotzdem eine Störung durch Spindel und Relais in Verbindung vorhanden. Aber keiner weiß wie gravierend diese ist. Ergebnis ist jedoch, dass eine andere Mouse mein Problem beseitigt.

Ich habe eine andere kabelgebundene Mouse getestet und diese funktioniert problemlos.

Danke an alle. Werde trotzdem noch den Ferrit einsetzen der die Tage kommt. Und damit belasse ich es vorerst.
  • PCW
  • PCW's Avatar
19 Jan 2025 18:33 - 19 Jan 2025 18:55
Replied by PCW on topic Mesa modbus and pktUart

Mesa modbus and pktUart

Category: Other User Interfaces

HAL_BIT type definitely works as this tested, working configuration:


static const hm2_modbus_chan_descriptor_t channels = {
/*  {TYPE,    FUNC, ADDR,   COUNT, pin_name} */
    {HAL_BIT, 1,  0x0000, 8,     "state"},
    {HAL_BIT, 2,  0x0000, 8,     "input"},
    {HAL_BIT, 5,  0x0000, 1,     "relay-0"},
    {HAL_BIT, 5,  0x0001, 1,     "relay-1"},
    {HAL_BIT, 5,  0x0002, 1,     "relay-2"},
    {HAL_BIT, 5,  0x0003, 1,     "relay-3"},
};

Can you post your .mod file?

The inverted enable pin may not be recognized by 2.9.3 but it
should still work.
 
  • vre
  • vre
19 Jan 2025 18:28 - 19 Jan 2025 18:29
Replied by vre on topic Mesa modbus and pktUart

Mesa modbus and pktUart

Category: Other User Interfaces

2.9.3 version
I have tried many config combinations nothing works
HAL_BIT type not supported by linuxcnc
Unsupported HAL pin type (1) in mesa_modbus definition file
Displaying 19921 - 19927 out of 19927 results.
Time to create page: 0.354 seconds
Powered by Kunena Forum