# OVERVIEW
This page describes the development of a 5DoF voxel assembly robot (analogous to the BILL-E systems).
This work extends on prior CBA work on voxel assembly robots, i.e. [BILL-E](https://cba.mit.edu/docs/papers/19.07.materialrobot.pdf), [exponential BILL-Es](https://cba.mit.edu/docs/papers/22.11.Nature.pdf), and [recursive assembly robot v0](https://cba.mit.edu/docs/theses/23.06.smith.pdf). The end point of this prior work demonstrates one robot assembling another robot, and the assembly of small-scale load-bearing voxel structures. This project picks up there with the goal of scaling the systems up (to the point of usefulness).
## FINAL PROJECT
The presentation/final documentation for this lives here: https://docs.google.com/presentation/d/1sz_XiYnPlG_qv1JfmC6lCiN528l4FQPVkFrQXclEFFY/edit?usp=sharing
The system is the 5-dof modular robotic arm, with a hello world pen drawing demo. The various components are: 3DP planetary gearbox, BLDC driver, and integrated reflow-solder connector plates.
## REPO
Here (log in required): https://gitlab.cba.mit.edu/miana/szczur
## REVIEW
To see some of this work in action for a different application, see the controls recitation: https://fab.cba.mit.edu/classes/865.24/topics/control_ml/
## LOG
### latest
see the final: https://docs.google.com/presentation/d/1sz_XiYnPlG_qv1JfmC6lCiN528l4FQPVkFrQXclEFFY/edit?usp=sharing
Resolved: fixed motor driver boards, works.
Upgraded: polycarbonate gearboxes, 2 layers, 30:1 reduction.
Added: passive spacer modules
Semi-integrated: Alex's grippers.
### 6 - robot module development
Our boards arrived! And they look great!
(unfortunately, they have p r o b l e m s)(which i attribute to finalizing their design/ordering them while delirious upon that good old mild upper respiratory infection and associated medications)
This is where we left off— i've made a new SPI bus out of polymide wire, brutal.... we're getting a new error reported from the SPI bus, which suggests to me that the connections are legit (i hope.)
Ok. Here's the motor driver board, and it's got the most problems. cry...
Here are the module attachment boards, which so far seem fine (though there are a few changes I'd like to make.)
How these work will make more sense if you look at the schematics below. Basically, one of them is affixed to the rotational end of the motor (or the active end of a static module), and that one has a heating coil laid out on one of its internal layers which we can control via a mosfet on the motor control board. We run that to cook some low melt solder (115 celsius melting temp) and solder that board to the one above it affixing them together mechanically and making the requisite electrical connections. easy-peasy.
In this version, the connection pads are massive b/c I don't want to worry about this thing disconnecting on its own. This does, unfortunately, mean that it takes years for it to get hot enough to melt the solder. But that's whatever, y'know.
Anyways. I tested these out on the bench with a power supply to figure out what voltage we need to be at to get what temps and how long it'll all take.
Our total resistance in the heating pattern is around 4.25-5.0 Ohms, you can actually see that change as it heats, since the current draw changes for the same voltage.
So, allegedly the melt temp for FR4 is around 120-145˚C- seems low to me for something called Fire Retardant 4. We're going to basically ignore this, because that's what I've done in the past, and assume we can hold it at around 145˚C with no problems. With the Flir on, keeping the temp at 145 max, on the backside of the board, we record temperature up to around 120˚C, which is in the ballpark of softening the nylon print, but we'll add a little spacer if that's a problem.
After a really long time, the connection pads heat up enough to melt the low-melt solder.
I think we may need a new flux though— for the previous version we were able to get the pads to a higher temperature without so much concern for burning the entire PCB + what was under it.
### wk 5 - motor module development
For the "module" component of the class, and for me. It's a second stage of reduction for the planetary box. So, with a little slicing of the model, this will set us up with a little modular stackable planetary gearbox.
Sun gear one, for the 10:1 stage.
back of the motor, magnet install.
back of the motor with the microcontroller installed (and encoder and such).
The two sets of planet gears.
Stage 1 installed...
And that's the whole thing.
Unfortunately, the Markforged does tend to print a little bigger than the Bambu was, and there's not like a external features first type button to press :/ so ah. probably have to deal with that b/c the gearbox feels too tight. not the worst thing tho?
### markforged aside
the markforged was having issues. bad!
Basically it seems like the z-offset got messed up at some point? anyways... took me longer than it should've to semi resolve that issue. It's mostly better now.
### 4 - robot module development
I've been doing board design. So the breadboard version of the motor drivers work nicely, but the specs aren't quite what i want, so we're making a few changes. Namely, motor driver is now DRV8316 (40V, 8A max), which will also give us current sense. This is what Jake uses in this: https://gitlab.cba.mit.edu/jakeread/quantick/-/tree/main/circuit/2024_bldc-drv8316cr-cl-d51.
I am enjoying using dev boards, so for this round, I'm sticking with the Feather m4 express (SAMD51).
We break out the I2C peripheral for comms. For connections, we do reflow solder once more, so we have 1 n mosfet on the board for flipping that switch. there's also a bonus physical switch for power cycling the board, something which i have often wanted.
We then have the two boards that are our module connection planes. One has an embedded heater, and the other is passive. The idea here is we've got the driver board on the back of the motor. this then plugs into (going in to the module) the passive plane, and (going out of the module) the active heater.
But! in the new design, we may have non-actuated modules-- it's a waste to pop the nice dev board, motor driver, and encoder onto those, so I've also made an ATtiny tinyhat, which we can pop onto either of the connector planes and which will drive the heater and blink an LED. It's using an ATtiny412-- a fave, and we'll probably use a very similar board to this for the grippers, assuming they use between 1-2 hobby servos. We'll see. We can of course always pop up in size to the other faves, the ATtiny1624 and ATtiny1626 :p
Also instead of doing the surface mount resistors, I'm doing the heater as an internal layer in a 4-layer board:
And we're just going to heat everything up -- the melting temp for the low melt solder is ~115-120 C, which is so low that hopefully nothing much is a problem. We are playing it risky with the softening temp of the nylon -- I'm hoping it's gonna be chill, but we'll see.
### 3 - robot module development
Ok. so we're making these modules now...
This is what 1 motor module will be like. We have the motor installed on one side, and then 2 attachment points (either linearly behind, or at a right angle). The attachments will be done via PCB. (So there's actually another board bolted onto the front of the module, not shown for opposite of clarity.)
Then we can install other modules on. Here's what 1.5 of a module looks like. (As in, sticking this module onto a motor).
So then we can build up whatever geometry we want from this + passive versions (i.e. the same thing, but no motor.)
Still as a to do is to expand the gear box -- want to add the parts so you can add another reduction on top (either another 10:1 or a 3:1) and have that be modular so it's easy for ppl to do what they want.
### 2 - motor module development
Made a switch to onyx filament for the gearbox, and printed a rough (i.e. volume filling) shell to get a sense of what space the module geometry will occupy, and to better think about routing and such within it and between modules.
Next steps are to do board layout: we do 1 board containing the microcontroller (heavily leaning toward using a dev board), motor driver, encoder, plus switching circuit for the connection (leaning towards still reflowing a bunch of low melt solder! it is very easy?) though I think I want to decouple it from the electrical connects, which will make routing easier, as well as eliminate this issue of making inconsistent initial contacts (before and during reflow) which can cause problems.
### 1 - motor module development
We switched to this driver board that uses the DRV8313: https://simplefoc.com/simplefoc_mini_product_v1 (thanks dave), as it has a higher current rating. We're also switching to a larger tooth size for the gears, but keeping the 10:1 ratio (sun: 9, planet: 36, ring: 81).
This is it with the front cap on:
And this is the back with encoder installed:
We're still living in bread board land for now, but I'll do an actual board at some point.
From here, this excellent web-based simpleFOC controller exists: https://webcontroller.simplefoc.com/, which is great for interactive PID tuning and such. Very helpful!
Video above shows the tuning output, if it's visible to you :p
The motor/gearbox can maintain position with 1.5 kg applied at 10 cm (~1.5Nm) (though it can't lift at this point, and at this point, the gearbox ~might slip). The weight of this thing is ~200 g, with the bread board added in, it's 265 g, so I think it's reasonable to target final module weight to be ~250 g. This means with this amount of reduction, the robot won't be able to do the worst-case-scenario flagging cantilever... whatever? Maybe I'll make a second stage that we can pop on a couple of the worst-case joint... we'll see.
The motor can heat up enough that I'm concerned about the PLA softening or otherwise warping. I'm going to try things out on the Markforged with Onyx filament, which should be a little lighter than the PLA too.
### 0 - motor module development
We're going to switch from hobby servos to gimbal motors with some reduction, for a better torque-to-weight ratio. I am initially exploring doing a 10:1 3d printed gear reduction mounted to a GM3506 gimbal motor: https://shop.iflight.com/ipower-motor-gm3506-brushless-gimbal-motor-pro967, controlled using SimpleFOC library: https://simplefoc.com/, on an Adafruit M0 Feather express (SAMD21): https://www.adafruit.com/product/3403, with this driver: https://www.sparkfun.com/products/21867 (Sparkfun board based on TMC6300), and this magnetic sensor (AS5600): https://www.amazon.com/Magnetic-Encoder-Induction-Measurement-Precision/dp/B094F8H591.
I want the module design to fit within a 75 mm side length bounding box (this means min 75 mm lattice pitch for the voxel system-- though I am leaning towards a 100 mm lattice pitch). Arbitrarily, to get a sense of how things work, I made a gearbox with 19 teeth on the sun gear, 76 on the planets, and 171 on the ring:
and with the cap on:
And this is it running:
This works ok (i'm pleased) ... but we shall make some changes...