Lynxmotion SES snake...er FISH!

ok, while spending a few nights trying to come up with some more SES ideas i have fallen into the trap and i have decided to build an SES Snake.

At the moment this is a short term project as i have others on the go so i wont be putting 100% into this at this point, but saying this i am very interested it making it work.

so far i am looking at designs using the SES systems.
first i built a basic bracket segment arrangement.
http://i531.photobucket.com/albums/dd355/innerbreed/robotsnake.jpg

i will be making a further two sections like this so it will be three times as long as this.
the servo wires have tried to be routed along the shaft following the shortest path, so i don’t use to many extension cables.

i have been Googling for a good few hours now and i have seen most robot snakes and ideas on project similar to this, but please feel free to add videos, pictures, documentations on algorithms, etc as i would like this thread to be dedicated to snake robots.
i have a really good idea on the rules i will be applying to the servos to get this to work. And i may start a short program to demonstrate how i intend it to look. :wink:

ok slight twist to the assembly and function here. it looks or will look more like an Eel. plus i will be conducting this project in water!!!

liquid latex here we go!..

i plan to use as less servos as possible to save on power and energy. here is a quick photo edit of the idea i have planed. so far i have built half and just mirrored it.
http://i531.photobucket.com/albums/dd355/innerbreed/eel.jpg

the structure is strong and works really well. flapping the “tale” like a fish.

:open_mouth: Water!!! I’m fully interested in this now! I hope it stays dry because I’m sure water doesn’t like Bot Board 2s

lol. this is why i have been considering using a small servo receiver with transmitter to control it.
BotBoard or 'the like, would just be over kill for this. im still working on ideas so dont hold me to anything i say. :wink:

ok i have now started to work on ideas and i feel it will be best starting off with a fish design. well thats were this project has taken me anyway. robotic evolution has come into play here! lol
here i have demonstrated the Mechanics of the fish rather than the programming. i have used a simple Panning servo command for this using a HS485HB servo.

using push rods along the spine i have got the “joints” to perform the fish swish like action.

Wouldn’t it still work without crossing the push rods from the servo?

I would expect so, just that the directions would be reversed…

yes, they will be put the right way. i was testing it to see what works best, and just forgot to change it back. :wink:
but the ones on the bottom need to be reversed for the swing effect of the tail.

Here is some close ups of these simple mechanics.

Top joint (1st)
http://i531.photobucket.com/albums/dd355/innerbreed/100_2227.jpg

Bottom joint (2nd)
*Rods reversed on this to ensure the 2nd joint flaps in the same direction as the 1st joint. *
http://i531.photobucket.com/albums/dd355/innerbreed/100_2229.jpg

Ball Bearing joint.
*here i have used two bearings back to back with a nylon bolt, steel hex screw and some split washers. *
http://i531.photobucket.com/albums/dd355/innerbreed/100_2230.jpg

i have now added a second servo at the tail end giving the “swish” look smoother and more real, and working with a 300ms delay behind the 1st servo.

also i have been looking at programming (BAP) so i can get the “fish” to swim forward when J/Stick is moved up.

i have it working with good variable speed and travel. also i have added button controls for quick turns and evasive moves along with gentle and calm motions. :smiley:

next i will be looking at adding pectoral fins for (up/down) motions.

i plan to used polystyrene ribs along the body that will be made in two parts that fit together either side of the Spine and joined with a non alcoholic (acidic) glue. once these have been calved i can then work on making a latex skin.

ok im eating my words here…

i have been looking at ways to get this to work properly but i haven really got the right thing going on here.

basically i have a servo defined as (BackBone) that will rotate left to right once j/stick is pushed up. the more i push it up the faster and wider the rotations get. this works great and for this project its exactly what i need, but…

i wish to add another servo defined as (TailFin) that will start to move a few milliseconds AFTER the first servo starts to move. and end a few seconds after the first. you get the idea.

so how would i implement that into my code.
i have started converting the powerpod code for this…! :wink:

this is how the servos are structured in the code.

angle update:

[code] BackBone_Angle = BackBone_Angle + Rotate(Index)
TailFin_Angle = TailFin_Angle - Rotate(Index)

		BackBone_Pulse(Index) =  (((BackBone_PulseMax - BackBone_PulseMin) * (BackBone_Angle - BackBone_AngleMin) |
			/ (BackBone_AngleMax - BackBone_AngleMin) + BackBone_PulseMin) max BackBone_PulseMax) min BackBone_PulseMin
		
		TailFin_Pulse(Index) =  (((TailFin_PulseMax - TailFin_PulseMin) * (TailFin_Angle - TailFin_AngleMin) |
			/ (TailFin_AngleMax - TailFin_AngleMin) + TailFin_PulseMin) max TailFin_PulseMax) min TailFin_PulseMin[/code]

servo pos update:

serout SSC32,i38400,"#",BackBone1,BackBone12,"P",DEC BackBone_Pulse(1),"T190",13] serout SSC32,i38400,"#",TailFin1,TailFin12,"P",DEC TailFin_Pulse(1),"T190",13]

Rotations:

[code];-------------Travel ‘A’ (Travel = 0) or ‘B’ (Travel = 1) Left
Rotation_Left
for Index = 0 + Travel to 4 + Travel Step 2
TailFinShift(Index) = 0
Rotate(Index) = Rotate(Index) + (Steering/5 - Rotate(Index))/StepFlag
ZPos(Index) = ZPos(Index) + (ZPos2(Index) - ZPos(Index))/StepFlag
next

return

;-------------Travel ‘A’ (Travel = 0) or ‘B’ (Travel = 1) Right
Rotation_Right
if LockLegs then Rotation_Left ;Goto sub Rotation_Left and return directly from it to main loop

if (Steps = NbSteps) and GaitKind then
	StepFlag = NbSteps
	goto Rotation_Left	;Goto sub Rotation_Left and return directly from it to main loop
else
 	StepFlag = StepFlag - GaitKind - 1
endif	

for Index = 0 + Travel to 4 + Travel Step 2
	if (Steps > 1) and (Steps < (NbSteps - GaitKind - 1)) then 
		TailFinShift(Index) = TailFinShift(6)
	else
		TailFinShift(Index) = 0
	endif
	Rotate(Index) = Rotate(Index) + (-Steering/5 - Rotate(Index))/StepFlag

	ZPos(Index) = ZPos(Index) + (-ZPos2(Index) - ZPos(Index))/StepFlag
next

return	

;--------------------------------------------------------------------[/code]

Another way of explaining it would be to say…
the way the code works is i am using the rotations of the MRHH (Middle Right leg : Hip Horizontal) as i starting point as that servo rotates left to right when stick pushed up. i just changed the command slightly. anyway if i wanted to get a servo to rotate with this one but on a slight delay how would i put this into the “powerpod” code. :confused:

thanks for listening. :wink: