BlackWido

I also think that it makes it much easier that we’ve decide in some kind of standard on the SSC mounting. That’s why I brought it up. Both Zenta and I have got the SSC mounted with the connector to the back. I suggest that use this setup as “standardâ€

…from what i can see both chaps originally mounted the SSC so the cable exited at the back. The fact that the SSC was mounted on the top deck rather than inside the chassis meant there wasn’t an issue with the main coxa and they’ve have subsequently developed code to work with the SSC this way around.

It would seem slightly daft to need to maintain two versions for different orientations of the SSC.

Mounting the ssc the ZX (zenta/xan) way around will mean the switches are at the front and the extra mount hole is at the back - but having built my phoenix that way around to start with i didn’t find it an issue and using a bluesmirf negates the issue with the serial out.

i’m not for one moment suggesting either way is wrong - i just thought that it would reduce confusion and the need to faff with code if we were all agreed on one way around. :smiley:

Hi Xan!

I’ve been playing more with your gait code and came up with two more gait’s; 6 step tripod and a special 9 step ripple gait. I’m calling the 9 step gait for quadripple gait, it sure looks like a ripple gait but the opposite side waves are not completely 180 deg out of phase. To be exact the quadripple gait are 154 deg out of phase. But it works fine and it gives you 2 swing steps (leg lifted at end and start position). The 6 step tripod gait also have 2 swing steps.

Code for the 6 step tripod (I removed some of the code —):

[code]From main section:
main:

;Calculate Gait positions
LastLeg = FALSE
gosub Gait [4, LRGaitPosX, LRGaitPosY, LRGaitPosZ, LRGaitRotY] 
---

gosub Gait [1, RFGaitPosX, RFGaitPosY, RFGaitPosZ, RFGaitRotY]
---
		
gosub Gait [1, LMGaitPosX, LMGaitPosY, LMGaitPosZ, LMGaitRotY]
---
	
gosub Gait [1, RRGaitPosX, RRGaitPosY, RRGaitPosZ, RRGaitRotY]
---
	
gosub Gait [4, LFGaitPosX, LFGaitPosY, LFGaitPosZ, LFGaitRotY]
----

LastLeg = TRUE
gosub Gait [4, RMGaitPosX, RMGaitPosY, RMGaitPosZ, RMGaitRotY]
----[/code]

The gait sub:

[code];[GAIT]
Gait [GaitLegNr, GaitPosX, GaitPosY, GaitPosZ, GaitRotY]

;Up start position:
IF (GaitStep=GaitLegNr+1) & ((ABS(TravelLengthX)>2) | (ABS(TravelLengthZ)>2) | (ABS(GaitPosX)>2) | (ABS(GaitPosZ)>2) | (ABS(GaitRotY)>2)) THEN
  GaitPosX = TravelLengthX/2
  GaitPosY = -LegLiftHeight
  GaitPosZ = TravelLengthZ/2
  GaitRotY = TravelRotationY/2
ELSE
  ;Up end position:
  IF (GaitStep=GaitLegNr) & ((ABS(TravelLengthX)>2) | (ABS(TravelLengthZ)>2) | (ABS(GaitPosX)>2) | (ABS(GaitPosZ)>2) | (ABS(GaitRotY)>2)) THEN
  GaitPosX = -TravelLengthX/2
  GaitPosY = -LegLiftHeight
  GaitPosZ = -TravelLengthZ/2
  GaitRotY = -TravelRotationY/2
  ELSE  
	;Down start position:
	IF (GaitStep=GaitLegNr+2) & GaitPosY<0 THEN
	GaitPosX = TravelLengthX/2
	GaitPosY = 0
	GaitPosZ = TravelLengthZ/2
	GaitRotY = TravelRotationY/2

 	;just walk:   
	ELSE
	  GaitPosX = GaitPosX - (TravelLengthX/3)     
	  GaitPosY = 0
	  GaitPosZ = GaitPosZ - (TravelLengthZ/3)
	  GaitRotY = GaitRotY - (TravelRotationY/3)
	ENDIF	
  ENDIF
ENDIF 

;Advance to the next step
IF LastLeg THEN ;the last leg in this step (RM leg)
GaitStep = GaitStep+1
IF GaitStep>6 THEN
GaitStep = 1
ENDIF
ENDIF

return[/code]

And the code for the 9 step quadripple gait:
From the main section:

[code];[MAIN]
main:

;Calculate Gait positions
gosub Gait [1, LRGaitPosX, LRGaitPosY, LRGaitPosZ, LRGaitRotY] 
---

gosub Gait [2, RFGaitPosX, RFGaitPosY, RFGaitPosZ, RFGaitRotY]
---
		
gosub Gait [4, LMGaitPosX, LMGaitPosY, LMGaitPosZ, LMGaitRotY]
---
	
gosub Gait [5, RRGaitPosX, RRGaitPosY, RRGaitPosZ, RRGaitRotY]
---
	
gosub Gait [7, LFGaitPosX, LFGaitPosY, LFGaitPosZ, LFGaitRotY]
---

gosub Gait [8, RMGaitPosX, RMGaitPosY, RMGaitPosZ, RMGaitRotY][/code]

From the gait sub:

[code];[GAIT]
Gait [GaitLegNr, GaitPosX, GaitPosY, GaitPosZ, GaitRotY]

;Up start position:
IF (GaitStep=GaitLegNr+1) & ((ABS(TravelLengthX)>2) | (ABS(TravelLengthZ)>2) | (ABS(GaitPosX)>2) | (ABS(GaitPosZ)>2) | (ABS(GaitRotY)>2)) THEN
  GaitPosX = TravelLengthX/2
  GaitPosY = -LegLiftHeight
  GaitPosZ = TravelLengthZ/2
  GaitRotY = TravelRotationY/2
ELSE
  ;Up end position:
  IF (GaitStep=GaitLegNr) & ((ABS(TravelLengthX)>2) | (ABS(TravelLengthZ)>2) | (ABS(GaitPosX)>2) | (ABS(GaitPosZ)>2) | (ABS(GaitRotY)>2)) THEN
  GaitPosX = -TravelLengthX/2
  GaitPosY = -LegLiftHeight
  GaitPosZ = -TravelLengthZ/2
  GaitRotY = -TravelRotationY/2
  ELSE  
	;Down start position:
	IF (GaitStep=GaitLegNr+2 | GaitStep=GaitLegNr-7) & GaitPosY<0 THEN
	GaitPosX = TravelLengthX/2
	GaitPosY = 0
	GaitPosZ = TravelLengthZ/2
	GaitRotY = TravelRotationY/2

 	;just walk:   
	ELSE
	  GaitPosX = GaitPosX - (TravelLengthX/6)     
	  GaitPosY = 0
	  GaitPosZ = GaitPosZ - (TravelLengthZ/6)
	  GaitRotY = GaitRotY - (TravelRotationY/6)
	ENDIF	
  ENDIF
ENDIF 

;Advance to the next step
IF GaitLegNr=8 THEN ;the last leg in this step (RM leg)
GaitStep = GaitStep+1
IF GaitStep>9 THEN
GaitStep = 1
ENDIF
ENDIF

return[/code]

I think we know have a lot of different gaits to play with :laughing: .
I have not tried the wave gait (to slow and not so interesting I think :unamused: ).

Hi all,

Well, I don’t know it for sure and if I want to know it for sure I need to remove the heatshrink so I can see the type of the component that’s on the cooling unit. This will tell if it is a regulator or a transistor/thyristor which makes it a switching regulator. But as far as I know, a switching regulator doesn’t get to hot so it don’t need a cooling unit. A “normalâ€

Hey there Xan,

I’ve downloaded your code for PS2 control, but I’ve run into a slight problem… I’m trying to get it to work with the Lynxmotion setup, but for some reason the legs don’t reach down far enough… I’ve posted a short clip on youtube here

I think it has something to do with this bit of code, but I’m not really sure

[code]RFOffsetX con 42 ;Distance X from center of the body to the Right Front coxa
RFOffsetZ con 88 ;Distance Z from center of the body to the Right Front coxa
RMOffsetX con 65 ;Distance X from center of the body to the Right Middle coxa
RMOffsetZ con 0 ;Distance Z from center of the body to the Right Middle coxa
RROffsetX con 42 ;Distance X from center of the body to the Right Rear coxa
RROffsetZ con 88 ;Distance Z from center of the body to the Right Rear coxa

LFOffsetX con -42 ;Distance X from center of the body to the Left Front coxa
LFOffsetZ con 88 ;Distance Z from center of the body to the Left Front coxa
LMOffsetX con -65 ;Distance X from center of the body to the Left Middle coxa
LMOffsetZ con 0 ;Distance Z from center of the body to the Left Middle coxa
LROffsetX con -42 ;Distance X from center of the body to the Left Rear coxa
LROffsetZ con 88 ;Distance Z from center of the body to the Left Rear coxa[/code]

anyway, let me know if you need any additional information.

Thanks

Hi Fish,

I’ve played with Xan’s code. Did you try to hit the UP/DOWN button on the PS2 controller to lower Phoenix’s feet? :wink:

The part you’re refering are the body dimension, and have nothing to do with your little trouble.

umm… oh. :blush:

I knew it did that, but for some reason I had it stuck in my head that it only moved up/down once… probably because I was just hitting buttons randomly :laughing:

Oh well, thanks Zenta :smiley:

Hi James,

The code that you’re looking at are the body dimensions. Distance and positions of the different legs are described there.
As Zenta said, you can push the D-pad up and down buttons multiple times :smiley:. But the best thing to do is adjust the init positions of the legs. This way the legs will be on the same level as the floor if the BodyY value is 0. To adjust the init positions you need the Y value for each leg in this part of the code. The value represents the distance between the underside of the body and the centre of the femur axis in mm.

;--------------------------------------------------------------------
;[INIT]
;Turning off all the leds
LedA = 0
LedB = 0
LedC = 0

'Feet Positions
RFPosX = 80		;Start positions of the Right Front leg
RFPosY = 15
RFPosZ = -75

RMPosX = 110	;Start positions of the Right Middle leg
RMPosY = 15
RMPosZ = 0

RRPosX = 80		;Start positions of the Right Rear leg
RRPosY = 15
RRPosZ = 75

LFPosX = 80		;Start positions of the Left Front leg
LFPosY = 15
LFPosZ = -75

LMPosX = 110	;Start positions of the Left Middle leg
LMPosY = 15
LMPosZ = 0

LRPosX = 80		;Start positions of the Left Rear leg
LRPosY = 15
LRPosZ = 75

I hope this helps!

Xan

Hi!

Your robot is really great! It’s amazing how it moves.
I’ve been trying to build one but I’ve hit a problem. I cannot attach more then maybe 10 or 12 servos to my ssc32 (first gen). When i do all of the “feet” of my little crab spider robot cramp up to a weird position and the whole thing is uncontrollable. It isn’t servo jitter i think. I thought it might be the power source but that wasn’t the problem. It’s the servos. cheap no brand servo’s!

So my question is: can I use hitec hs-311 servo’s or maybe others because the hitec 645’s are quite expensive when I order 18 of them.

p.s.
Thank you for sharing your progress build this cool robot!

Sounds like a power supply problem. Cheap servos shouldn’t go uncontrollable just because you add more of them.

I agree, your power delivery system is in question. Are the wires heavy enough? do you have wires twisted together, no solder? Are you using cheap little “AA” battery holders? Are the connectors strong enough to handle the current required? Are the batteries capable of delivering 8 to 10 amps? Our batteries and wiring harnesses use heavy 16 awg wires and heavy duty connectors.

Now if you fix the power system, your servos may still be crap, but it won’t be due to the power system.

The minimum servo for the Phoenix is the HS-645MG. You may get it to work somewhat with HS-475 servos if you tether the batteries off the robot, but it’s not going to perform like the 645 powered bots…

Hi Bartbot,

I think it’s clear that you should check your power source, I had the same problem when I use a standard adapter which can only deliver 5 amps. Placing BlackWido on a standard with his legs from the ground makes it possible to run some test on my desk without recharging my batteries every 25 minutes :wink:

As for the servos, I know that there comes a price with good quality servos, but I think that it is better to spend some more money and end up with a working bot. What I did with BlackWido is buy 12x 645 for all the vertical servos (femur and tibia) and 6x 475 for the horizontal movements (Coxa). This is working fine!

Good luck with your setup! :smiley:

Xan

Hi plingboot,

It’s been a while but I just want to let you know that both Zenta and I decided to change the SSC setup to match the standard LM setup. I’ll post some pictures later this week.

Xan

Hi Xan,

(Maybe I should post this in a new thread in the PS section?)

After using your code for a while I’ve discovered a random bug that is driving me almost crazy :confused:
Most of the time Phoenix walks normal but suddenly and very randomly one of the legs move in a not normal path. Since the error are random its very hard to find it in your code.

Did you experience the same?

I’ve tried to do some debugging. And I think I’ve found where the bug occur. (It’s not a power issue, and I’ve tried it on different Basic Atom Pro’s (24 and 28 pin) too).

The bug is caused by the PS2 remote module. Here is a serout debugging sample:

DL5 (TLX)=128 DL (TLZ)=0 GaitStep=8 LegNr=1 TLZ=-98 Z=47 TLX=0 X=0 Y=0 GaitStep=8 LegNr=2 TLZ=-98 Z=47 TLX=0 X=0 Y=0 GaitStep=8 LegNr=4 TLZ=-98 Z=47 TLX=0 X=0 Y=0 GaitStep=8 LegNr=5 TLZ=-98 Z=-33 TLX=0 X=0 Y=0 GaitStep=8 LegNr=7 TLZ=-98 Z=-49 TLX=0 X=0 Y=-50 GaitStep=8 LegNr=8 TLZ=-98 Z=49 TLX=0 X=0 Y=-50 DL5 (TLX)=128 DL (TLZ)=0 ;Everything is ok here GaitStep=9 LegNr=1 TLZ=-98 Z=63 TLX=0 X=0 Y=0 GaitStep=9 LegNr=2 TLZ=-98 Z=63 TLX=0 X=0 Y=0 GaitStep=9 LegNr=4 TLZ=-98 Z=63 TLX=0 X=0 Y=0 GaitStep=9 LegNr=5 TLZ=-98 Z=-17 TLX=0 X=0 Y=0 GaitStep=9 LegNr=7 TLZ=-98 Z=-49 TLX=0 X=0 Y=0 GaitStep=9 LegNr=8 TLZ=-98 Z=-49 TLX=0 X=0 Y=-50 DL5 (TLX)=255 DL (TLZ)=255 ;Error occur here GaitStep=1 LegNr=1 TLZ=97 Z=-48 TLX=-97 X=48 Y=-50 GaitStep=1 LegNr=2 TLZ=97 Z=47 TLX=-97 X=16 Y=0 GaitStep=1 LegNr=4 TLZ=97 Z=47 TLX=-97 X=16 Y=0 GaitStep=1 LegNr=5 TLZ=97 Z=-33 TLX=-97 X=16 Y=0 GaitStep=1 LegNr=7 TLZ=97 Z=-65 TLX=-97 X=16 Y=0 GaitStep=1 LegNr=8 TLZ=97 Z=48 TLX=-97 X=-48 Y=0 DL5 (TLX)=128 DL (TLZ)=0 ;Back to normal reading from PS2 but still bugs (Xpos values) GaitStep=2 LegNr=1 TLZ=-98 Z=-49 TLX=0 X=0 Y=-50 GaitStep=2 LegNr=2 TLZ=-98 Z=49 TLX=0 X=0 Y=-50 GaitStep=2 LegNr=4 TLZ=-98 Z=63 TLX=0 X=16 Y=0 GaitStep=2 LegNr=5 TLZ=-98 Z=-17 TLX=0 X=16 Y=0 GaitStep=2 LegNr=7 TLZ=-98 Z=-49 TLX=0 X=16 Y=0 GaitStep=2 LegNr=8 TLZ=-98 Z=64 TLX=0 X=-48 Y=0 DL5 (TLX)=128 DL (TLZ)=52 GaitStep=3 LegNr=1 TLZ=-58 Z=-29 TLX=0 X=0 Y=0 GaitStep=3 LegNr=2 TLZ=-58 Z=-29 TLX=0 X=0 Y=-50 GaitStep=3 LegNr=4 TLZ=-58 Z=72 TLX=0 X=16 Y=0 GaitStep=3 LegNr=5 TLZ=-58 Z=-8 TLX=0 X=16 Y=0 GaitStep=3 LegNr=7 TLZ=-58 Z=-40 TLX=0 X=16 Y=0 GaitStep=3 LegNr=8 TLZ=-58 Z=73 TLX=0 X=-48 Y=0 DL5 (TLX)=128 DL (TLZ)=128

The DL5 (TLX) and DL(TLZ) values are the Dualschock values from PS2. The error occur when they suddenly jumps to 255.
The TLZ and TLX values are the TravelLengths and the Z and X are the GaitPos values.

After that I altered the code for a standard RC flight receiver. I had NO bugs at all with the RC control. RC control also gave a much better control of the translate and rotate functions.

I think I’m gonna buy a Spectrum like Crabfu are using 8)

So I’m wondering if you or anyone has experienced the same problem with the Lynxmotion PS2?

BTW I’ve also played more with your code and added GP sequencer control and ability to shift between 9s quadripple and tripod gait. :stuck_out_tongue: The tripod gait with rather long TravelLengths (about 8,5 cm) are pretty fast.

Hi Zenta,

I have to say, I changed the Wii code to the PS2 input and just did some short testing. After my vacation BlackWido only spend some time out of the case for the ballbearings and demos with friends. I still love the look on there face when it starts walking to them! :smiley:

I didn’t noticed that problem with the PS2 remote but I had that same problem with the Wii. You can see that in my first video on YouTube. I solved that problem by changing the bauterate of both SSC and BleuSmirf and added a checksum. This solved the problem!

Where the Wii (BlueSmirf) is using serial input, the PS2 is using a shift in command. I don’t know exactly how it works (I was glad to borrow some code from PowerPod :slight_smile:) but maybe it is also possible to get some kind of checksum from the PS2 remote.

Is it possible that the PS2 remote is buggy itself? Did you try another PS2 remote?

Yeah, he is using a great remote! I would like to have that one as well but I’ve got other wishes before that… 8)

If you are using the GP sequencer, does this mean that you’ve added the offsets into the SSC registers? What can you do with the GP sequencer, I didn’t spend time on that one as well (why does a day only god 24 hours?? :s) so I don’t know where I can use the sequencer for… Maybe this is a stupid question but why using the seq if the Atom can calculate the movements… As I said, I need to look in to the seq options…

I would like to try that out! Can you change gaits on the fly? It should be possible with the way it initialize the gait. I would like to see the speed using the big steps tripod! I was thinking of making a larger travel length. But if you change direction fast the instant initialization will cause collision between the legs. So I was thinking of some kind of way to make a max position change. This means that it will build up speed in 2 or more gait circles. Have you got some ideas about that?

Xan

Hi Xan,

Yes that is very possible that the PS2 remote is buggy. The joysticks are not so very accurate and one of the axis (right stick left/right for turning) has problem to hold its middle position (value 128). And when I move the joystick to the right it first send values in oposite direction. I think the potmeter might be bad quality? I didn’t try another, I don’t have any.

To be honest I’m getting really tired of this PS2 thing. RC control was truly awesome! You have to try it to get the feeling of how very well your code work!

I use the GP sequencer to play sequences made with PEP. Ex. make Phoenix play with the box… :wink: Or to do some tricky movement that is impossible with ordinary gait or body movement control. I’ve not tried the SSC register for offset. I simply altered the +650 const value to also take care of offset. So when the offset is ex. 30 the const value is 680.

If you try to change the gait while walking it gets messy :laughing: But when Phoenix stand in her “home” position (not moving) there is no problem to shift between gaits “on the fly”.

About large travel lengths, the trick is not to start walking at full speed/travel length at once but move the joystick gentle… This is very hard to do on my PS2 remote because the joystick has very short travel before reaching full value (0 or 255). But with RC control this is no problem. With RC you can move Phoenix at very high precision even with large travel lengths.

Hey fellas,
Not had much time to play with my phoenix recently - work has been hectic and i’ve had zero spare time, but i’ve been checking in on the forum to see what’s going on.

Saw Zenta’s comment about RC stick control which triggered some interest. I’ve got a futaba heli 9CHP radio and 7 channel receiver and just wondered whether it would be possible (and what would be involved) to use this to control the phoenix instead of the PS2 control?

As an aside - the receiver is nice and small and could be neatly tucked away.

cheers, ds

Hi plingboot,

Yes it should be possible. I used an old Graupner 4014 transmitter for testing. But I’m going for 2,4 GHz system (Spectrum DX6i). 2,4 GHz is also ground legal and has failsafe system. And i love the small antenna on their very small receivers. I’ll send an order for it after my vacation.

any hints on how you’re connecting the Rx to the BotBoard2? :wink:

No idea what prcies you’ve seen Spektrum kit for, but I’ve bought radio gear from THIS company and found them very competitive on price and very prompt with delivery.

Supply the Rx with the 5v from BB2. Custom made servo plug/wire with one wire from ex. Ch1 on Rx to P12 on BB2.

code example:

;[RC Controller]
RCch01 		con P12	
RCch02 		con P13		
RCch03 		con P14		
RCch04		con P15

RCpwmMAX	con 1850
RCpwmMIN	con 1150
'---------------------------- snip....
;RC variable
RCpwmInput	var word
RCtemp		var sbyte
'-----------------------------------snip....
'from RC sub:
RCInput:
	
	pulsin RCch01,0, RCpwmInput
	RCpwmInput  = (RCpwmInput  min RCpwmMIN) max RCpwmMAX	
	TravelLengthZ = (RCpwmInput -1500)/4

Ah! very good price. I’ll have to look into that later. Thanks for the tip.