Project Phoenix, a hexapod robot

HI!

I’m now very proud to present Balancing Phoenix!
Here are two pictures of Phoenix balancing her body while lifting one leg on top of some 5645 Hitec boxes :laughing:

Another angle of view:

I’ve modified Xan’s code alot lately… Yesterday I spent 9 late hours with the code, mostly frustrating debugging and thinking. Today I finaly got it all to work! :smiling_imp: I’ve implemented a Balance Mode that take care of balancing the body in all dimensions (XZY) translate and rotate. This is similar to Matt Denton’s balance gesture.

The pictures show Phoenix RC controlled when I remotely move her leg on top of the boxes.

Now Phoenix can walk with three different gaits (tripod, quadripple and wave). I can anytime switch between normal walking and balance walking (similar to Matt Denton’s p.brain walk engine). I’ll see if I can post a demonstration video soon. This is so cool! it’s almost like she becomes alive!

I won’t post the code before I’m 100% satisfied… :wink:

I think this latest feature makes The Phoenix Hexapod a very unique product, especially combined with precalculated moves (PEP + GP player).

I think that the balance ability is a major improvement and a key feature when it comes to terrain adaption. So far I’ve been impressed of what is possible with the Basic Atom Pro, but I think terrain adaption might be too hard for it. But we have to try! :smiley:

Looks Great! I cann’t wait to see the code!

Kurt

Hi,

I used my DV handycam this time for capturing a video.

I added some annotations to the youtube video too.

Enjoy!

Zenta,

That’s totally an awesome piece of work. I believe, that’s the best presentation of hexapod gaits, I have ever seen. The single leg balancing is fantastic. It really looks as if the bot is sensing its environment.

The fluidity in the gaits is really an impressive work. It deserves appreciation. Best of luck with your future goals.

Regards,
Umar

:open_mouth:

… Silence …

…

…Dude …

… This is…

Truly AWESOME!!

I’ve got nothing to say, this really looks so cool! I hope you are willing to share your genius founding’s again. I can’t wait to try it out!

Xan

:smiley: :smiley: :smiley:

xan’s said it all - top quality work there fella.

not had time to try any of the code you guys have been creating as my Phoenix is currently sporting one of matt denton’s MMS SMB, pBrain and HexEngine boards with a Sena EDS200 bluetooth module - which is working really well. I’ll post some video of her in action at some point soon

But if i get chance (any one got ideas to add a couple of extra days to the week and hours to the day?) i’ll build up a second SSC-32/BB2 based hex and look forward to try the code out myself.

Hi,

Thank you all for your kind words! It mean alot for me.
I still have some new ideas that I want to try out, but it’s hard to find enough time… :unamused:

I also promised you a tutorial for how to modify a RC tx, not done that yet… :blush:

Yeah, i noticed you moved to “the other side…” :wink:
I’m looking forward to see a video of her with another brain… Always interesting to see the results of Matt Denton’s work. As for many of us his hexapods has inspired me VERY much.

Wow man,

That hexapod looks awesome!
I think you did a great job!

Is there a video where I can see it walk? Or is that earlier in the topic posted?

edit: found the video’s on the projects page

Zenta,

I think now its time for your phoenix to climb up/down stairs :slight_smile: I am really eager to see the fluidity of its gait on uneven terrain.

And yeah, when are you going to add vision to your bot? :slight_smile:

Best of luck!

Hi,

For some days ago I captured a little video of Phoenix doing some ordinary walking when varying leglift heights combined with balance mode. An the goal of this video was to demonstrate the new GP ONCE command. Thanks to Mike it is now possible to run a simple sequence ONCE, starting with the first step and ending with the last step.

In this video Phoenix uses a simple sequence to shift body pose. One funny thing I discovered when shifting pose (you also need to change the XXPosX and XXPosZ for all legs when doing a pose shifting) was that Phoenix started to walk by herself in balance mode. The reason was that the spesial pose was always in unbalance (not symmetric). :laughing: But that was simply solved by a little variable.

BTW, you can hear my kids in the background taking a bath… :wink:

is this some dancing gait ? :slight_smile: …looks really smooth and realistic.

totally awesome work!

zenta, add some vision to the bot, and yes a multi-DOF arm+gripper to interact with the environment and a multi-DOF tail with a laser pointer to track down an object, thus making it the ultimate hexapod existing on the planet :slight_smile:

is this all possible?

Thanks!
The “dancing part” is caused by the balance mode
If you are refering to my quote about the simple sequence to shift body/leg pose, that’s when Phoenix places her legs in another position before walking again. I’m using a simple transition sequence made with PEP to do that.

LOL, if you’ve read the latest Robot Magazine you’ll see that’s almost already done. Ref the Chiara robot, this video.
But I’ve barely been thinking of vision. I’ve just read Harry Muellers article in the Robot Magazine about the SRV-1Q. I don’t know what kind of camera system I should try either, some object/face tracking ability would be cool!

Any suggestions are welcome!

I’ve been thinking for a while about a gripper… But that’s for my next ant - hexapod project… :wink: (just in the “thinking phase” yet).

Hi Zenta,

Great work but you have to help me out here… You use the ONCE command to set the legs or body in a different position (using SSC/GP) and then you start to walk (using ATOM). It may be a stupid question but what is the benefit of doing that in the SSC? You could also change the init positions of the legs in the ATOM. Or use the body variables in the ATOM. They can be used all together.

A technical question. How do the positions work together? Are the positions from the ATOM send to the SSC relative to the positions of the GP-player? For example, if the GP player sets servo 0 on 1600 (+100 from the middle pos) and the ATOM sends #0P1300 (-200). Will it go to P1400?

I’m curious how it works. I really should start using the GP player but I always think that I can do it easier with the ATOM because I’m used to that :wink:

Thanks!

Xan

Hi Xan,
I do only use the ONCE command to run a simple sequence with the GP player once. The sequence moves (transition) each leg to a new “home” position. I do also need to change the LFPosX and LFPosZ in the atom code(and so on) to all legs after running that sequence.
snip from code:

elseif FSVR 'Toogle normal/spesial pose
		
			if GPIsPlaying = FALSE then
				if NormalPose then
					NormalPose = FALSE
					GPSeqToBePlayed = 3	'Normal to spesial pose
					GPSpeed = 100
					GPoccupied = FALSE
					sound P9,[50\1000, 50\500 ]
					'Cool sneak attack pose! :
					RFPosX = 39		;Start positions of the Right Front leg
					RFPosZ = -138
					
					RMPosX = 100	;Start positions of the Right Middle leg
					RMPosZ = -58
					
					RRPosX = 58		;Start positions of the Right Rear leg
					RRPosZ = 110
					
					LFPosX = 39		;Start positions of the Left Front leg
					LFPosZ = -138
					
					LMPosX = 100	;Start positions of the Left Middle leg
					LMPosZ = -58
					
					LRPosX = 58		;Start positions of the Left Rear leg
					LRPosZ = 110
					
					BalCompZ = 29
				else
					NormalPose = TRUE
					GPSeqToBePlayed = 4	'Normal to spesial pose
					GPSpeed = 100
					GPoccupied = FALSE
					sound P9,[50\700, 50\1300 ]
					'Normal pose :
					RFPosX = 53		;Start positions of the Right Front leg
					RFPosZ = -91
					
					RMPosX = 105	;Start positions of the Right Middle leg
					RMPosZ = 0
					
					RRPosX = 53		;Start positions of the Right Rear leg
					RRPosZ = 91
					
					LFPosX = 53		;Start positions of the Left Front leg
					LFPosZ = -91
					
					LMPosX = 105	;Start positions of the Left Middle leg
					LMPosZ = 0
					
					LRPosX = 53		;Start positions of the Left Rear leg
					LRPosZ = 91
					
					BalCompZ = 0
				
				endif

I didn’t find an easy solution to do it only in your atom code. There might be a way to do it, any ideas? Using sequences seemed to be the easiest way.

No, I don’t think so. Are you thinking of the offset register’s? I still do it the old way… with the accurate calibration of center, min and max in the visual sequencer SSC32 configuration. And PEP do also use the same calibrated values/calculations.

Agree, you should try the GP too! Ex. like the sequences where Phoenix is playing with the box, I don’t think that’s easy to do with only ATOM… :wink:

Hi Zenta,

I think I’ve got the idea. You do use the init position to get the legs on another position but you need the GP player to get them there! That part slipped my mind :blush:

Making this possible with the code means that we have to change the gait sub. But I agree this is the easiest way.

You’ve already answered this. I didn’t know that you need to run the sequence AND change the values of the init positions as you showed in the code snippet.

Yep, the GP player is really useful for those cool movements!!

Xan

zenta, how did you add those annotations in the youtube video?did you use some video editing software?

thanks

Regards,
umar

Hi Umar,

The small annotations are made in/with youtube. Go to the “my_videos” section and click the “Annotations” button under the video you want to add annotations.

For the latest video I used Pinnacle Studio for editing.

I think I’ll use Pinnacle studio.

Thanks zenta for the information :slight_smile:

Hi,

I posted the balance code in Xan’s Phoenix code thread.

Enjoy! 8)

Hi,

I’ve done some simple testing for using FSR (Force Sensing Resistor) mounted on the foot of one leg. I’ve not found a good way of mounting the FSR yet, I have an idea but that means I’ve to replace the tibia part with a new custom made. The problem with my setup with the FSR so far is that it has limited sensing when the leg touches an object/ground in an angle. You can see in my little test video that the sensor has problem sensing the big box :laughing: .

Here is a picture of how I mounted the FSR, just using a heat shrink and a rubber knob (is that the right word? :blush: ) at the end.

Any suggestion of how to mount/integrate the FSR would be highly appreciated!

I used a CMOS 40106 HEX schmitt trigger inverter for reading the FSR value (in serial with a 10k potmeter for adjusting), the output is directly connected to one of the BB2 pins.

The leg is moving 5mm pr step at full speed. Its rather slow, so thats the reason for why we need more calculation speed. Moving just 1mm pr step would be ideal, but that’s really dead slow. Also higher comspeed to the SSC32 would help. Since we can’t read the actual RC servo angle I think this is the only way around it. We would also need forward kinematics calculation.

This little test does also demonstrate the benefits of the balance mode combined with terrain adaption.