VB Windows Hexapod Control Program based on Xan's Code

Actually I purchased two of them! Tried them on an XP and a Vista computer with the same result. Does get some color in natural light if I adjust the settings. The cameras are exactly what I was looking for, wireless, small, and self powered.

I have a Phoenix Hexapod. No project thread. I’d be very interested in getting the CAD file.

Tried running my phoenix with your code last night. Couldn’t get it to work. Using a usb to serial converter on the com port of the ssc-32 from my laptop. Debugged through the code and it seemed to be opening and sending to the comm port. I also have mine setup to run with a PS2 controller so I’m not sure if it will let me send commands to the serial port when all that’s hooked up. Code looks great, I can’t wait to get it to run.

You are running a bot-board as well then? If so, then I think the jumpers are set to take commands from the bot-board at a different baud rate and not from the serial port. Unfortunately, the code is designed to work with the SSC-32 solo. But, it might be a matter of switching around a few jumpers. I’ll have to look into it.

I think you’re right.

I’m working on setting up a Bluetooth modem.
lynxmotion.com/images/html/build117.htm

I also found a post on using the Bot Board and serial port at the same time.
lynxmotion.net/phpbb/viewtopic.php?t=3329

I found another post but can’t find it again that had Bot, Bluetooth, and serial all working together but it seemed pretty involved.

Eventually I’ll just need the bluetooth modem but was trying to setup the serial to test everything first.

Just a little background. I purchased a phoenix pre-assembled. Taking pictures of everything before I take it all apart so I can get at the ssc-32 and have a look.

In short I got everything working. Finally I hope to get back on topic.

For anyone interested I was able to disconnect the Bot board.

They had it jumped to run at 38.4k baud. I didn’t have any jumpers but was able to move the existing jumper to a different position to at least get 9600 baud out of it but it still didn’t work.

I read another post that said the light on the board would go out once it got a signal through the comm port. After some additional research I realized I needed to jump two sets of pins to get the db9 to activate. Of course I didn’t have any jumpers! As luck would have it I still had an old PC around that didn’t work and I was able to pull two jumpers off that. I knew I didn’t throw that thing out for a reason! With that I was able to get the db9 to work. I fired up the software (I told you I’d get back on topic) set it to 9600 baud and the light went out and the legs started to move! The software works at 9600 baud in cause anyone is wondering.

Not satisfied with that I went back to the computer and found one more jumper and got it up to 115.2k.

The front four legs are working but not the back two. I’ve spent all my time trying to get the hardware to work and haven’t had any real time to look at the code (which is why I started looking in this thread to begin with!). At any rate it looks like I’m on my way with some great code to get me started!

Nice work with the jumpers. :open_mouth:

Keep me posted on your progress.

Yes i had the same problem to get the Db9 working

The ssc-32 user manual has diagrams which show where to place

My robot wont move however but ive got a whole day at it tomorrow!

a question about the offsets from servos.

you have integrate it in your code, but can i use the offsets who i write to the ssc32 register?

can i write it to default 0… and then use ssc32 offsets?
its is possible or i must change in ssc to default 0 and i can overtake this values to your code?

or how to handle this?

I now have my robot moving using the GUI, works a treat.

Now how do i go about movement to follow an object in roborealm as your program interfaces with roborealm?

I have done the image processing i want in roborealm, i just wondered how to integrate your program into roborealm

Thanks

THe offsets section of the code used to be operational until the SSC-32 allowed for the values to be stored on-board. Since then, I removed the offsets functionaloty from the code.

So, short answer: use the on-board SSC-32 offsets. That section of the code is non-operational.

Glad to hear that it is working!

First, you have to setup roborealm properly (see Roborealm setup guide). Then to start object tracking, just click the object tracking button on the GUI. As long as your Roborealm image processing is producing a COG then it should follow it around the room. The GUI simply reads the values produced by Roborealm thorugh the API and translates them into movement.

That having been said, the next verison of the code (which I hope to post in the next few days) will allow for much greater control over the individual movement aspects of object tracking. (see post above)

Version 1.2a has been posted! (See first post in thread for download) Enjoy!

Also I would like to thank everybody for all the support I have received. To date SSC32 Hex Control has been downloaded by over 200 people!

Ive downloaded it and now im gonna spend the day trying to crack this

Thanks for releasing

Impressive!

1 question , in the powerpod playstation code it has

;Legs
HipH_AngleMin con 21 ;30°
HipH_AngleMax con 107 ;150°
HipH_PulseMin con 910
HipH_PulseMax con 2090

HipV_AngleMin con 25 ;35°
HipV_AngleMax con 103 ;145°
HipV_PulseMin con 960
HipV_PulseMax con 2040

Knee_AngleMin con 36 ;50°
Knee_AngleMax con 107 ;150°
Knee_PulseMin con 1107
Knee_PulseMax con 2090

so although some of yours have minus values in, is it ok to just bang the degrees values into ur code?? i.e the bits after the brackets as my min and max angles?

And anyone out there with an extreme hex 3-R like myself , i got the following…

'[BODY DIMENSIONS](measured in mm)
Dim CoxaLength As Double = 32 'Length of the Coxa [mm]
Dim FemurLength As Double = 70 'Length of the Femur [mm]
Dim TibiaLength As Double = 108 'Lenght of the Tibia [mm]
Dim WakeStandingHeightY As Double = 50 'Typical stading height (body above ground) in [mm]

Dim RFOffsetX As Double = -50       'Distance X from center of the body to the Right Front coxa
Dim RFOffsetZ As Double = -100       'Distance Z from center of the body to the Right Front coxa
Dim RMOffsetX As Double = -120       'Distance X from center of the body to the Right Middle coxa
Dim RMOffsetZ As Double = 0         'Distance Z from center of the body to the Right Middle coxa
Dim RROffsetX As Double = -50       'Distance X from center of the body to the Right Rear coxa
Dim RROffsetZ As Double = 100        'Distance Z from center of the body to the Right Rear coxa

Dim LFOffsetX As Double = 50        'Distance X from center of the body to the Left Front coxa
Dim LFOffsetZ As Double = 100       'Distance Z from center of the body to the Left Front coxa
Dim LMOffsetX As Double = 120      'Distance X from center of the body to the Left Middle coxa
Dim LMOffsetZ As Double = 0         'Distance Z from center of the body to the Left Middle coxa
Dim LROffsetX As Double = 50        'Distance X from center of the body to the Left Rear coxa
Dim LROffsetZ As Double = 100        'Distance Z from center of the body to the Left Rear coxa
'--------------------------------------------------------------------


    'Feet Positions
    'Measured in mm from the coxa offset of the robot to the tips of the feet)
    RFPosX = -60     'Start positions of the Right Front leg
    RFPosY = -12
    RFPosZ = -45

    RMPosX = -90    'Start positions of the Right Middle leg
    RMPosY = -12
    RMPosZ = 0

    RRPosX = -60     'Start positions of the Right Rear leg
    RRPosY = -12
    RRPosZ = 45

    LFPosX = 60     'Start positions of the Left Front leg
    LFPosY = -12
    LFPosZ = -45

    LMPosX = 90    'Start positions of the Left Middle leg
    LMPosY = -12
    LMPosZ = 0

    LRPosX = 60     'Start positions of the Left Rear leg
    LRPosY = -12
    LRPosZ = 45

Anyone confirm or deny before i melt my hexapod??
And is there a problem as i am trying to launch

Hex Control App SSC32v1.2.vshost.exe

and nothing is appearing

Cheers

Umm…no. The reason is that the code is designed to take the actual mechanical limits of the servos (under perfect circumstances -90, 90)…and then it adjusts for the mounting angle later on in the MainIK() loop. Don’t quote me on this, but these angles appear to be “pre-adjusted” to account for the fact that the servos are mounted +/- 60 degrees.

Your other measurements look good to me.

Also, after you’ve compiled your code, you probably want to be launching Hex Control App SSC32 1.2a.exe not the vshost

Just for reference for anybody working on my code, all the code for the program is currently contained in the single .vb file for the gui called “hexapod control app 1.X.vb”. There are other .vb files in the zip like “robot structures” and “com setup” which are works in progress as I try to imporve the code. You can ignore them.

Unfortunately, since all the variables are contained in the code for the gui…you have to recompile the program each time you update the code. At some point I hope to be able to store individual robot information in seperate hardware config files (which I can then distribute with the code for the phoenix and others) but until then…you’ll have to update the variables and recompile the entire program to get it to work.

If only there were more time!

In version 1.1a
Just hooked up a fresh ssc-32. Wanted to check the version using your code.

Wasn’t getting the version so I added a Chr(13) to line 1202 and added a sleep and uncommented the label.

            If ComPort.IsOpen Then
                'Get SSC firmware Version
                SendSerialData("VER" & Chr(13))   '<<<<<<
                Thread.Sleep(50) '<<<<
                ButtonComConnectDisconnect.Text = "Disconnect"
                LabelSSC32Firmware.Text = "SSC-32 Firmware Version: " + ReadInputBuffer(12)
                PanelHexengineFunctions.Enabled = True
                PanelWakeSleep.Enabled = True
            End If

Viola I’m running version SSC32-V2.01XE! I have it talking, so next it gets a servo… :smiley:

Got the servo working. This is nice!

Thanks for fixing that BTW. :smiley:

And to think that I jsut took that out of 1.2a because I thought nobody cared…back in it goes.

For everybody working on 1.1a (non-face-tracking), I will be releasing an updated version (essentailly 1.2a w/ roborealm disabled) that includes some updates to the visual interface and to the motion engine namely, instead of querying the the SSC-32 constantly to see if the move has finished, the engine now uses an internal timer. These changes are already in the 1.2a w/RR version.

Everythng else will be stay essentially the same so can keep working in 1.1a and just drop all your robot variables right into the new code when it comes out.

Do you read the analog or digital inputs?

SendSerialData(“VA VB VC VD” & Chr(13))

I don’t think I’m getting this to work right. Never comes back with a response.