Artus-X TARANTULA Robot

Thanks. It’s currently running on a phoenix based code but I have added the other appendages to the IK.

I have added CPR (centre point of rotation) to the code so we can change the body’s axis of rotation along the Z axis meaning we can have a more playful movement when doing rotations.
I am currently working on a Terrain Adaption part as well as implementing a MPU6050 so we can detect external movements so we can keep the body level. (just a bit of fun)

Along with this i have also added the movements for the fifth pair (pedipalps) on Right J/Stick. This will allow us to control the tilt angle in and out when walking as well as when Translating. The Pedipalps have been added into the gait engine also.

So with regards the the Gait engine i have developed a few gaits. some experimental until i have fully tested them.

if (GaitType == 0) {    display.println (" TARANTULA");   
//            Left                  Right      
    GaitLegNr[cLP] = 1;    GaitLegNr[cRP] = 8;
    GaitLegNr[cLF] = 8;    GaitLegNr[cRF] = 4;  
    GaitLegNr[cLMF]= 5;    GaitLegNr[cRMF]= 1; 
    GaitLegNr[cLM] = 3;    GaitLegNr[cRM] = 7;
    GaitLegNr[cLR] = 6;    GaitLegNr[cRR] = 2; 
    
         NrLiftedPos    = 3;
         HalfLiftHeigth = 0;
         TLDivFactor    = 6;      
         StepsInGait    = 16;    
         NomGaitSpeed   = 75;            
}
//----------------

if (GaitType == 1) {    display.println (" SCORPION");    
//            Left                  Right      
    GaitLegNr[cLP] = 0;    GaitLegNr[cRP] = 0; 
    GaitLegNr[cLF] = 4;    GaitLegNr[cRF] = 8;  
    GaitLegNr[cLMF]= 7;    GaitLegNr[cRMF]= 3; 
    GaitLegNr[cLM] = 2;    GaitLegNr[cRM] = 6;
    GaitLegNr[cLR] = 5;    GaitLegNr[cRR] = 1; 

         NrLiftedPos    = 3;
         HalfLiftHeigth = 0;
         TLDivFactor    = 4;      
         StepsInGait    = 16;    
         NomGaitSpeed   = 90;       
}
//----------------
  
if (GaitType == 2) {      display.println (" TICK");  
//            Left                  Right
    GaitLegNr[cLP] = 0;   GaitLegNr[cRP] = 0;
    GaitLegNr[cLF] = 6;   GaitLegNr[cRF] = 2;
    GaitLegNr[cLMF]= 4;   GaitLegNr[cRMF]= 8;
    GaitLegNr[cLM] = 3;   GaitLegNr[cRM] = 7;
    GaitLegNr[cLR] = 1;   GaitLegNr[cRR] = 5;

         NrLiftedPos    = 1;  
         HalfLiftHeigth = 0; 
         TLDivFactor    = 5; 
         StepsInGait    = 8;  
         NomGaitSpeed   = 100;
}
//----------------

if (GaitType == 3) {     display.println (" LOBSTER"); 
//            Left                  Right      
    GaitLegNr[cLP] = 0;   GaitLegNr[cRP] = 0;
    GaitLegNr[cLF] = 3;   GaitLegNr[cRF] = 1;        
    GaitLegNr[cLMF]= 6;   GaitLegNr[cRMF]= 5;     
    GaitLegNr[cLM] = 1;   GaitLegNr[cRM] = 3;
    GaitLegNr[cLR] = 5;   GaitLegNr[cRR] = 6; 

         NrLiftedPos    = 2;
         HalfLiftHeigth = 0;
         TLDivFactor    = 16;      
         StepsInGait    = 18;        
         NomGaitSpeed   = 85;
}
//----------------

if (GaitType == 4) {     display.println ("TRIPPLER"); 
//            Left                  Right      
    GaitLegNr[cLP] = 4;   GaitLegNr[cRP] = 4;
    GaitLegNr[cLF] = 3;   GaitLegNr[cRF] = 1;        
    GaitLegNr[cLMF]= 2;   GaitLegNr[cRMF]= 2;     
    GaitLegNr[cLM] = 1;   GaitLegNr[cRM] = 1;
    GaitLegNr[cLR] = 2;   GaitLegNr[cRR] = 3; 

         NrLiftedPos    = 2;
         HalfLiftHeigth = 1;
         TLDivFactor    = 3;      
         StepsInGait    = 12;        
         NomGaitSpeed   = 85;
}
//----------------

if (GaitType == 5) {     display.println ("TARANTULA2");     
int LPPedistep =random (4, 8); 
int RPPedistep =random (20, 24);
//            Left                           Right      
    GaitLegNr[cLP] = LPPedistep;    GaitLegNr[cRP] = RPPedistep;
    GaitLegNr[cLF] = 28;            GaitLegNr[cRF] = 12;  
    GaitLegNr[cLMF]= 16;            GaitLegNr[cRMF]= 0; 
    GaitLegNr[cLM] = 8;             GaitLegNr[cRM] = 24;
    GaitLegNr[cLR] = 20;            GaitLegNr[cRR] = 4; 

         NrLiftedPos    = 3;           
         HalfLiftHeigth = 0;
         TLDivFactor    = 6;      
         StepsInGait    = 32;    
         NomGaitSpeed   = 75; 

With regards the to last one "“Tarantula2” i have added the Pedipalps on a random number selection since these do not appear to have a set pattern unlike the rest of the legs. Not sure if that will do as i expect and again the code is totally untested but i feel it is the most accurate to real life. The sequence runs in this order;

 RMF,             RR, LP,          LM,            RF,            LMF,             LR, RP,         RM,             LF,                                
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31

The LP and RP are the Left and Right Pedipalps.
These are set to jump into play at random placements between the movements of the RR - LM (placements 4-8 ) for the Left Pedi and LR - RM (placements 20-24) for the right pedi directly within the gait engine. So no two steps the same. :wink: But again… untested at this point.

Below is the repository that i have added the full code too and this will be updated as i go and if anyone has any input or sees something that just simply wont work please let me know. As always when i post code i want to thank the people involved and so apart from the main contributors Xan. Zenta and Kurte i also thank the rest of the community back from years ago when we all watch this develop into what it is today.

Having recently lost my job (right before Christmas too) i have done a couple of other iterations of for the project to help cut cost. In doing so this have obviously changed the scale spec for the tarantula.
Going with a RDS-3115MG servo package and scaling it down has had its challenge and so i completely redesigned the project.

The design will be much more compact as you can imagine. It is now almost half the size however still a beast. The redesign has gone through several stages while i was modelling different servos. I even went Micro at one point. looked cute but was not practical and possibly wouldn’t have worked as well.

So until i have the funds to push this project into the next stage of developing ill throw in a couple of these renders for now.

Let me know your thoughts.

Again, as i was already aware, sorry to hear about your job.
I think in the end they will loose more than you.

I’m usually not too critic but …

  • I like the femur of the original one. More style to it
  • Is there a reason why you move from stationarry center body servo to moving ones ? Space ?

:slight_smile:

yes the femur is a little too blocky on this one and is something i did have in mind to change so i am happy you mentioned that.

Centre body servo?

Do you refer to the CPR Centre Point of Rotation i mentioned before?

The original version had the servos integrated in the frame body.
Maybe the servos do not fit the smaller frame now ?

i see. yeah i have reversed them so they are fitted the same way as the phoenix hexapods are with the coxa attaching to the centre plate and not the servo body, so that there is more room inside the body.
Here is an idea for an improved Femur?

Yes, much better

1 Like

So i have been looking into the idea of integrating a Pixy2 camera for image recognition and reactive responses to external stimuli.
The Pixy2 is a lot smaller than the first Pixy however it is still too large especially since i would like the final look to not have peripherals sticking out all over the place so i have opted to integrate the camera inside of the body and have the field of view convex through the top chassis via a mirror at 45 degrees and a convex lens to allow for a larger field of view.

I am not too sure whether the set up is correct and if the convex lens will actually give me a wider view?
I have mounted the camera so that when the image bounces off the mirror the final image will be the correct way up but i am now thinking that the lens will conflict with this and re-flip it?

perhaps use a convex mirror instead. Here in the US they sell sticky back mirrors to attach to the side mirrors of older cars to give a wider field of view. They are found at auto parts places and cost a couple dollars or so.

My thought processes are cloudy today, but I do think the lens will “flip” the image. In addition, I suspect you will have problems with focusing – the lens will need to focus at one point and the camera lens will need to focus on the same point. Well, more or less. There are ways around that but optics isn’t my strong point.

Focus. yes that didnt cross my mind and i believe you are correct there. I like the idea of the convex mirror or similar as that would solve the focus problem. What i may do is see if i can de-solder the actual lens part and re-solder with wires then mount that to the body, keeping the board inside.

i have opted to place the camera slightly poking from the top. keep it simple it guess.
That top panel is removable to allow serviing on of the SSC32 and Battery compartments.
Simply slides off from around the camera. Note the small LCD for battery monitor and notifications on function.

What a beauty!!
I will definitely be following this

1 Like

Am i seeing an optional turret version ?

I will be installing a pixy cam so it can identify objects. Mainly for a bit of fun and optional IK face tracking.

Yes - But will the turret turn ?

No. The body will respond to the objects tracked position. If the object is too close it will back up and will walk forward if to far. if the object goes up or down then also will the body. If it goes left or right so will the Body…

 /* if the object we are trackings width gets too far away */
  if(o_width == 10){ 
    /* increment width counter */
    distance_counter += 1;
    /* if the counter reaches 10 */
    if(distance_counter == 10){
      /* move the robot forward */
      TravelLengthZ = -((256)-128); //was 206 started at 166  
      /* zero out body rotations while walking */
      BodyRotX1 = 0;
      BodyRotY1 = 0;
      /* reset width counter */
      distance_counter = 0;
    }

  /* if the object we are tracking gets too close*/
  }else if(o_width > 45){
    /* move the robot backwards */
    TravelLengthZ = -((50)-128);  
    /* zero out body rotations while walking */
    BodyRotX1 = 0;
    BodyRotY1 = 0;
  /* if the object we are tracking isnt too far away or too close then rotate the robot body */
  }else{
    /* set the walking distance to zero */
    TravelLengthZ = 0;
    /* feed tilt error into pitch rotation*/
    BodyRotX1 = tilt_error;
    /* feed pan error into yaw rotation */
    BodyRotY1 = -pan_error; 
 
    /* if the pan error is above a certain threshold */
    if(pan_error >= 75){
      /* give the servos 150ms more to reach the destination */
      SSCTime += 150; 
    }else{
      /* otherwise use default ammount of time */
      SSCTime = 150; 
    }
  
    /* if the tilt error is above a certain threshold */
    if(tilt_error >= 75){
      /* give the servos 150ms more to reach the destination */
      SSCTime += 150; 
    }else{
      /* otherwise use default ammount of time */
      SSCTime = 150;
    }

Code reference to https://www.instructables.com/id/Arduino-Mega-Hexapod/

i have started to model in the ground contact switches for terrain adaption.

As far as the coding goes for this part i will have to be something i will work on one i have this assembled since there is a lot of work to do and i cant do it coding blind. any info, links or help at this stage would be greatly appreciated.

Hi @innerbreed
Wow. Truly impressed by your project.

I’m not sure what stage you are at in its development, but I would definitely like to know more.

Would you be interested in posting your project in the robot section?

It would be a good way to detail your thinking process, work in progress, updates, result, parts, etc.

Looking forward to seeing this tarantula “come to life”.
:blush:

Hi there, what a totally awesome project. I have managed to get my 4DOF hexapod to listen to my PIXY and it responds to it. I can share my code if it’s of any use…basically the Phoenix code modified a bit.
Would you be able to share the STL files for your robot as I would love to have a go at building it!
Thanks loads.
Matt.