Engineering notebook. A personal project, documented in full. Not a product, and not for sale.
spheno labsE-Cruiza pannier system

Engineering notebook / Pedibal E-Cruiza

Level bags.
Sixteen versions later.

A clamp-on pannier system for my e-bike’s rear rack. Designed in code, stress-tested in simulation and printed at home, one version at a time.

CAD render of the final pannier rail: two graphite clamps holding a silver 16 mm rail level beside a black rack tube
Level pannier rail v16 on a 21.6 mm rack tube. CAD render.

An engineering project. Not a product.

Nothing on this page is for sale and I’m not taking orders. It’s a record of the problem, the designs, the tests and the changes I made at each stage.

01 / The need

Good bags.
The wrong rack.

My Decathlon 20 L panniers hang from KLICKfix Vario hooks, which want a level rail between 8 and 16 mm. My Pedibal E-Cruiza’s rack has a 21.6 mm round top tube that rises 14° towards the rear. Hooked straight on, the bags sit crooked, on a tube too big for the hooks.

1

A level rail.

A 16 mm aluminium rail held level beside the rising tube, clamped on without drilling the rack.

2

Something for the strap.

The bag’s lower strap expects a side-stay the rack doesn’t have, so a loaded bag swings towards the wheel: about 44 N parked, 190 N over a pothole.

3

A home for the radar.

The bench seat leaves no seatpost for my iGPSPORT SR mini rear radar. It needs a clean mount at the back of the rack.

  • 14°tube rise that the rail corrects to level
  • 16versions of the rail, v16 final
  • 10.7MPaworst-case peak stress in the final rail
  • 12kgrating per side, set by clamp grip and the rack’s own limit

03 / The rail, version by version

Sixteen versions.
One level rail.

Each version answered something: a measurement, a stress hotspot, a print that didn’t feel right. Before v4 the clamps were tied together with a rod. v4 is where the current idea begins.

CAD render of rail v4 on its tube, with two hook blocks on the rail
V4

Blind sockets. No tie rod.

The rail is trapped between two blind sockets, so it needs no fasteners, and an oval bore stops the clamps turning. Printed gauges measure the tube.

CAD render of rail v6 with topology-optimised clamps
V6

Generative.

Each clamp’s web is topology-optimised: material goes only where the load flows, which gives the branching shape.

CAD render of rail v7 on a dark background
V7.1

Sculpted.

One flowing profile with rounded edges and no supports. Taking out the rear clamp’s 90° bend cut its peak stress from 15.8 to 10.3 MPa.

Close-up render of the v8 front clamp on the round tube
V8

Round tube. Real margin.

Measured properly, the tube was round, 21.6 mm, not oval. Only friction stops a round clamp turning, so the clamps grew to 26 mm with four M4 screws.

88 g → 157 g of PETG per bike
The v9 clamp bodies and cap laid out as printed
V9

Nuts and bolts.

Heat-set inserts gave way to captive M4 nylocs sitting on a shelf. One hex key does everything.

Worst case 13.4 → 12.0 MPa
Close-up render of the v10 front clamp
V10

Edge distance.

Every bolt moved to 9 mm from the outer edges, about twice its diameter. In v9 one flat was 0.45 mm wide.

12.0 → 10.2 MPa, 213 g
Side view of rail v11 with its clamps on the tube
V11

Centred bolts.

Bolts 9 mm from every edge, including the tube side. 155 mm of exposed rail, with the clamps 192 mm apart.

Side view of rail v12 with the mounts closer together
V12

Closer, and marked.

Mounts 35 mm closer together, and a maker’s mark engraved 0.6 mm deep. The tighter layout didn’t earn its keep.

Engraved spheno labs wordmark and MAX 12 KG on the v13 clamp
V13

Back to v11. Rated.

The v11 layout returned, keeping v12’s taller shoulder and lettering, with a rating worked out from grip, strength and the rack: MAX 12 KG per side.

248 g per bike
The v14 cap seen from below with its round screw pockets
V14

Square to the tube.

The cap holes had drifted about 3 mm off centre, because the caps followed the level rail rather than the 14° tube. Rebuilt square to the tube, and symmetric.

Cap 10.7 → 7.7 MPa
Section diagrams of the v15 disc-spring stack and nut ribs
V15

Keeping the clamp tight.

Disc springs and a washer under each head halve the pressure on the PETG, so the clamping force holds up as it settles. Small ribs keep the nuts in their slots.

Head pressure 22 → 10.5 MPa
Section drawing comparing the v15 and v16 rail socket depths
V16 · FINAL

Deeper sockets.

On the printed v15 the rail went only 7.4 mm into each socket. It held, but it didn’t feel secure. Each socket is now 16 mm deep, one rail diameter.

Bearing 1.3 → 0.6 MPa, tilt 3.6° → 1.8°

CAD renders and section drawings from each version’s build. v5, v7 and v13b were intermediate builds, folded into the versions shown.

04 / The stress report

Broken in software.
Before it’s printed.

Every version is checked with a finite-element model before it is sliced. The final rail’s worst-case peak is 10.7 MPa. PETG Basic is good for about 51 MPa across its layers: a margin of 4.8×.

Stress maps of the v16 front and rear clamp bodies, mostly deep blue, with peaks of 10.7 and 10.6 MPa
Rail v16, screw tension plus the worst bag case. The red ring at each bore is the idealised rigid contact with the tube; as in every version, peaks within 3 mm of it are excluded.

The model

2.5D

Plane-stress finite elements on each printed part’s outline, with the real thickness measured through the part at every element.

The loads

3 g + 1.5 g

A 10 kg bag at three times its weight with 1.5 g sideways, a pothole taken mid-swerve, on top of 500 N of tension in every screw.

The material

51MPa

PETG Basic’s strength across the print layers. With PETG HF (34 MPa) the same result is still a 3.2× margin.

Final results, rail v16

Peak von Mises stress, MPa.

PartBag onlyScrews onlyBoth
Front body4.910.310.7
Rear body4.110.310.6
Capsmall8.38.3

Grip on the tube

3.1×

With a wet liner (friction 0.35), each clamp resists 18.9 Nm against the 6.2 Nm a 10 kg bag puts on it at 3 g. After losing 30 % of screw tension it is still 2.1×. Dry, 5.2×.

Why MAX 12 KG

Whichever limit comes first sets the rating, each with its own margin.

What limits itMax per side
The rack: MAX 25 KG in total, shared12.5 kg
Grip: wet liner, settled screws, 3 g pothole, ×1.514.3 kg
Clamp body in PETG HF, strength ÷ 2.519.9 kg
Clamp body in PETG Basic, strength ÷ 2.533 kg
Aluminium rail, 3 g, ×2 on yield52 kg

Checked automatically, every build

A build refuses to pass unless every check holds.

  • One clean solid per part
  • Nothing touches the tube or rail
  • Install path clear
  • 155 mm of rail clear, plus 4 mm hook room
  • Hex key reaches every screw
  • Rail captured both ways
  • Caps fit either way round
  • Overhangs within limits
  • Flat faces free of pits
ALL CHECKS PASSED

Peak stress, worst case

MPa, screw tension plus bag, rail v8 to v16.

01020304050PETG Basic 51 MPaPETG HF 34 MPa13.4v812.0v910.2v1010.6v1110.7v1210.7v1310.7v1410.7v1510.7v16

PETG per bike

Grams at 4 walls and 20 % infill. Margin was bought with mass, then held.

05010015020025030088v7157v8172v9213v10224v11216v12248v13243v14243v15243v16

Where it started

The first maps, on v4 and v5, showed the load crowding into the shoulders of the bore and the root of the arm. Every later profile, from the generative v6 to the sculpted v7, was drawn around those hotspots.

Four early stress maps of the v4 and v5 front and rear clamps

What the simulation doesn’t prove

  • It is a 2.5D model of each part, not a physical load test of the assembly.
  • PETG slowly settles under constant screw tension. The disc springs reduce the loss; only a creep test would say by how much.
  • Printed strength depends on the printer, the filament and the settings.
  • So the rail gets a free monthly check: a paint-pen line on the tube at the front clamp shows if anything has moved.

05 / Details

Built to be printed.
Labelled to be fitted.

Flat faces down, no supports, a stepped chamfer on every bed edge, and every part engraved with where it goes.

06 / Lower strap anchor

Something for the strap
to hold on to.

Each bag hangs from its top hooks with its weight about 9 cm out from the back panel, so the bottom swings in towards the tyre. With 10 kg aboard that is about 44 N parked and 190 N over a pothole with a swerve.

Clamps where it’s needed.It slides along and turns round any rack tube, so the arm points straight out.

Sets in 15° steps.The 140 mm post turns on a 24-tooth face to stand upright, whatever the tube’s angle.

Flush with the bag.The post’s outer face sits 57 mm out from the tube’s centre, level with the bag’s back panel.

V1 · SUPERSEDED

Worked on paper.

The stress model found the ear roots and a thin nut shelf doing too much of the work.

Render of the first strap anchor
V2 · FINAL

Polished for printing.

Deeper ears, counterbored heads, nylocs in hex pockets on a solid floor, a post that tapers with its bending moment, and every edge chamfered.

Render of the second strap anchor
STRESS, V1 AGAINST V2

Half the stress where it peaked.

v1v2
Clamp half, peak stress (screws, worst push and braking)19.5 MPa9.8 MPa
Cap, peak stress16.1 MPa13.1 MPa
Mass per side64.6 g55.4 g
Plate, both sides147 g, 6 h 25 min125 g, 5 h 28 min
Stress and thickness maps of the v1 anchor clamp and cap
Stress and thickness maps of the v2 anchor clamp and cap

Top: v1. Bottom: v2. Same load cases, same colour scales.

FITTED

On the upright strut.

The rack’s lower tubes couldn’t be measured, so they were estimated from Pedibal’s photos. The anchor adjusts rather than assumes. Highlighted in orange.

The anchor, highlighted in orange, clamped to a rack strut beside the rail
THE JOINT

24 teeth.

Tips cut flat by 0.15 mm, so the flanks always carry the load and the printer never draws a knife edge.

Close-up render of the anchor’s 24-tooth joint face

What got slightly worse, stated plainly

  • Teeth against braking: 2.3× down to 1.9× in the worst case. If it were ever exceeded, the post would click round one tooth; nothing breaks.
  • Arm bending out of plane: 6.1× down to 2.8×. A new check in v2; the arm is still stronger than the post.
  • Post bending at the very tip: 2.3× down to 2.2×. As fitted, it improves from 4.2× to 4.4×.

07 / SR mini radar mount

The first answer was wrong.
The second one disappears.

v1 gave the radar’s own rubber-strap seatpost mount a printed dummy seatpost to hang from. It worked, but it was bulky and didn’t look like part of the bike. v2 is built the way a manufacturer would do it: a slim strip with a quarter-turn socket at its end.

V1 · SUPERSEDED

A seatpost that isn’t.

Clamp, a 31.6 mm dummy post, the stock strap mount and its bands. 39 g.

Render of the first radar mount: a clamp with an angled dummy seatpost and the radar strapped to it
V2 · FINAL

A strip and a socket.

A 10 mm strip drops from a collar on the rear loop. The radar clicks straight on. About 10 g.

Render of the second radar mount
V1 AGAINST V2

Less to see. Less to carry.

v1v2
How the radar attachesStock strap mount on a dummy postClicks onto a quarter-turn socket
Seen from behindClamp, post, strap mount, bandsThe collar above the radar
Screws2 × M4 from the top2 × M3 from the front, nuts hidden in side slots
Printed weight39 gabout 10 g
FROM BEHIND

Clean from the road.

Countersunk screws from the socket face, nuts in side slots. Nothing shows past the radar.

Rear three-quarter render of the radar mount on the tube
PRINT

Hanger, keeper, socket.

18 g for a plate that includes six test sockets. 1 h 3 min, no supports.

The radar mount parts laid out flat

Six test sockets.The SR mini locks 90° round from a Garmin Varia, and the socket dimensions aren’t published. Two slot orientations times three lip thicknesses find the direction and a rattle-free fit in 20 minutes.

Out of the way.The radar hangs with its centre 52 mm below the tube, under the rear light, facing straight back.

Stiff enough.At a 5 g jolt the strip sees about 1.1 MPa.

08 / The whole bike, loaded

Where the weight goes.
And where it shouldn't.

Parts that carry bags change how the whole bike rides. So I modelled the loaded bike: frame, hub motor, both batteries, a 75 kg rider sitting at the rear of the bench, and every bag at its real height and position. Then I checked how much weight stays on the front tyre when cruising, climbing and pulling away hard.

Side view of the bike showing where each bag goes and the combined centre of mass, with a bar chart of the weight on the front tyre for six loadings
Model scaled from Pedibal's dimensioned photo: 1.17 m wheelbase, 80 Nm rear hub (267 N at the tyre, about 420 N with hard pedalling). Bag and rack positions are estimated to within about 5 cm.

A quarter on the front.With the rider at the rear of the bench, only about 25 % of the weight sits on the front tyre before any luggage goes on.

Full throttle can lift it.Pulling away on full throttle while pedalling hard puts about 420 N through the rear tyre. The unloaded bike needs only about 370 N to lift its front.

Fork bags earn their place.A kilogram on the fork adds nearly three times as much front weight as a kilogram in the frame bag. Panniers behind the rear axle take it away.

THE LOAD PLAN

What goes where.

WhereLoad
Fork bags2 to 3 kg each, matched within 0.3 kg
Frame bagSpare battery and charger, plus up to 4 kg of the heaviest kit
PanniersUp to 7 kg each, left and right within 1 kg, heavy items low and forward
Rack topUp to 1 kg, light and bulky
Whole rack25 kg at most, bags and rail included
SIX LOADINGS

Weight on the front tyre.

LoadingTotalCruising15 % climbFull power
Bike and rider only108 kg25 %13 %lifts
Commute: panniers 3 kg, nothing on the fork121 kg24 %13 %0 %
Touring: panniers 7, fork 3, frame bag +3139 kg27 %16 %7 %
Maximum: panniers 9.5, fork 3, frame bag +4, rack top 1146 kg26 %15 %7 %
Everything on the rear: panniers 9.5, rack top 4138 kg20 %9 %lifts
Touring, sliding 20 cm forward to pull away139 kg32 %21 %12 %

Full power: full throttle plus hard pedalling from a standstill. Everything on the rear also takes the rack over its 25 kg rating.

What the model leaves out, and the free check

  • It is a static model. Bumps, pulling on the bars, and tyre and fork compliance all move the numbers, so treat the margins as a floor.
  • Sliding forward on the bench to pull away or climb is worth more than any bag: about five points of front weight.
  • The free check: loaded and seated, with a bathroom scale under the front tyre and a block of the same height under the rear. The reading is the front's share.

09 / What it costs to make

Pennies of power.
Pounds of hardware.

Priced by what each part actually uses: filament by the gram, electricity by the kilowatt-hour, printer wear by the hour, and hardware by the piece rather than the pack.

PartPETGPrint timeEnergyFilamentElectricityPrinter wearHardwareTotal
Pannier rail v16, both sides267 g11 h 36 min1.30 kWh£3.13£0.34£0.85£17.48£21.80
Lower strap anchor v2, both sides125 g5 h 28 min0.62 kWh£1.47£0.16£0.40£1.91£3.94
SR mini mount v218 g1 h 3 min0.14 kWh£0.21£0.04£0.08£0.11£0.43
All three411 g18 h 7 min2.05 kWh£4.81£0.54£1.33£19.50£26.18

Power is the smallest line.54p for all three parts. Even at 30p a unit it would be 62p.

Hardware is the biggest.On the rail, the aluminium tube (£6.31) and the disc springs (£5.52) cost more than the plastic. Plain washers instead of springs save £4.95.

About 1.6p a gram, printed.Filament, electricity and printer wear together come to about £0.016 for every gram that comes off the bed.

PETG at £11.72/kg (SUNLU). Electricity at 26.32p/kWh, the Ofgem price cap for October to December 2026, GB average. Bambu quotes about 95 W for the A1 printing PLA; I've allowed 110 W for PETG's hotter bed, plus heat-up. Printer wear at £0.073 an hour: the A1 at £238 over 5,000 hours, plus nozzle and build plate. Hardware priced per piece from the packs bought. Excludes prototypes, tools, delivery of spares and my time.

10 / The workflow

Measure. Model. Break it.
Print. Repeat.

The method matters more than any one part. Every design here is a script, not a drawing, so a new measurement means a rebuild rather than a redraw.

  1. Measure.

    Callipers, a phone level and printed gauges. Callipers held vertical on a tube sloping at 14° read 22.44 mm; the true diameter is 21.6 mm, and the slope accounts for the rest (21.6 ÷ cos 14° = 22.26 mm).

    A printed gauge with a row of slots of increasing size
  2. Model in code.

    Parametric OpenSCAD and Python. Tube size, angle, spacing, screw sizes and filament are all parameters.

  3. Check the geometry.

    Every build tests fit, install path, clearances, hex-key reach and overhangs, and fails if any one doesn’t hold.

  4. Simulate.

    Finite-element checks on every part, and sweeps to see where material earns its place.

    A grid of six clamp outlines from a material-fraction sweep
  5. Slice.

    Plates are sliced from the command line with the same printer profile every time, so weight and print time are known before the printer starts.

  6. Print, fit, feed back.

    The printed v15 showed the rail sitting 7.4 mm into its sockets. That one measurement became v16.

My part.

I set the requirements, measured the bike, printed and fitted the parts, and decided what changed next.

Claude’s part.

Claude, an AI model made by Anthropic, wrote and ran the parametric models, geometry checks, simulations and slicing between versions, and reported the numbers back to me.

11 / Where it stands

The final versions.

Three parts, three version numbers. The rail has been printed and fitted; the anchor and the radar mount are designed, checked and simulated, and still to be proven on the bike.

PartVersionPETG as printedPrint timeKey figureOn the bike
Level pannier railv16267 g, full set11 h 36 min10.7 MPa worst case; 12 kg per sidev15 printed and fitted; v16 is the fix from that fitting
Lower strap anchorv2125 g, both sides5 h 28 min9.8 MPa clamp peakTo be confirmed
SR mini mountv218 g, with six test sockets1 h 3 minAbout 1.1 MPa in the strip at 5 gTo be confirmed

Slicer figures for SUNLU PETG at 0.20 mm, 6 walls and 25 % gyroid on a Bambu Lab A1.

About this page

An engineering notebook.
Not a shop listing.

This project isn’t for sale, and I’m not offering kits, files or fitting. The images are CAD renders and simulation plots from the design files, not photographs. Rack tubes in some renders are estimated from Pedibal’s photos.

Printed parts on a moving bicycle need regular checks. Nothing here is advice to copy it.