VB Windows Hexapod Control Program based on Xan's Code

Tim,

Don’t know why roborealm is not launching if the path is correct and the API is installed correctly it should work?

As for the file, included in the zip is a .robo file called hexvisionblue.robo it is an example and should get you up and running but you can create any filter that ends with the production of COG coordinates. Let me know if that helps.

hmm i start roborealm manualy then it works fine.

start it befor hexcontrol. show api is running an cam pictures are ready with cog box. then start Hexcontrol.

other quastion. has somebody a RR file for perfect face tracking?
that RR find the Head, or he found eyes and mouth and then he makes COG box over the Head. how its possible?

im sure its possible :wink:

Hello,

I am trying to put a hexapod together and follow the work done here, but when I went to RoboRealm, the software is only a 30 free trial and $89.

Didn’t it use to be free?

Where is the link?

In an effort to recoup some of their software development investment time Steven has decided to start charging for Roborealm. We have it on the website.
lynxmotion.com/Product.aspx? … egoryID=15

Thats a shame, understandable, but a shame all the same.

I suppose you can’t begrudge someone wanting to make a living from doing something they love and have put a lot of effort into.

I probably would have gone off on one, but I noticed that the RR website has my rover project at the number one spot on the resources page so I’d better keep my mouth shut :slight_smile:

a question?

is you xan’s code 1.3 online?

have anyone a RR file for good face tracking…
that RR finde Eyes and moth an track this…?
know someone how to do that?

like a program how find face points…

i want that my hex only track faces from humans.

HexControl v 1.2 only contains Xan’s 1.2 code. No balance calcs, yet.

do you know the movie: An American Tail its a old cartoon.

there are a spyder that has a cowboy hat and she do
the whole time, swinging a lasso.

i want change settings frome one leg at the front…

can you swing a lasso with a hex… or i need a motor for turn the coil?

someone an idea?

I am sure you could swing a lasso with a hex but the current hexcontrol has no code for scripting moves like that. I think Zenta’s PEP program might be better for scripting sequences. I’d love to see a video if you can pull it off.

Just a little update on the progress of the program:

I am working to implement config files (so you don’t have to edit the code to set up your hexapod anymore!) This was my post on Xan’s thread earlier:

"Just to give some more background to this decision, I am working on encapsulating that massive (and slightly overwhelming) list of variables at the begining of the code in a hexapod object class and I want to allow people to be able to modify the setup of the hexapod without going into the code to make the changes. Thus…the config file.

The question I am facing is whether to set the config file up as 1) an INI (as suggested by LikWidChz) which would allow for easy .txt based editing or 2) as XML (allows for the easiest and most intuitive saving…but requires that people set up the hexapod through a series of menus in the program.)

If I run the INI route, the file will look very similar to Xan’s new 2.0 config file…which is an added bonus."

Any preferences out there for INI vs. XML?

I wanted to mention that I’ve had people request a program that would automatically configure the comm port. What I thought I would do is create a simple app that would iterate through the active comm ports and send a VER command. If it returned a version number then the app would know it found an SSC32 and would automatically create the configuration file. I thought about making it a console app so that it could be kicked off in command line mode by any program. It would then do the job of creating or updating the config file. Then other programs would only need to have logic to read the config file. Of course anyone could manually update the config file with an XML editor if they preferred.

COM1
My Cool Phoenix
Hexapod
Phoenix
None
One
8
115000
3

  1. I really like the idea of saving the comm setup/other program defaults to an XML config for the program. If you work on that, can I implement it in the next release?

  2. For the robot config file, I think I’ve decided to go XML also.

Currently all the robot variables will be stored in a class called “hexapod” which will contain a “state” and a “characteristics” class.

States contains well…state variables for while the robot is running. The characterisitcs class will contain all the hardcoded physical information about the robot and this section of the class is what will serilzie to XML.

Right now it looks like this:

- <Characteristics>
  <Name>Robot Name</Name> 
- <Body>
  <InitialTranslateY>0</InitialTranslateY> 
  <MaxTurnRateY>0</MaxTurnRateY> 
  <MaxStepLengthX>0</MaxStepLengthX> 
  <MaxStepLengthZ>0</MaxStepLengthZ> 
  <MaxTiltY>0</MaxTiltY> 
  <MaxTiltX>0</MaxTiltX> 
  <MaxTiltZ>0</MaxTiltZ> 
  <MinTranslateY>0</MinTranslateY> 
  <MaxTranslateY>0</MaxTranslateY> 
  <MaxTranslateX>0</MaxTranslateX> 
  <MaxTranslateZ>0</MaxTranslateZ> 
  <MaxPan>0</MaxPan> 
  <MaxTilt>0</MaxTilt> 
  <MaxSpeed>0</MaxSpeed> 
  <MinSpeed>0</MinSpeed> 
  </Body>
- <Head>
  <PanPin>Pin #</PanPin> 
  <TiltPin>Pin #</TiltPin> 
  <PanOffsetCentering>0</PanOffsetCentering> 
  <TiltOffsetCentering>0</TiltOffsetCentering> 
  <Pan_MIN>0</Pan_MIN> 
  <Pan_MAX>0</Pan_MAX> 
  <Tilt_MIN>0</Tilt_MIN> 
  <Tilt_MAX>0</Tilt_MAX> 
  <PanArmLength>0</PanArmLength> 
  <TiltArmLength>0</TiltArmLength> 
  <HeadLocationX>0</HeadLocationX> 
  <HeadLocationZ>0</HeadLocationZ> 
  <HeadLocationY>0</HeadLocationY> 
  </Head>
- <LegArray>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
- <LegPhysicalChars>
  <LegName>Leg Name</LegName> 
  <CoxaPin>Pin #</CoxaPin> 
  <FemurPin>Pin #</FemurPin> 
  <TibiaPin>Pin #</TibiaPin> 
  <CoxaOffsetCentering>0</CoxaOffsetCentering> 
  <FemurOffsetCentering>0</FemurOffsetCentering> 
  <TibiaOffsetCentering>0</TibiaOffsetCentering> 
  <Coxa_MIN>0</Coxa_MIN> 
  <Coxa_MAX>0</Coxa_MAX> 
  <Femur_MIN>0</Femur_MIN> 
  <Femur_MAX>0</Femur_MAX> 
  <Tibia_MIN>0</Tibia_MIN> 
  <Tibia_MAX>0</Tibia_MAX> 
  <CoxaLength>0</CoxaLength> 
  <FemurLength>0</FemurLength> 
  <TibiaLength>0</TibiaLength> 
  <LegLocationX>0</LegLocationX> 
  <LegLocationZ>0</LegLocationZ> 
  <LegLocationY>0</LegLocationY> 
  <CoxaOffsetInstall>0</CoxaOffsetInstall> 
  <FemurOffsetInstall>0</FemurOffsetInstall> 
  <TibiaOffsetInstall>0</TibiaOffsetInstall> 
  </LegPhysicalChars>
  </LegArray>
  </Characteristics>

I have implemented windows load/save functions that allow the use to select the directory with the xml file they wish to load/save from.

I have a console app that searches for an SSC32, if found it displays the serial port and baud rate for the SSC32. Next I’ll create the config file to store the information.
SERV-O-MATIC Serial Port Config
http://www.otherrobots.com/lynxmotion/ServoMaticSerialPortConfig.jpg
Can be downloaded here.
otherrobots.com/Downloads/tabid/56/Default.aspx

Very nice. I am downloading it now.

SERV-O-MATIC Serial Port Config v1.1

Console application that searches for an SSC32 and displays the serial port and baud rate that the SSC32 is using.

The application takes three optional command line arguments:
Name, Category, Model
ServoMaticSerialPortConfig.exe “My Cool Phoenix” “Hexapod” “Phoenix”

It also creates a serial port configuration settings file that can be read by other applications. The file is located in the documents directory under “My SSC32\SerialPortConfig.xml” and also creates an XML Schema SerialPortConfig.xsd.

The application implements the class SerialPortConfig.vb that can be copied for use in other applications to both read from and write to the configuration file.

Here is the XML file:

<?xml version="1.0" standalone="yes"?> <SerialPortConfig> <SerialPortConfigs RobotName="Robot Name" RobotCategory="Robot Category" RobotModel="Robot Model" BaudRate="115000" Parity="None" StopBits="One" DataBits="8" PortName="COM3" /> </SerialPortConfig>

The application can be downloaded here.
otherrobots.com/Downloads/tabid/56/Default.aspx

Does the application check for any other baud rate setting on the ssc-32 besides 115000?

Yes, it starts at 115000 and iterates through the active comm ports in the order below.
{“115000”, “36000”, “28800”, “14400”, “9600”, “4800”, “2400”, “1200”, “600”, “300”}