Skycam/SpiderCam

Home Forum Everything Else Skycam/SpiderCam

Tagged: 

Viewing 25 posts - 26 through 50 (of 73 total)
  • Author
    Posts
  • #15253
    DanDan
    Keymaster

    Uh…. they shouldn’t all move together.

    option a) Did you wire all the motors to one driver?

    option b) Maybe your setup thinks the machine is 0mm on each side and the math is failing? :S

    option c) it’s a firmware bug and I need to investigate.

    #15256
    AvatarAnonymous
    Inactive

    Good ideas! I’d guess its option B. I saw the XYZ system dimensions (in mm?) in the firmware previously. I cant find that now. Is it set using the adjustLimits() function? And what might I send over serial input manually to set for instance, my system to X:500mm Y:500mm Z:400mm ?

    thank you again!

    #15257
    AvatarAnonymous
    Inactive

    I see on line 166 of eeprom.h that we check for “MAKELANGELO_HARDWARE_VERSION” value. But that doesn’t appear to be a define elsewhere in the code, so it doesn’t look like adjustDimensions gets called.
    Should this be checking against “MACHINE_HARDWARE_VERSION” instead? Looks like the Skycam would be 6.
    Can’t try until tomorrow, but I will.
    Thanks.


    #if MAKELANGELO_HARDWARE_VERSION == 5 || MAKELANGELO_HARDWARE_VERSION == 6
    adjustDimensions(50,-50,-32.5,32.5);
    saveCalibration();
    #endif

    #15258
    AvatarAnonymous
    Inactive

    I’ve modified “loadConfig()” in hopes it sets my skycam dimensions up correctly. Will test it asap:
    (are the units in cm or mm?)

    void loadConfig() {
    char versionNumber = loadVersion();
    if( versionNumber != EEPROM_VERSION ) {
    EEPROM.write(ADDR_VERSION,EEPROM_VERSION);
    #if MAKELANGELO_HARDWARE_VERSION == 5 || MAKELANGELO_HARDWARE_VERSION == 6 || MACHINE_HARDWARE_VERSION == 6 //ACJ
    float limits[NUM_AXIES*2];
    limits[0] = 60.0;
    limits[1] = -60.0;
    limits[2] = 60.0;
    limits[3] = -60.0;
    limits[4] = 40.0;
    limits[5] = -40.0;
    //adjustDimensions(60.0,-60.0,-60.0,60.0); //how do these get set?
    adjustDimensions(limits); //ACJ
    saveCalibration();
    #endif
    }

    #15263
    AvatarAnonymous
    Inactive

    no go. hmmm. after trying the above, M102 returns:
    (-0.01, -0.01, -0.01) – (-0.01, -0.01, -0.01)

    Not sure what that means exactly, but are those the machine dimensions?
    If so, my adjustDimensions attempt did not work, nor save to eeprom

    #15274
    DanDan
    Keymaster

    adjustDimensions() there would only happen once, when the EEPROM version changes, which is almost never.

    gcode M101 will adjust limits without changing the firmware.

    M101 Annn Tnnn Bnnn
    Change axis A limits to max T and min B

    axis order is XYZUVW, so to change axis X to limit from -10 to +20

    M101 A0 T20 B-10

    I hope this helps.

    #15289
    AvatarAnonymous
    Inactive

    THAT helped a lot actually! THank you! Things are moving in three axes now! Woohoo!

    There seems to be an issue with swapped motors. I’ve wired motors 0,1,2,3 properly to the arduino as in the code.

    I’ve arranged them A, B, C, D (NE, NW, SW, SE) as shown in the original sky cam post.
    Is that right still?

    Lastly, what are the units please? Mm? Cm? My guesses aren’t seeming to arrive at accurate distances or directions.

    Thanks again!

    #15290
    DanDan
    Keymaster

    Everything in the makelangelo code should be in mm. I thought I had documented it better in configure.h that the standard units would be mm and kg… another issue to open in github.

    Thank you for your patience with me. I’m going as fast as I can.

    #15291
    AvatarAnonymous
    Inactive

    Dan, I’m absolutely thrilled that you help me out at all! Rare to see responses to forum inquiries these days, so thank you!
    Your site and projects and mission are awesome and inspiring.

    I hope I can contribute in useful ways to the code at some point too. Trying to get there. 🙂
    Thanks again!

    #19673
    AvatarsillyString
    Participant

    hey dan hows it going.

    looking good your website…things have changed…

    i have now started and run some of your projects i tried the v plotter v2 of yours with ams board…

    and now i want to move up to this one….skycam for lego haha..

    in your link here https://www.marginallyclever.com/2015/02/code-inverse-kinematics-spidercam-skycam/
    you say to use the
    RUMBA controler or a RAMPS shield
    but i see you use the adafruit motor shield v1 is that what you call a ramps?no?
    can i use a cnc shield like so http://www.alselectro.com/stepper-driver-cnc-shield.html
    only cause i dont have a rumba or ramps so would need to order but i got a cnc shield so could try…

    i also read people were asking you to try running it on one arduino control board does the firmware do this or is it still a future idea?

    bassically id like to write some loops and let the skycam run and run…so i dont need a computer running the software or and sd card well unless my loop are miles long…
    so i was wondering if you could help me simplify it…to just the raw bassics?

    as is would i be able to just create a sequence of teleport commands flashed to the arduino would that be fine or is it currently only set to be controlled via your software.?

    thanks allot dan hope things your side of the world are marginally good

    #19674
    DanDan
    Keymaster

    The makelangelo firmware has a skycam option.

    in configure.h,

    
    #define MACHINE_STYLE SKYCAM
    #define MOTHERBOARD BOARD_RUMBA // (or BOARD_RAMPS)
    

    Not many people have been brave enough to try this, so please report back with your tips & quirks, I will try to assist.

    #21012
    AvatarsillyString
    Participant

    well im sort of a bit further.
    could you help me with some things.

    im so far trying to start with the pen pos in the center of the center of the square.say the square is 2x2x2meters.
    how would i set the starting values without using the java software so i could run a loop function with teleport here or there?

    im unsure what this limit is ?is it the lenght in mm?could you give me an example if the i start in the center of a 2×2 cube?
    float limit_ax = 0;
    float limit_ay = 0;
    float limit_az = 0;
    is this the home i.e like you explain in the https://www.marginallyclever.com/2015/02/code-inverse-kinematics-spidercam-skycam/
    is this below c so 0,0,0 start pos?
    float homeX=0;
    float homeY=0;
    float homeZ=0;
    what would this be if again i start with a 2×2 cube?
    float posx, posy, posz;

    and is this end number mm||cm?
    motorStepArray[0] = lround( sqrt(dx*dx+dy*dy+dz*dz) / THREAD_PER_STEP );

    does this function move the skycam in 2d rather than 3d movement?
    void polargraph_line();

    thanks again.

    #21013
    DanDan
    Keymaster

    There are 1000 (one thousand) mm in a meter. so each of your corners would be something like (1000,1000,2000).
    limit_a* is the position of the motor A relative to the origin.

    #21014
    DanDan
    Keymaster

    THREAD_PER_STEP should be mm – the amount of belt moved on each step of each motor. Assumes all motors are the same.
    If you know the pitch of your pulley then you can say thread_per_step = pitch / actualSteps.
    at 1/16 microstepping and 400 steps per turn, with twengty-tooth GT-2 pulleys,

    pitch = 20*2; // GT-2 is 2mm per tooth.
    actualSteps = 16 * 400; // microsteps*full steps per turn
    thread_per_step = pitch / actualSteps;

    M101 will let you adjust teh limit values at run-time so you don’t have to keep rebuilding the code while you figure out the right numbers.
    movement commands like G0 and G1 understand X, Y, and Z.

    #21015
    AvatarsillyString
    Participant

    alright thanks for the quick reply.

    im going to try tonight so ill get back to you if i get in a pickle.

    #21060
    AvatarsillyString
    Participant

    hey dan.

    so i ended up having some more problems.

    im not trying to run the skycam from your software instead im trying to get it working with my own stepper interupt routines.

    but i tried setting it up to test lenghts and stuff like you sugested using M101 and such, but i couldn’t get any stepper movement and currently only have one adafruit motor driver.its already installed on my wall running your wall plotter.

    i tried running the software for the skycam on osx serria 10/12/6 .with no luck

    i get these errors.

    when trying to run osx_runme.sh i get this error.

    Skycam $./osx_runme.sh
    Error: Unable to access jarfile /Users/hero/Desktop/Skycam-master/src/main/java/com/marginallyclever/Skycam/DrawbotGUI.jar

    so i added the DrawbotGUI.jar to the folder.

    and then got this

    Skycam $./osx_runme.sh
    Exception in thread “main” java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:545)
    at java.base/java.net.URLClassLoader.access$100(URLClassLoader.java:83)
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:453)
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:447)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:446)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:374)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
    Caused by: java.lang.ClassNotFoundException: gnu.io.SerialPortEventListener
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    … 14 more

    as i have never ever used java im unsure what to look for.

    i then tried running it from eclipse by importing a maven project and running.
    and i got more errors.

    Description Resource Path Location Type
    The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files SerialConnectionReadyListener.java /Skycam/src/main/java/com/marginallyclever/Skycam line 1 Java Problem

    it seems in both cases some im missing some serial files.

    so im a bit stuck.

    can you confirm that this code here
    https://github.com/MarginallyClever/Skycam
    no runs the skycam on one board and does not need two like before?

    im also still confused about the things i asked last week.

    im now trying to use the kinematics functions and create my own code to get lenghts and telport.

    but i still cant understand how to set limits without have to use software or M101.

    i have no problems recompiling everytime.

    here you say”There are 1000 (one thousand) mm in a meter. so each of your corners would be something like (1000,1000,2000).
    limit_a* is the position of the motor A relative to the origin.”

    could you please give me an example for say like before i want the star/origin to be the center of a square 2x2x2.

    would i do this for each motor?

    float limit_ax = 1000; //1000mm i.e half of 2meters?
    float limit_ay = 1000;
    float limit_az = 1000;

    or would i set this in

    float homeX=1000;
    float homeY=1000;
    float homeZ=1000;

    as id like my home to be the center of the 2x2x2 cube.

    im sorry if im repeating myself i just cant grasp setting the lengths and limits in the firmware.without software.

    here is the code i put together to test the kinematics lenghts.
    https://pastebin.com/8hiGZs88
    it runs steppers and calculates lenghts but when i change x or y pos all lenghts seem to always be equal to each other.which cant be right.

    #21070
    DanDan
    Keymaster

    > The type java.lang.Object cannot be resolved.

    I would Google it and see what stackoverflow says.

    > can you confirm

    code says “Skycam – supports raprapdiscount RUMBA controller”. I don’t have hardware set up to retest it.

    All limits are relative to the origin (0,0,0). In my cube I set the home on the floor in the center at the origin. the corners are 1m away and 2m up, or
    (1000,1000,2000) for limit a,
    (1000,-1000,2000) for limit b,
    (-1000,-1000,2000) for limit c, and
    (-1000,1000,2000) for limit d.

    I hope that helps.

    #21100
    AvatarsillyString
    Participant

    yea that helped allot dan thanks.
    my step values are now looking right.

    im away from home at the moment but will give it a try with steppers attached soon.

    thanks again

    #21491
    AvatarsillyString
    Participant

    hey dan i managed to get it working thanks so much for your help.

    i do have a few mini questions tho.

    since i see you are using a pulley and thread and not a pitched belt pulley why are you using the value #define PULLEY_PITCH (4.0) ?
    and where is the value #define PLOTTER_Z (0.5) from?or used?
    is it distance to the center of all thread lenghts where they are tied in the center? and so the 0.5 is because you are not tying them all together?

    thanks again.

    merry christmas

    #21492
    DanDan
    Keymaster

    I assume we’re talking about https://github.com/MarginallyClever/Skycam/blob/master/skycamFirmware/skycamFirmware.ino

    I must have tried to do belt at some point. Probably got distracted and never finished the demo.

    PLOTTER_Z is an offset. Say your plotter head has attachments for the belts that are 5cm above the bottom. then PLOTTER_Z would be 5.

    If I had a pen in the plotter head then I would change the offsets so that they reflected the distance from the belts to the pen tip, so my G0 commands don’t require extra math in my head. Done correctly G0 X0 Y0 Z0 would touch the pen tip to the center of the floor.

    #21499
    AvatarsillyString
    Participant

    yea its in the configure file here
    https://github.com/MarginallyClever/Skycam/blob/master/skycamFirmware/configure.h

    so i have understood why i need plotter_z but can i simple change PULLEY_PITCH (4.0) to the classic (d*pi/steps) ?

    #define PLOTTER_RADIUS       (6.0)
    

    #define PLOTTER_Z (0.5)
    `#define PULLEY_PITCH (4.0) // 20 gt2 teeth = 40mm, or 4cm.
    #define THREAD_PER_STEP (PULLEY_PITCH / STEPS_PER_TURN)

    can i change it to use
    #define SPOOL_CIRC (SPOOL_DIAMETER*PI) // circumference
    #define THREADPERSTEP (SPOOL_CIRC/STEPS_PER_TURN) // thread per step

    it seems PLOTTER_Z and PLOTTER_RADIUS is used in the IK function.
    how would i change it to use a pulley with a 12mm diameter.
    as PLOTTER_RADIUS is already set to 6 it should be fine im just confused how to change the pulley pitch part.

    thanks

    #21501
    DanDan
    Keymaster

    I believe your change makes no functional difference. If it helps you understand what’s going on, do it. 🙂

    #22242
    Avatarmaker
    Participant

    Hi Dan,

    Amazing work. Really appreciate the efforts taken to build a reliable firmware + hardware combination for such diverse applications. I was playing with skycam version for some days now. I have a ramps+mega with 4 drivers in place. Firmware is working almost same, iam using threads, not the pulley-belt mechanism.

    I am considering of adding 4 more steppers to get the 6 dof control. In theory its working, in the sense i made a y connector for each stepper driver and was able to make 8 motors controlling a skycam simultaneously. but for z axis movement to work effectively, i need to reverse the bottom 4 motors alone.

    What could be the best way to do this in firmware ? My options are,

    1. add 4 more stepper drivers in ramps, wire it outside, configure it and make the firmware work in a way to reverse the movements at the time of z axis travel

    2. Or stick to 4 stepper drivers and split wire them with y connectors, put an additional circuit to reverse the z axis moves alone, without making huge changes in firmware.

    Would love to hear your thoughts on this. Thanks i advance. Its a poc kind of work, if it works well, may be i cna go ahead and make a full fledged cdpr fork on it too.

    #22243
    DanDan
    Keymaster

    I built one of these inverted stewart platforms many years ago. Which approach is best? … I’m not sure I have enough experience to judge. … but I am excited to see your results! Please share when you make progress.

    #22979
    AvatarsillyString
    Participant

    hey dan,
    im re looking at your original post on how to code IK for a spidercam.

    you use these two equations

    T = (EE – A);
    lengthA = sqrt( Tx*Tx + Ty*Ty + Tz*Tz );

    what does the T stand for?

Viewing 25 posts - 26 through 50 (of 73 total)
  • You must be logged in to reply to this topic.