The robot so aptly named MechaCrab. This is my first attempt at a 2 DOF/appendage soft robotic quadruped. I’ve been mulling this idea over for a while as it came out of my initial designs of TAMI (I will get back to that project at some point…). The idea is to use 2 DOF soft robotic “legs” (identical to the TAMI arms) as legs. By controlling the X and Y positions of the end effector with a sine and cosine wave for position, the leg can essentially move in a circle, allowing MC (MechaCrab) to propel itself forwards.
Funnily enough, the actual form factor of MC came out of the reasonably small printer bedspace of my 3d printer – 150x150mm. Because of this, I settled on a 146x146mm square with a chamfer to denote the front of the robot. I proceeded to cut 4 circles out to mount the legs and servo mounts wherever I could find space!
Enter MC rev.1:
First revision of the MC
One mistake I made on my first few runs of this print was cutting holes for the servos but not adding the additional slot which allows the wiring through! This led to a couple of frustrating first attempts but I got there in the end. In this version, servos are mounted both in the base and sides.
The legs themselves are solely my standard filleted revolved T design with an additional piece of TPU on the end as a foot.
Leg and foot design
Combine these together and we have the MC body!
MC Rev.1 body – this was actually post assembly, hence the tendons still present!
“Wiring” of the tendons, it looks surprisingly cool! It also works with the standard horns that come with SG90 servos
To drive the MC, I developed a small board with the ability to drive up to 12 servos, the option for 4x I2C devices connected across two buses, two status LEDs, a HJ580-LA bluetooth LE module (full disclosure: I was actually just using this board to test out this module as this is THE SMALLEST BLE module you can buy at a size of 5.6x6mm including all crystals and an antenna!) and the potential for OTA flashing (not implemented yet). I chose one of the cheapo STM32F030C6/C8 ICs and decided to drive the servos from a timer interrupt as opposed to a timer PWM output for every servo. This leads to a tradeoff between processing power and resolution. With an interrupt frequency of 24kHz, I can control all 12 servo outputs with 24 steps (equivalent to ~4.6bits). This comes with the downside of around ~80% CPU time consumption when compiled with no optimization flags though this drops to ~35% with O1 to O3.
The board also features on latching and battery voltage monitoring along with enabling and disabling of the BLE module via a high side switch. I currently haven’t connected any sensors to the I2C bus as it turns out I had to hand an STM32F030 which didn’t break I2C onto either of my output pins! When I implement sensors, I’ll bit bang the output but for now, the only sensing is temperature using the STM32 internal temperature sensor. Comparing it to my IR thermometer gave an error of ~0.8degC which is around the +/-1degC stated in the data sheet.
Layout, schematic and 3d render
Stall current for the SG90 servos at 4.2V is about 613mA, with the worst case of 12 servos, all stalled, we’d be looking at a maximum current of 7.35A – pretty hefty and way too much for a standard 2.54mm female header which generally have a peak of 3A. The trace width for VCC is also only 2mm meaning continuous 7.35A would cause a 40degC temperature rise. However, servos are never meant to operate fully stalled as this indicates a fault condition. As a conservative guess, I have rated current during normal operation at half of the stall value (they won’t be needing to supply much torque for this application), this gives us a nominal operational current of ~306mA. As I am also only running 8 servos (2DOF, 4 legs), this gives a nominal current of 2.45A – which for reference leads to a 3.5degC temperature rise for a 2mm track! This is also within the 3A maximum for the 2.54mm header. The VCC track is much thinner than the surrounding ground plane so I only really needed to do my calcs for this track and could leave the ground plane to do the rest.
This was the first time I’ve used a HJ580 module and documentation is pretty sparse at best, it can however be found. I’m configuring the module using the standard AT command set then switching to a transparent UART mode once configured. The module has GPIO which determins what state is currently operation (config or transparent) along with a sleep pin (module is kept awake in software), connected to host pin and others. The module is also operating in slave mode.
I currently only communicate with the module using BLE Scanner though I’m in the progress of writing an Android app at the moment… My Java is S H O C K I N G. With BLE scanner however, I can bidirectionally communicate and display the temperature and battery voltage of the MC through bluetooth.
I’m currently in the process of designing revision 2. This will include better servo positioning, tendon guides and longer legs. I’m currently deciding whether to use stacked servo horns for high density packing or using the servo, geared to drive a capstan style object – similar to a sail winch servo. I don’t seem to be able to find standard 9g servos with multi turn functionality so I’ve designed a 1:2 gearbox to convert the 120deg angle to a 240deg angle. I’m 3d printing the parts for this so I will have to see how they come out before I decide on how viable it is!
Geared 3d printed capstan
High density servo packing with extended horns and tendon wave guides, roll on rev.2