Tuesday, 13 March 2012

Octopod, not Hexapod!

The scorpion has the 8 legs it deserves now. My early experiments show it's easier to carry greater weight without straining the front and back legs if there are 8 legs and not 6.

So that's now 16 of AX-12A and 8 of AX-18A servos for the legs. The arms and tail use a further 7 servos (mixed AX-18A and AX-12A).

The main 'chassis' is made from 4 black 'CM5 adapter' parts from Trossen Robotics

The Comms and Display board

The ATMega2561-based CM-510 has the limitation of only two serial ports. One is used for the Dynamixel bus, leaving only one other for Zigbee or PC comms. The Scorpion needs several serial ports:
  1. Spektrum DX7s remote control
  2. ĀµOLED-160-G1(GFX) OLED display
  3. PC logging
A separate Arduino Mega clone board is used to merge data from these three sources and route it to/from the CM-510's Zigbee/PC comms port. The Arduino board is connected to a home made (and slightly messy underneath) board with OLED display, superflux RGB LEDs and so on. More details to follow, but here are some early photos.

Broken legs - the work around

Even the weedier AX-12A Dynamixel servos used in the knee and hip joints have enough power to snap the weaker Bioloid frame parts - especially the F10 bracket.

The hexpod robot snapped two of these in early attempts at walking. I can blame my bad software, but it's not good when a software bug can cause a hardware failure...

So I've doubled up the F10 bracket, which should make it somewhere between 2 and 8 times stronger (the 8 times if the two layers are firmly clamped together and can't slide relative to each other). This seems to have done the trick. No more broken legs.

Sunday, 4 March 2012

Controlling the legs: Inverse Kinematics

For my robot I'm developing an Inverse Kinematics (IK) engine from scratch. The purpose of the IK engine is to convert actions and positions from coordinate systems which makes sense for the complete robot (and the operator) into angular movements of the leg servos (see Wikipedia)

Although this is long since a 'solved' problem, it is nonetheless difficult to get right on an embedded platform because the equations are tough to solve symbolically or numerically. I'll be developing an approach where a workstation precomputes a number of tables which are downloaded with the robot firmware and then used by the robot in real time.

The first step is to get accurate positioning of a single leg. We wish to compute the three servo angles...
  • theta S - Swing angle
  • theta H - Hip angle
  • theta K - Knee angle
 ... in terms of our input parameters:
  • X - leg displacement forwards (horizontal)
  • Y - leg displacement perpendicular to body (horizontal)
  • Z - distance from hip to tip of foot (vertical)

Bioloid, Embedded-C and AVR Studio

Robotis generally includes pretty good instructions on how to use what they call 'Embedded C' - running compiled C code natively on the CM-510 or other controller. However no matter how many times I followed their instructions, AVR Studio (the GUI / build environment) could not find the compiler and make utility (provided in WinAVR).
The solution is to manually configure the path to WinAVR executables in the 'Custom Options' tab of the Project -> Configuration Options menu dialog. The image shows my example, where WinAVR was installed to e:\bioloid.