PS2 Control of A-POD

The FSR had to be rewired cause it broke. :frowning:

Soon though!

This thing is a monster!

Oh, sorry to hear that. Yeah, it is a cute little beer fetching monster… :laughing:

Ok. Quick update. The FSR was broken, but I’ve replaced that. One of the leg servos was going out which was giving me some trouble. Turns out that the SSC-32 pin was was only somewhat working. Swapped it to a different pin and now it works wonderfully. :smiley:

I’ve been commanded to shoot a video, but I might not actually be able to post it until tomorrow. We’ll see.

Yeah :smiley: :smiley: :smiley: :smiley:

We got sort of sidetracked with the PS2 arm control code problem. Video is delayed till next week. I have noticed that the legs can touch each other. Probably due to the longer coxa offset we used. Probably need to restrict the horizontal range a little.

Also the mandible control is awesome and works perfectly. The overall control appears to be pretty intuitive, Riley was able to control the bot to pick up a water bottle and walk around with it with ease! 8)

This should not happen unless you are talking about sudden large changes from the controller. In normal operation they shouldn’t touch each other. Are you sure you’ve changed all values in the cfg file, e.g. the coxa length? The travel-length should be the same on both robots. This mean that if your coxa length is longer the IK math would take this in consideration. Also check that the front and rear coxa are calibrated correctly (45 deg). I don’t think the body dimensions or the leg width are that different between the two A-Pods.

That’s great! So, did the FSR torque control work fine? I’ve been amazed more than one time for how much load it can handle, sounds like you’ve fun! :smiley:

Yes! It was very useful, as I didn’t have to spend the whole time making sure the servos weren’t straining. It applied sufficient torque to lift the bottle, and that’s it. Very nice! :smiley:
I saw that you’ve included the ability to increase or lower the amount the mandibles would grip. The bottle was nearly empty, so I didn’t need to mess with these at all. I suspect that you would need to increase the setting to lift a full one, but I don’t think that it would be a problem. Next time I mess with the robot, I’ll not use the bottle I’ve been drinking out of! :stuck_out_tongue:

It sounds like your FSR readings are similar to mine. Did you also monitor the values? At default its set to medium torque and that should be sufficient to hold an empty bottle. Looking forward to your video!

I also look forward to seeing the video. I also think it would be great to post it in the public forum, to get more people excited about being almost ready to start shipping the A-Pod as a kit. :slight_smile:

Kurt

Hi,

I was looking at your PS-2 tutorial.

The two D-Pad functions in rotation mode was left out in your table 17 (PS2 Controls):

; - D-Pad left Slower but more accurate indirect control ; - D-Pad right Faster respons on indirect control

In your Step 17 text I recommend to point out that in rotation mode there are three different control methods for head and body.

Beside that it looks good! :smiley:

Thank you Kåre! I will get Riley on it asap.

Yes please go ahead and post this. :stuck_out_tongue:

I would love to, but I don’t have one, nor an A-Pod to make one :stuck_out_tongue: But I was referring to the post awhile ago:

So I was hoping that you had one. :laughing:

Kurt

Sorry I read it too quickly. I thought you were referring to the code. We will work on a video. :blush:

Hi,

I’ve just done some minor modifications to the walking part. The legs crashes to often when combining walking and turning. This was more visible under PS2 control since the joystick data are more coarse and jumps to the max/min positions very sudden.

I’ve increased the TravelLengths a little when the double length is off. When the doubletravel is ON I made a very simple anti-crash function that decreases the TravelLengthZ and the TravelRotationY under certain conditions:

IF DoubleTravelOn=0 THEN ;("Double" travel length) TravelLengthX = TravelLengthX*2/3 ;max 57 TravelLengthZ = TravelLengthZ*2/3 TravelRotationY = TravelRotationY*2/3 ;max 14 ELSE ;Simple anticrash function: IF ABS(TravelLengthZ)>50 AND ABS(TravelRotationY)>15 THEN TravelLengthZ = TravelLengthZ*2/3 TravelRotationY = TravelRotationY*2/3 ENDIF ENDIF
This code also include the stuff Kurt added here.
APod_PS2.zip (26.9 KB)

Excellent! Thanks!

Hi everyone,just 7 years later. I have a problem with Walk common. When I use TRavelLengthX or TravelRotationY in walkmode . The Abdomen Pan servo move from the left to right ( the loop ). I add “-” to AbdomPanAngle1 = -((RR_RealPosX-LR_RealPosX)*c1DEC/3); it’s not work

this is AbdommenControl from KurtE
#ifdef ApodCode
AbdomenControl(
LegPosX[cRR]-g_InControlState.BodyPos.x+BodyFKPosX-GaitPosX[cRR],
LegPosY[cRR]+g_InControlState.BodyPos.y-BodyFKPosY+GaitPosY[cRR],
LegPosX[cLR]+g_InControlState.BodyPos.x-BodyFKPosX+GaitPosX[cLR],
LegPosY[cLR]+g_InControlState.BodyPos.y-BodyFKPosY+GaitPosY[cLR]);
#endif
some thing wrong with BodyFK >> BodyIK like zenta said :smiley:

void StartUpdateServos()
{

for (LegIndex = 0; LegIndex <= 4; LegIndex++) {
g_ServoDriver.OutputServoForHeadAbdomen(LegIndex, HeadAbdomenAngle1[LegIndex]);
}
}
and my driver ssc
void ServoDriver::OutputServoForHeadAbdomen(byte LegIndex, short sHeadAbdomenAngle1) {
g_InputController.AllowControllerInterrupts(false);
#ifdef ApodCode
word PWMHeadAbdomen; // Head value in SSC units
PWMHeadAbdomen = ((long)(sHeadAbdomenAngle1 + 900))*1000/991+592;
#ifdef cSSC_BINARYMODE
SSCSerial.write(pgm_read_byte(&cHeadAbdomenPin[LegIndex]) + 0x80);
SSCSerial.write(PWMHeadAbdomen >> 8);
SSCSerial.write(PWMHeadAbdomen & 0xff);
#else
SSCSerial.print("#");
SSCSerial.print(pgm_read_byte(&cHeadAbdomenPin[LegIndex]), DEC);
SSCSerial.print(“P”);
SSCSerial.print(PWMHeadAbdomen, DEC);
#endif

#endif
g_InputController.AllowControllerInterrupts(true);
}
AbdomPan move loop and AbdomTilt not moving. I think I have a Probem with OutputServoForHeadAbdomen .Can anyone help me ? :wink: