Held on Sunday-before-Labor-Day, the micro battles (1 and 3 lb classes) event at Robot Battles at Drag­onCon grew over the years in competi­tors while shrink­ing in sched­ule, turn­ing into a single-elim­i­na­tion, no rumbles affair. That means half of the bots entered get exactly one fight: less than ideal odds for me consid­er­ing I had exactly one win over the course of like ten events. So, it’s time to go big(-ger). Big enough to put me into the 12 and 30 lb fights on Labor Day!

The concept started, as usual, with sourc­ing motors too big to be useful in a 3 lb. Normally I’d shove them into a Big Data anyways and call it a day2, except this turned out to be a phys­i­cal impos­si­bil­ity and w-wait… why am I still think­ing beetles?

Now, “too big for beetle” doesn’t auto­mat­i­cally mean I can go up to the next weight class. The gap between 3 lb and 12 lb—a factor of 4—is the biggest change in scale between any two adja­cent weight classes in US combat robots3. Compared to the pair of 550-ish drill motors commonly used by many success­ful 12 lb Drag­onCon robots, my 22 mm diam­e­ter Maxons look posi­tively puny. I mean look at them compared to the Stan­dard Rage­Bridge 2.

Why, then, did I think this setup could work?

The wind­ings on the motors, rated for 24 V, are rela­tively “cool.” Even as two-pole inrun­ners, they clock in at a low, low Kv of 549 RPM/V, a figure you might expect from a 22-pole 50 mm hobby outrun­ner. As a result, I can expect them to produce a fair amount of torque with­out running insane current through them.

The motors have Hall-effect sensors that allow their controllers to deter­mine to read—at any speed and within ±15°—the rotor angle and thus the appro­pri­ate stator current to produce torque. This helps close the gap between brush­less and brushed trac­tion systems at low speed.

You don’t have to even peek at the datasheets on the plan­e­tary gear­heads to tell they’re srs busi­ness. The 6 mm diam­e­ter shaft supported by sealed 696 bear­ings looks comi­cally over­sized rela­tive to the gear­head body.

Running the numbers, I can tell that with a 6-series lithium-poly­mer pack, this setup can push out simi­lar peak mechan­i­cal power to drill motors, but in a smaller, lighter pack­age4. Unfor­tu­nately, a smaller, lighter pack­age has less cool­ing capac­ity and ther­mal mass, thanks to lower surface area and actual mass. So aver­age power dissi­pated during a three minute fight was gonna be a prob­lem.

By the way, the absurd aspect ratio of indus­trial gear­mo­tors make it look like I’m only mount­ing them by their face. In actu­al­ity, 41% of the over­all length of each gear­mo­tor (the entire plan­e­tary gear­head, adapter plate, and change) is supported by frame mate­r­ial.

How do you resolve design uncer­tainty and in the process dip your toes into the 12 lb pool? Build a brick bot with four of these motors for trac­tion to see how things would work out.

except lol jk no I didn’t. Too much pride. Due to the Wang-wedge arbi­trary nega­tive double stan­dard (“other people can build wedges but I can’t”), I had to put in some kind of… active weapon?

Given that exactly one event in the coun­try runs 12 lb sumo fights and it’s domi­nated by the lifter/flipper–clamper/grappler spec­trum5, I figured I’d build this new bot as a clone of the most iconic of that event, the 30 lb Über­clocker. I even named the CAD model as such:

But ego struck again. I made it a design goal to NOT be like Clocker aside from the over­all concept of a four wheel drive grap­pling bot. This meant no look­ing at refer­ence photos. It meant inten­tion­ally stuff­ing in differ­ent compo­nents from what I can recall Charles using. It also meant replac­ing entire subsys­tems with silly shit: servos instead of lead­screw to actu­ate the clam­per, no spring legs instead of yes spring legs, belt drive lifter instead of gear drive lifter. After all, it’s not truly Clocker with­out its lift gear, right?

Turns out “not look­ing” and “don’t rip off” are mutu­ally exclu­sive crite­ria. Yes, I avoided the gear drive, but still ended up with a hollow aluminum lifter live shaft running in sleeve bear­ings with clamp shaft collars for shaft-to-arm torque trans­fer, because I liter­ally forgot that’s what’s on Über­clocker but had enough subcon­scious fanboy memory to design it like that anyways.

Finally, every­thing had to be metric. At this point, this has almost noth­ing to do with round numbers and stan­dard­iza­tion than to do with my grad­ual switch to build­ing almost every­thing with a hefty help­ing of “Chine­sium,” the bot community’s term for materiel sourced (nearly) directly from East Asian suppli­ers through the likes of eBay, HobbyK­ing, AliEx­press, and Bang­good. At first I thought the term implied low qual­ity (for some folks, they’re synony­mous) but more accu­rately it describes the uncer­tainty of these items’ origin and dura­bil­ity than a clear state­ment against them. Regard­less, Chinesium’s all metric, since little of it is neces­sar­ily intended for direct Amer­i­can consump­tion.

After moving to Cali­for­nia and thus away from the Inven­tion Studio, I’ve been in enough of a water­jet drought6 to have forgot­ten how to prop­erly design for it. I put in 0.05 mm clear­ance between tabs and slots in my part, which wasn’t enough for BigBlue­Saw‘s OMAX qual­ity 3 cut for 1/4 inch 6061. Fortu­nately, I consider manual filing an excit­ing sub-hobby of combat robot­ics (and of life, even), so this is A-alright.

As a aside, BigBlue­Saw is ludi­crous in the best way. The web quote inter­face liter­ally dumps into a full DXF ingest/process pipeline (writ­ten by Simon IIRC) that computes cutting length, number of pierces, image previews, and I assume some approx­i­mate part nest­ing to get you an exact price nearly instan­ta­neously. If that’s just my expe­ri­ence with the fron­tend, the automa­tion going on from site to machin­ing must be some­thing delight­ful.

Oh and Julie runs the customer service so if you order parts through BBS, it’s like order­ing from team Chaos Corps. ^_^

The bronze sleeve bear­ings for the lift shaft needed an exact circu­lar press fit, so those were water­jat to exact dimen­sion and finished on the Google Work­shops CNC mill, although not before I ruined two bear­ings by press­ing them into the rough water­jet bore anyways…

Simi­lar idea here: these spac­ers (hubs?) go into the 22 mm bore normally occu­pied by a 608 “skate” bear­ing, so I’m finish­ing their outside diam­e­ters on the lathe to clean up water­jet taper and non-circu­lar­ity (water­jets are X-Y machines, after all). The live center was not a good idea. I should have used purely axial force to jam the hubs against the jaws.

Kind of silly but the 4 mm keyway was under­sized on this gear­head output shaft, so I expanded it real quick. I should have clamped the shaft, not the motor.

We don’t talk about this.

Or this.

Needs more chmafer.

All the black plas­tic you see is Onyx carbon compos­ite parts that Jamo 3D printed for me on a Mark­forged Mark Two. These parts are unbe­liev­ably stiff and light. The qual­ity of the print­ing is insane; most of the circu­lar bores were designed to exact dimen­sion and ended up perfect press fit. I had orig­i­nally intended for all the plas­tic to be milled from UHMW but this oppor­tu­nity came up and saved me a lot of machine time.

lolservos

One thing I think is reason­ably unique to Lift­lord is the servo clam­per mech­a­nism. Normally hobby servos are too wimpy to use for secur­ing another 12 lb bot. But I figured if I add a slightly compli­ant link—in this case, ultra-high mole­c­u­lar weight poly­eth­yl­ene (UHMW-PE) stranded fish­ing line—and remove the clam­per from self-right­ing forces by using a spring to open the jaws, a pair of “stan­dard” hobby servos might survive combat load. The orig­i­nal idea involved adding even more compli­ance to the fish­ing line link with a short high-rate spring on the servo horn, which you can see in the photo (not attached). However, I couldn’t run them as far past their spec as I wanted to. They stretched little before plas­ti­cally deform­ing.

Why couldn’t I run both servos from the same signal with a split­ter? Well, the servos are facing in oppo­site direc­tions. Running off of the same signal, they’d each spin in the same direc­tion that’s actu­ally oppo­site direc­tions. I need one servo to run on a chan­nel that’s reversed in trans­mit­ter soft­ware.

Or do I? What if I were to reverse one of the servos? In hard­ware?

After all, these servos are just a nega­tive feed­back ampli­fier around an analog poten­tiome­ter (“pot”) and a brushed (DC) motor. The poten­tiome­ter linearly maps rotary posi­tion to analog volt­age. If I were to reverse that mapping, say by swap­ping the pot’s outside termi­nals, then I’d reverse that mapping, so that the analog volt­age now maps to a rotary posi­tion mirrored across the pot’s mechan­i­cal range.

Finally, I’d have to negate the gain of the controller too, say by swap­ping the leads of the motor to reverse its polar­ity, so that the feed­back to angu­lar posi­tion change remains nega­tive.

I tested this on some cheap servos, taking care to mark the servo I reversed. To my surprise, this hack just worked.

Less to my surprise, servo revers­ing turned out to be a fairly common hack, with docs all over the inter­net. It’s almost like some people prefer to change things in hard­ware rather than in soft­ware or some­thing.

But of course, the high-power servos I intended to use were insanely diffi­cult to reverse like this. Its motor, control board, and pot were all one beefy unit hard soldered together. I can’t even bring myself to describe the horri­ble next level hack­ing I impro­vised to make them work.

Epic ship day extrafirmware

The day before I left for Drag­onCon, Liftlord’s state was roughly “the parts fit and are holes are tapped.” This left open the prob­lem of how the hell does this move, which, as I expounded on above, was the most urgent and impor­tant prob­lem in the whole design. Goes to show how great I am with prior­i­ties.

The orig­i­nal least common denom­i­na­tor for trac­tion elec­tron­ics was to use cheap Chinese controllers (CCCs) flashed with SimonK. This was easy and shitty (because it didn’t take advan­tage of the Maxons’ sensors): the absolute worst case backup plan, which is to say it was plan A on account of all other plans being not even conceived.

Unfor­tu­nately, SimonK’s default startup routine didn’t “take” on my motors. I didn’t want to figure out why or do the tuning because I wasn’t confi­dent I could make it work in 12 hours. So time for plan B, which as I mentioned, didn’t exist or anything.

UHHHHHHH.

I started going through random boxes on my shelf because I figured, WELL DANG I should be able to drive some motors. What do I find but the control/power distri­b­u­tion board from HÄRDBÖRD, complete with PIC24, XBee module, and most impor­tantly Maxon DEC 50/5 motor control modules.

This was maybe the second or third printed circuit board (PCB) I had ever designed, from way back in the heady days of 2010, and part of the first thing I ever worked on with Jamo. It even has a Batch­PCB ID mark on it, from the times when hobby­ists were will­ing to wait two months for PCBs and we were happy to do it because they had green silkscreen just like the pros and only for like fifty bucks my god this is so amaz­ing we’re living in real time like all effect­ing a desk­top manu­fac­tur­ing REVOLUTIONNNNNN.

Once I came down from the Bre-stol­gia, I dug up the docs for the modules and found that they have a 0–5 V input for speed control, an enable pin, and a direc­tion pin. This meant that I needed a micro­con­troller to convert the digi­tal pulse-width modu­lated (PWM) signal of my receiver (RX) into what the DEC 50/5s under­stand. The PIC24 code on the board actu­ally did some­thing simi­lar: convert Wii Nunchuk data received over XBee to Maxon DEC analog. Unfor­tu­nately I couldn’t find a 16-bit PIC program­mer anywhere so I couldn’t just hack up that code; I’d have to find a small, general purpose micro­con­troller to use in the PIC’s place.

You might expect me to be trip­pin’ boards. But I don’t normally need small, general purpose micro­con­trollers because my projects tend to be the oppo­site of general purpose. So I don’t have any Arduinos Micro chill­ing about. Or mbeds LPC1768. Hell, I didn’t even have an STM32FxENDEAVOUR.

What I did find was a Teensy LC purple edition in a fiber grocery tote that I scored in some swag bag at a comput­ers confer­ence (both the board and the bag). This… this is my San Fran­cisco life.

This is the “low-cost” (LC) version of a Teensy, using a ARM Cortex-M0+ core Freescale micro­con­troller that has non-5 V toler­ant input pins. This means that the Teensy LC can’t directly take the 5 V “READY” signal from the DEC modules. More crit­i­cally, it also means I can’t slap a pull-up resis­tor to 5 V onto an open-drain PWM pin and expect 5 V PWM output, with which I’d use to synthe­size 0–5 V analog. I need a level shifter for each input and a buffer (or level shifter, which is like a bidi­rec­tional buffer) for each output.

I ended up wiring things up “dead bug” style on the back side of a blank HÄRDBÖRD PCB. The red board is a Spark­Fun Logic Level Converter – Bi-Direc­tional with four level shifters. The Teensy LC itself also has a 5 V-buffered PWM output, which I used. The DEC modules’ digi­tal inputs have 2.4 V thresh­olds, so they didn’t need buffer­ing from the Teensy LC. But wait, why is the the 5 V digi­tal PWM output connected straight to the DEC module’s speed value input? Don’t you need to filter it to analog? Isn’t the 10 KΩ output of the level shifter too high compared to the 107 KΩ DEC input imped­ance? The answer is the same as always: STFU about my hard­ware bug and fix it in your firmware.

Teensy uses the Arduino IDE and libraries. They mostly don’t get in the way of writ­ing normal C++, except for egre­gious novice mistakes designed into the Arduino library like min/max macros. The libraries are extended with addi­tional calls by Teensy. The Teensy-specific exten­sions saved my bacon this time, because they include analogWriteFrequency and less crit­i­cally analogWriteResolution, which allowed me to run PWM output at CPU frequency / (1024-step reso­lu­tion), or roughly 47 kHz.

This was appar­ently fast enough to be cut out by what­ever low-pass filter was on the DECs’ speed inputs.

Now you can see that all of my belt tension­ers are M5 shoul­der screws with sleeve bear­ings, bolted into frame slots with nylon lock nuts. Also, jaw/spider shaft couplers because why not.

Once I real­ized it all worked, I threw on an IMU (why not?) and mummi­fied it all in elec­tri­cal tape. Oh, remind me to never again use high strand count sili­cone-insu­lated wire for board-to-board connec­tions because you have to twist and tin stripped ends before solder­ing them to pads. Huge PITA.

Mechanism dysphoria

Around this time I also discov­ered that my attempts to engi­neer out the uncer­tainty around the 27:1 775 Chine­sium gear­mo­tor might have landed this bot well into overkill terri­tory. It was no longer accu­rate to call it a lifter, since it was more than happy to toss my 3 lb bots into the roof at 50% trans­mit­ter rate gain and lowest Rage­Bridge current limit. It blurred the lines between lifter and flip­per. Lift­lord is…

WEAPONFLUID

Time to install googly eyes.

DragonCon

Drag­onCon 2016, held in down­town Atlanta, GA on Labor Day week­end, was what­ever Drag­onCon is. It’s hard enough to describe Drag­onCon rela­tive to what I think other cons are like, but it’s impos­si­ble to explain in absolute terms. Instead I’ll just point out that it has the second-oldest robot combat compe­ti­tion in the world and fasci­nat­ing cosplay.

Actu­ally, I’ve been given plenty of chances to plug Drag­onCon cosplay and never did. I shouldn’t pass up this one.

DragonCon’s lack of focus on any partic­u­lar genre—though it’s heavy on fantasy and sci-fi—gives it a multi­fac­eted iden­tity that bleeds into its cosplay­ers.

This and the partic­i­pants’ devo­tion to their prod­uct results in very eye-catch­ing costumes that don’t neces­sar­ily repro­duce char­ac­ters from any partic­u­lar intel­lec­tual prop­erty (IP).

In fact, some of my favorite costumes are the ones that juxta­pose unre­lated IPs, gener­at­ing humor by surprise and some­times détourne­ment. Iron King Triton is pretty emblem­atic of DC’s “why not” remix cosplay perfor­mance.

They did some outstand­ing work. I’m in total awe at the hustle they and other folks at Con put into their vari­ous projects, all of which I consider perfor­mances: parade costumes and vehi­cles, knowl­edge exchange panels, even prep­ping them­selves for party­ing is a planned endeavor. I got some sharp regret for not walk­ing around with a camera; after all, I had less to work on so I feel I was oblig­ated to capture it all. Instead, I have three photos of food. Thanks, every­one else who did docu­ment!

Competition

From team TRIGGER WARNING… this bot’s AGGRESSIONS are anything but MICRO. It’s LIFTLORD!

After all that, I became uh, indis­posed. So Aaron drove Lift­lord for me. He had brought a 3 lb flail bot, which fought in the previ­ous day. He’s better at driving Lift­lord than I am with­out having even tried it previ­ously, while I had at least 20 minutes of driving prac­tice.

I think Lift­lord even­tu­ally exited the bracket as a quar­ter­fi­nal­ist? I’m kind of hazy on that one. Oh did I mention that the tour­na­ment was single elim­i­na­tion, just like the insect (1 and 3 lb) classes? There goes 50% of my moti­va­tion for build­ing a stage bot.

I was giddy seeing this side-by-side because I honestly didn’t expect Lift­lord to be so simi­lar to Charles’s 12 lb version of Über­clocker, 12 O’Clocker, given my require­ments on “not look­ing at refer­ences.” It’s not as adorable as 12 O’Clocker though.

Finally I got up to the stage for rumbles. As I under­stand, I won the second one but as I contin­ued to be uh, indis­posed… I don’t really remem­ber it. I’m feel­ing too embar­rassed to watch the video since I was prob­a­bly driving like derp.

Driving this bot really made me real­ize what a nonsen­si­cal amount of coor­di­na­tion is required to pull off a Charles-style grap­pling perfor­mance. And Liftlord’s clam­per has posi­tion control while Über­clocker has first- or second-deriv­a­tive control. I had decided while prac­tic­ing before the tour­na­ment that I wasn’t even going to bother with the clamp­ing. I just wasn’t able to do the whole maneu­ver-scoop-clamp-lift sequence with author­ity. It also helped me appre­ci­ate what a huge hindrance the stage risers’ joints were to bot mobil­ity. If you don’t raise the lifter wedgelets and keep them raised, they will jam beneath the cheese-grade steel frame. I’m impressed with the prac­tice that the veteran bot builders must have put in to put on the show that they do.

This is actu­ally my first win at Drag­onCon in I think six odd years of trying to compete in it. I felt kind of vali­dated that I could suppress my urge to build nutty curios and put in the atten­tion to detail—Loctite every screw, wrap all electronics—to enter some­thing compet­i­tive. It pointed out driving as some­thing to work on: my shitty tour­na­ment record and frequent malfunc­tions means I’ve had rela­tively little arena time in the years I’ve been doing this hobby. Maybe it’s time for a strat­egy rework? ∎

Shouts out to Jamo for the Mark­forgery, Aaron for the hacks/driving/photos, Wes for googly eyes/tape work, Big Blue Saw for their help, and every­one else at Drag­onCon 2016 who made it an incred­i­ble expe­ri­ence.