← All research topicsGitHub
Research topic

Open-source purpose-built robots

Robots built for one job and designed from the task outward: when a specialised body beats a general-purpose arm, on cost, speed and reliability.

44 projects, each with its own page, code and tests. See them on the full research index.

When does a purpose-built gantry beat a general two-link arm at tray pick-and-place?

research/osrobot-specialise · 10 tests

When does a purpose-built gantry beat a general two-link arm at tray pick-and-place? At 2 mm tolerance the arm wins only between 0.36 and 0.99 m of work area, and the band depends on assumed costs (stylised).

Abstract

A stdlib model compares an XY gantry with an equal-link planar arm over a square work area, on cost per good pick per hour. At 2 mm tolerance the gantry wins up to 0.35 m and above about 1.0 m; the arm wins between 0.36 and 0.99 m. Tolerance below 1 mm removes the arm’s band, and the band depends heavily on the assumed cost coefficients (halving the gantry’s removes it). Stylised: every cost, mass, speed and accuracy figure is assumed, and only one task is modelled.

Does co-designing an arm's link lengths and controller beat tuning the controller on a fixed body?

research/osrobot-morph · 8 tests

Does co-designing an arm's link split and controller beat tuning the controller on a fixed body? Co-design gained 1.9% in held-out move time (0.283 against 0.289 s), within three-seed noise; tuning the controller mattered about 37%. Stylised, preliminary, mostly negative.

Abstract

A stdlib planar two-link arm model searches the split of a fixed 0.50 m reach together with PD gains, against an equal-link body with tuned gains, at equal search budget. The tray is reachable only for splits of 0.40 to 0.60. Co-design gained 1.9% in held-out move time (0.283 against 0.289 s), within three-seed noise, while tuning the controller cut hand-set gains' 0.460 s by about 37%. Stylised, preliminary and mostly negative: one body parameter and an assumed torque limit.

Can a small twin of a liquid-handling bench catch protocol errors before they run, and how much pipetting error does a serial dilution tolerate?

research/osrobot-lab · 10 tests

Can a small twin of a liquid-handling bench catch protocol errors before they run, and how much pipetting error does a serial dilution tolerate? It flags 366 of 522 injected faults against 100 for a syntax-only baseline, and an assumed error curve gives a final-well CV of 0.187 at 10 µL and 0.035 at 100 µL transfers (stylised, circular fault set).

Abstract

A stdlib deck-and-pipette twin tracks tips, well volumes, liquid labels and straight-line travel over labware, and checks protocols before they run. On 522 injected faults across three reference protocols it flags 366 (355 with the intended code) where a syntax-only baseline flags 100; the misses are mostly equivalent mutants. Collisions appear only where a move crosses taller labware (a tube rack in one protocol; forced travel heights up to 70 mm collide, 90 mm and above do not). With an assumed pipetting-error curve, a 12-well two-fold serial dilution has a final-well CV of 0.187 at 10 µL transfers, 0.100 at 20 and 0.035 at 100 µL. Stylised and circular by construction: the faults match the checks, and every geometry, timing and error value is assumed.

Does the real Opentrons simulator catch the protocol faults a small stdlib liquid-handling twin catches?

research/osrobot-labreal · 7 tests

Does the real Opentrons simulator catch the faults the stdlib liquid-handling twin catches? On the same 522 seeded faults it raises on 270 and the twin flags 366; everything the simulator catches the twin catches too, while tip reuse, a 5 µL dispense and a half-empty source pass the simulator. Mostly policy differences; the fault set was written for the twin (stylised).

Abstract

The 522 seeded faults of osrobot-lab (three protocols, 11 fault kinds) were translated into Opentrons Python API scripts and run through the real simulator (opentrons==8.0.0, OT-2, p300). It raises on 270 of them against the twin's 366, and every one it catches the twin also catches. It catches scripting errors (unknown labware or well, missing or doubled tip pick-up, 350 µL or 5000 µL aspirate) and accepts tip reuse, a 5 µL dispense, a tip left on and a half-empty source, even with starting liquids declared. Those are mostly policy differences, not simulator misses. Stylised: the fault set was written for the twin.

Does searching an arm’s joint count, link lengths and mount, with its controller tuned in the loop, beat a fixed three-link body at the same cost?

research/osrobot-bodysearch · 9 tests

Does searching a planar arm's joint count, links and mount, with its controller tuned, beat a fixed three-link body at equal cost? On a shelf task with a tool-down constraint, 0.95 held-out success against 0.26; on a long position-only reach, no gain (stylised, kinematic).

Abstract

A stdlib model searches link lengths, joint count and mount position of a planar arm, with its inverse-kinematics controller tuned in the loop, against a fixed three-link body at an equal cost budget (300 evaluations, 10 seeds, held-out targets). On a shelf task that needs the tool pointing down, the search reaches 0.95 success against 0.26 for the fixed body with a tuned controller and 0.50 with the mount also tuned; on a long position-only reach the fixed body already succeeds and the search adds nothing. Random search beat a (1+4) evolution strategy here, weakly. Stylised: kinematics and static torque only (no MuJoCo dynamics), and every cost, mass and limit is assumed.

How heavy must a purpose-built UAV for targeted observation be, and when does a hover-capable airframe stop being worth its weight?

research/osrobot-uav · 8 tests

How heavy must a purpose-built UAV for targeted observation be, and when is a hover-capable airframe worth its weight? At 3 km out and 20 min on station a fixed wing closes at 1.27 kg against 2.14 kg for a quadrotor and 2.08 kg for a VTOL wing, and the quadrotor stops closing at 45 min (stylised, assumed constants, no flight stack run).

Abstract

A stdlib mass-closure sizing model closes a quadrotor, a fixed wing and a fixed wing with a vertical-lift system for the same mission, choosing rotor diameter or wing area for least mass. For 3 km out, 20 min on station and a 0.5 kg payload the plain fixed wing is lightest (1.27 kg), against 2.14 kg for the quadrotor and 2.08 kg for the VTOL wing. The quadrotor does not close at 45 min on station; the VTOL wing is lighter than it from 30 min or beyond about 10 km. Stylised: every technology constant is assumed, no flight stack was run, and a fixed wing cannot hover or launch unaided.

Does a steady wind change which purpose-built observation UAV is lightest, and what is wind worth to a multirotor?

research/osrobot-uavwind · 8 tests

Does a steady wind change which purpose-built observation UAV is lightest? At 3 km and 20 min on station the fixed wing stays lightest from 0 to 18 m/s (1.27 to 1.50 kg) while the quadrotor goes 2.14 to 7.0 kg; the multirotor's still-air win at 1 min on station ends near 10 m/s. Stylised, steady known wind only.

Abstract

A stdlib extension of the osrobot-uav mass-closure sizing adds a steady wind: headwind out, tailwind back, airspeed re-optimised, and station-keeping at airspeed equal to the wind. For 3 km out, 20 min on station and 0.5 kg the plain fixed wing stays lightest at every wind from 0 to 18 m/s (1.27 kg at 0, 1.30 at 10, 1.50 at 18); the quadrotor goes 2.14 → 2.33 → 2.86 → 7.0 kg at 0, 10, 15 and 18 m/s and the VTOL wing 2.08 → 2.54. The multirotor’s one win in still air (1 min on station) lasts to about 8 m/s. Designs sized for still air keep 17.2 (fixed wing) and 18.5 min (multirotor) of 20 at 9 m/s and 8.8 and 13.8 at 15 m/s; building for 15 m/s costs 34% (multirotor) and 9% (fixed wing) in mass. Crediting the multirotor with translational lift makes its mass fall to 1.71 kg at 10 m/s, an optimistic artefact of a steady known wind. Stylised: assumed coefficients, no gusts, crosswind or launch limits, nothing flown.

How much heavier must an observation UAV be if the wind is uncertain, and is designing to a wind quantile cheaper than a bigger battery reserve?

research/osrobot-uavgust · 8 tests

How much heavier must an observation UAV be if the wind is uncertain? Designing to the 95th-percentile of wind ~ N(8, 3) m/s costs the fixed wing +3.7% and the multirotor +11.7% mass, and a bigger battery reserve buys about the same reliability for about the same mass; stylised, one steady wind per mission.

Abstract

A stdlib extension of osrobot-uavwind draws one along-track wind per mission from a normal distribution (exact discretisation, no sampling noise) and sizes the airframe for a quantile of it. For a 3 km, 20 min, 0.5 kg mission with wind ~ N(8, 3) m/s, designing to the 95th-percentile wind (12.9 m/s) costs the fixed wing +3.7% mass (1.333 against 1.286 kg) and the multirotor +11.7% (2.518 against 2.254 kg). The standard 20% reserve, if it may be spent, already lifts a mean-wind design to 0.95 (fixed wing) and 0.99 (multirotor) success, and a larger reserve and a quantile design cost within a few percent of each other. At a 1 min stay the 95th-percentile design flips the lightest airframe from multirotor to fixed wing. Stylised: one steady wind per mission, assumed constants, no turbulence, no launch limit, and no flight.

If an observation UAV only launches when the forecast wind is below a limit, how much does forecast error bring failures back, and what does it cost in scrubbed missions?

research/osrobot-uavnogo · 5 tests

If an observation UAV launches only when the forecast wind is under a limit, how much does forecast error bring failures back? A perfect forecast turns every failure into a scrub (fixed wing, wind ~ N(5, 4) m/s: 4.6% scrubbed at the 95th-percentile limit); a 2 m/s error gives 6.8% failures at the median limit but 1.1% at the 95th. Stylised, one steady wind per mission.

Abstract

A stdlib extension of osrobot-uavgust sizes the airframe for a launch limit wind and launches only if the forecast of the wind is at most that limit, with a normal forecast error (exact discretisation, no sampling noise). With a perfect forecast every failure becomes a scrub (fixed wing, wind ~ N(5, 4) m/s: 48% scrubbed at the median limit, 4.6% at the 95th percentile, 1.274 to 1.313 kg). A 2 m/s forecast error brings the failure rate to 6.8% at the median limit but only 1.1% at the 95th-percentile limit. Stylised: one steady wind per mission, assumed constants, normal forecast error, no cost put on a scrub.

If a scrubbed observation-UAV launch can be retried later the same day, how much does persistent wind limit what retrying buys, and does retrying bring failures back?

research/osrobot-uavretry · 7 tests

If a scrubbed observation-UAV launch can be retried later the same day, how much does persistent wind limit the gain, and do retries bring failures back? Fixed wing, median-wind limit, perfect forecast: eight slots complete 99.7% of days with independent wind but 71.5% with persistence 0.95; with a 2 m/s forecast error eight slots raise failures from 6.8% to 13.6% of days (23.7% at persistence 0.95). Stylised.

Abstract

A stdlib extension of osrobot-uavnogo lets the crew look again at the forecast in up to 8 slots a day, with wind following a Markov chain of persistence ρ (exact probabilities, no sampling noise). Fixed wing, wind ~ |N(5, 4)| m/s, limit at the median wind, perfect forecast: one slot completes 52.0% of days, and eight slots complete 99.7% with independent wind but 97.0%, 87.2% and 71.5% at ρ = 0.5, 0.8 and 0.95. With a 2 m/s forecast error each retry is another draw of the error, so eight slots raise the failure share from 6.8% to 13.6% of days (23.7% at ρ = 0.95). Stylised: assumed constants, one steady wind per slot, forecast errors independent between slots, no abort, no value on a mission. Nothing was flown.

What is a UAV launch wind limit worth in money, and should the launch threshold sit below the design limit when the forecast is wrong?

research/osrobot-uavvalue · 4 tests

What is a UAV launch wind limit worth in money, and should the launch threshold sit below the design limit when the forecast is wrong? With an assumed expensive airframe and a 2 m/s forecast error the best threshold sits 1 to 6 m/s below the design limit, worth up to $284 per attempt, with failures at or below 0.1%; with a cheap airframe the best design covers nearly every wind. Stylised, assumed prices.

Abstract

A stdlib extension of osrobot-uavnogo puts a money value on a completed observation, the loss of an aircraft on a failure and a scrubbed day, then searches the design wind limit L and the launch threshold T together (exact probabilities, no sampling noise). With a cheap airframe ($1,500/kg, assumed) the best design is for nearly every wind (L at 14 m/s or more in 17 of 18 cases, 11 on the grid edge) and the rule barely matters. With an expensive one ($30,000/kg, assumed) the optimum is interior, and with a 2 m/s forecast error the best T sits 1 to 6 m/s below L in all 9 cases, worth up to $284 per attempt over tying T to L, with failures at or below 0.1%. Money figures are assumptions, many optima sit on the grid edge, and a failure is assumed to lose the whole airframe. Stylised, no aircraft designed or flown.

When does one shared robot beat a dedicated robot per job in a pick-and-place shop?

research/osrobot-reconfig · 8 tests

When does one shared robot beat a dedicated robot per job in a pick-and-place shop? Sharing wins while the total load fits one machine and changeover is short (4 jobs, trays within 0.4 m: shared cheapest at demand 0.2 per job, dedicated from 0.3); the shared arm often cannot hold tight tolerances. Stylised, assumed costs.

Abstract

A stdlib extension of osrobot-specialise equips a shop of 2 to 8 pick-and-place trays three ways: a robot per job, one shared gantry spanning all trays, or one shared arm, on capital cost over 200 random job mixes per row. Sharing wins only while the total load fits one machine (4 jobs at scatter 0.4 m: shared cheapest in every mix at demand 0.2 of a gantry per job, a robot per job from 0.3) and only while changeover is short (a robot per job in 99% of mixes at 1,800 s). Trays spread beyond about 0.6 m erode the saving. The shared arm can hold 1 to 2 mm in only 13% of default mixes, but is cheapest in about half of mixes with loose (5 and 10 mm) tolerances. Stylised: every cost, speed, demand and changeover figure is assumed.

What does a shared pick-and-place robot cost once it has to stay up, and do spares change when sharing beats a robot per job?

research/osrobot-uptime · 8 tests

What does a shared pick-and-place robot cost once it must stay up? Spares priced per job or for every job at once: the shared fleet costs the same fraction of a robot per job when its load fits one machine (0.68 at 4 jobs), and falls to 0.34 to 0.51 when all jobs must run at once. Stylised, assumed availabilities.

Abstract

A stdlib extension of osrobot-reconfig adds independent unit failures (availability A) and buys the fewest spares that meet a service target, either per job or for every job at once (200 random job mixes per row, seed 7). While the shared robot's load fits one machine, spares change nothing in the per-job comparison: the shared fleet costs 0.68 of a robot per job at 4 jobs, A = 0.95, target 0.99, with or without spares. Asking every job to be up at once favours sharing (0.34 to 0.51 at 4 jobs, A 0.90 to 0.99; 0.41 at 8 jobs, A = 0.95), because a shared robot fails every job together while four independent jobs each need a spare. At demand 0.3 per job spares close the gap load opened (1.34 bare, 1.01 with spares). Limits: “served in full” is all or nothing, failures are independent with unlimited repair crews, and one assumed availability covers every machine. Stylised; no price or MTBF is sourced.

When a spoon-feeding arm meets a moving mouth, what sets the force on the lips: the sensor, the approach speed or a force cap?

research/osrobot-assist · 7 tests

What sets the force on the lips when a spoon-feeding arm meets a swaying mouth: the sensor, the approach speed or a force cap? Peak force tracks approach speed (1.0 N at 0.05 m/s, 4.0 N at 0.20), a camera cuts how often the lips are touched (0.40 against 0.72 of trials) but not how hard, and latency erodes that gain. Stylised point-mass model, assumed constants.

Abstract

A stdlib planar point-mass twin of a feeding arm and a swaying mouth, with 200 paired trials per row. With a 0.05 s forward lead the push on a blocked tip is 20 N·s/m × speed, so peak lip force tracks approach speed (1.0 N at 0.05 m/s, 4.0 N at 0.20). A camera lowers the share of trials that touch the lips (0.40 against 0.72 at 30 mm sway) without lowering the peak, and its advantage fades with latency (touch share 0.07 at no delay, 0.71 at 0.4 s). A 1 N force cap trims the worst peak but not the share of comfortable feeds. Stylised: all constants are assumed, the peak-force result is largely an identity of the chosen controller, and no human model or Assistive Gym was used.

Does a spoon-feeding arm need more than two joints? Tip mass, lip force and servo cost of 2 to 6 joint arms

research/osrobot-dof · 7 tests

Does a spoon-feeding arm need more than two joints? From 2 to 6 joints the tip mass moves only 0.63 to 0.50 kg and lip force not clearly at all, while servo cost triples (stylised; extends osrobot-assist).

Abstract

A stdlib planar model gives 2 to 6 joint feeding arms an operational-space tip mass (servo, link and spoon masses plus each servo's rotor inertia reflected through a 345:1 gearbox) and feeds it to osrobot-assist's lip-contact trials (200 paired trials per row, 30 mm sway, camera arm). The tip mass falls only from 0.63 to 0.50 kg from 2 to 6 joints; the worst peak lip force is identical (2.0 N at 0.10 m/s, 4.0 N at 0.20) and the safe share at 0.20 m/s is 0.60 to 0.65, within sampling error. Servo cost alone triples, from $52–98 to $156–295 (two retailers' listings, 2026-10-19). Most of the mass is the geared-up rotor. Stylised: planar, one pose, position-only task, assumed constants, so the real reasons for more joints (spoon orientation, 3-D motion) are not tested.

Does the stylised feeding-arm lip-force result survive real contact physics? osrobot-assist re-run in MuJoCo

research/osrobot-mjfeed · 6 tests

Does the stylised feeding-arm lip-force result survive MuJoCo contact physics? The steady push matches KP × LEAD × speed, but the impact peak is 1.84 × higher and the share fed at most 2 N falls from 1.00 to 0.45 at 0.10 m/s (stylised; extends osrobot-assist).

Abstract

The osrobot-assist spoon-feeding trial rebuilt in MuJoCo (a sphere on two slide joints, two box lips that follow the mouth's sway, MuJoCo soft contact), with the same controller and 200 paired seeds per row. With the arm blocked, the steady contact force equals the controller identity KP×LEAD×speed (2.00 N at 0.10 m/s) but the impact peak is 1.84× higher at every speed (3.68 N), and falls with more contact damping. With a swaying mouth the share fed at most 2 N drops from the stylised 1.00 to 0.45 at 0.10 m/s (30 mm sway, camera arm), with peaks of 11 to 23 N because the kinematic lips sweep into the tip, a contact the stylised model leaves out. Feeding time agrees within 4 % in all but one row. Stylised and preliminary: rigid lips that cannot yield, assumed contact damping, no human model.

Is the peak force of a feeding arm on the lips set by the lips' stiffness, the arm's force loop, or its approach lead?

research/osrobot-lipsweep · 5 tests

Is the peak force of a feeding arm on the lips set by lip stiffness, the force loop or the approach lead? Lip stiffness moves the mean peak from 0.32 to 2.02 N at 0.20 m/s (stylised; extends osrobot-assist).

Abstract

A stdlib sweep of osrobot-assist's feeding-arm twin over lip stiffness, loop stiffness and forward lead (200 paired trials per row, 30 mm sway, camera arm at 0.20 m/s). Mean peak lip force rises from 0.32 N at 100 N/m to 1.15 N at 800 and 2.02 N at 6400; the worst trial reaches 6.7 N, above the controller's 4.0 N stall push, so that push is a ceiling only for soft and medium lips. At 0.05 m/s every stiffness stays under 2 N. Stylised: assumed constants, a point mass and a passive user.

If the person being fed judges the spoon better as it nears the mouth, how much of a camera's value does a blind feeding arm get back?

research/osrobot-leanshrink · 4 tests

If the person being fed judges the spoon better as it nears the mouth, how much of a camera's value does a blind arm get back? A misjudgement shrinking to zero at the lips lifts the blind arm's safe share at 40 mm from 0.47 to 0.84 and restores every feed; stylised, extends osrobot-leannoise.

Abstract

A stdlib extension of osrobot-leannoise's planar feeding-arm twin in which the user's misjudgement of the spoon position shrinks, linearly over the last 40 mm, by a swept fraction (200 paired trials per row, 30 mm sway, 0.20 m/s, 100 mm/s lean). A blind arm's share of feeds with peak lip force at most 2 N is 0.83, 0.60, 0.47 and 0.41 for a constant misjudgement of 10, 20, 40 and 80 mm, and 0.99, 0.95, 0.84 and 0.70 when the error falls to zero at the lips; feeds that never reach the mouth (0.50 fed at 40 mm) disappear. With the error shrinking, the blind arm is within 0.02 of the camera arm up to 20 mm; the camera keeps its lead at 40 and 80 mm. Stylised: an assumed linear shrink law, assumed constants, a point mass and no real person.

If the person being fed misjudges the spoon, or sees it late, can a blind feeding arm still do without a camera?

research/osrobot-leannoise · 4 tests

If the person being fed misjudges the spoon or sees it late, can a blind feeding arm still do without a camera? A 20 mm misjudgement drops the blind arm's safe share from 1.00 to 0.60 (camera arm 0.78); stylised, extends osrobot-lean.

Abstract

A stdlib extension of osrobot-lean's planar feeding-arm twin in which the user leans toward a perceived spoon position that is delayed and offset by a per-feed misjudgement (200 paired trials per row, 30 mm sway, 0.20 m/s, 100 mm/s lean). A blind arm's share of feeds with peak lip force at most 2 N falls from 1.00 with a perfect leaner to 0.83, 0.60 and 0.47 at 10, 20 and 40 mm of misjudgement, and only 0.50 of feeds reach the mouth at 40 mm; the camera arm falls from 0.97 to 0.69 and always feeds. A perception delay of up to 0.2 s changes little; 1.0 s drops the blind arm to 0.46. Stylised: constant offset, assumed constants, no safety case.

If the person being fed leans toward the spoon, can a blind feeding arm do without a camera?

research/osrobot-lean · 4 tests

If the person being fed leans toward the spoon, can a blind feeding arm do without a camera? At 30 mm sway and 0.20 m/s the blind arm's safe share rises from 0.21 to 1.00 as the lean reaches 100 mm/s (stylised; extends osrobot-assist).

Abstract

A stdlib extension of osrobot-assist's planar feeding-arm twin in which the user shifts the mouth toward the spoon tip at a swept lean speed (200 paired trials per row). At 30 mm sway and 0.20 m/s the blind arm's share of feeds with peak lip force at most 2 N rises from 0.21 (passive user) to 0.69 at 50 mm/s and 1.00 at 100 mm/s, against 0.71 to 0.97 for the camera arm; at 50 mm sway even 100 mm/s gives only 0.62 for the blind arm. Leaning removes contacts but not the peak force of the ones that remain (4.0 N at 0.20 m/s). Stylised: every constant, including the lean speed, is assumed; no person was modelled or tested.

When a pest window sets a deadline, is a scout-and-treater fleet or a fleet of inline weeding robots cheaper?

research/osrobot-deadline · 8 tests

When a pest window sets a deadline, is a scout-and-treater fleet or inline weeding robots cheaper? One scout cannot finish 16 fields faster than 5.3 to 32.5 h; pipeline/inline cost is 1.06 to 1.12 at 0.72 ha, 1.49 at 0.18 ha, and 0.87 to 0.93 at 1.62 ha where it can meet the deadline.

Abstract

A stdlib extension of osrobot-pipeline that adds a hard finish deadline for 16 equal fields and searches up to four scouts, up to 16 treaters and up to 32 inline robots (no new simulation; every price an assumed round number). One scout cannot finish 16 fields faster than 5.3, 15.9 and 32.5 h (0.18, 0.72, 1.62 ha fields) however many treaters it feeds, against 0.7, 2.8 and 6.2 h for 32 inline robots. Cheapest pipeline over cheapest inline: 1.06 to 1.12 at 0.72 ha, rising as the deadline tightens, and 1.49 at 0.18 ha; at 1.62 ha the pipeline is cheaper (0.87 to 0.93) at every deadline it can meet but cannot meet 8 h, where only inline robots can. Stylised: equal fields, hard cut-off, no late-yield curve.

If one scout drone feeds ground treaters in a pipeline, can a held fleet beat inline weeding robots?

research/osrobot-pipeline · 9 tests

If one scout drone feeds ground treaters in a pipeline, can a held fleet beat inline weeding robots? One scout keeps only 1.0 to 1.3 treaters busy; overlapping the stages cuts the held-pair penalty to 1.04 at 0.72 ha fields and 0.86 at 1.62 ha, still losing on small fields. Assumed prices; scheduling over osrobot-pairprice's fits.

Abstract

A stdlib scheduling follow-up to osrobot-pairprice using its fitted per-field minutes (no new simulation; every price an assumed round number). Set-up and battery swaps make the scout nearly as slow as the treater, so one scout keeps only 0.99 to 1.33 treaters busy and the cheapest pipeline is always one scout with one treater. Overlapping the stages cuts the held-pair penalty to 1.04 times the inline fleet at 0.72 ha fields (32 fields) and 0.86 at 1.62 ha, from 1.34 and 1.16; at 0.18 ha it stays 1.48 to 1.81 times. Extra treaters finish sooner but raise cost per hectare (13.92 to 24.56 USD for 1 to 5). Stylised: deterministic, equal fields, no weather or failures.

Is a scout drone plus a camera-less ground treater cheaper per hectare than one weeding robot, and from what field size?

research/osrobot-pairprice · 13 tests

Is a scout drone plus a camera-less ground treater cheaper per hectare than one weeding robot? With assumed prices and each machine charged for its own minutes, break-even is near 0.5 ha and the pair is about 0.7 times the cost per hectare at 5 ha; held for the whole job it never wins; flips with utilisation, labour and battery life. Stylised, nothing built.

Abstract

A stdlib follow-up to osrobot-scoutpair that prices its matched-kill pair (scout at 1 m/s, 3 m swath, 0.343 killed) against one inline robot, with every price an assumed round number. Simulated time is linear in area (R² ≥ 0.9999 over 0.045 to 1.62 ha), so cost per field is a fixed set-up part plus a per-hectare part. Charging each machine only for the minutes it works, the pair costs about 2.5 times the inline robot on a 0.045 ha field, breaks even near 0.5 ha (0.8 ha at a 4,000 USD scout, 1.3 at 6,000) and is about 0.7 times as much per hectare at 5 ha (extrapolated). If the two machines are held for the whole job, as one dedicated pair would be, it never wins at the reference prices (1.08 times at 20 ha). The verdict flips with utilisation (2,000 occupied hours a year gives 2.09 times at 0.72 ha) and with labour and battery life. Stylised: assumed prices and constants, a straight-line extrapolation beyond 1.62 ha, no registration error or wind; nothing was built or flown.

Does a fast scout platform plus a ground treater beat one weeding robot, and does a mud-aware tour matter?

research/osrobot-scoutpair · 6 tests

Does a fast scout platform plus a ground treater beat one weeding robot? At matched kill (0.343) a 3 m scout swath finishes in 26.6 min against about 42 min for one inline robot, but a 1 m swath takes 47.3 min; a mud-aware tour changes nothing (stylised, simulation only).

Abstract

A stdlib follow-up to osrobot-fieldtour that makes the scout a second platform with its own swath and detector, then compares at matched kill because both platforms lose detections as they speed up. With a 3 m scout swath at 1 m/s the pair kills 0.343 in 26.6 min against about 42 min for one inline robot interpolated to the same kill; with the scout's swath cut to the ground robot's 1 m the same kill takes 47.3 min and the pair loses by about 13%. The saving is the swath ratio, not the second vehicle. A mud-aware tour changes the total by 0.1 min or less at 0 to 80% mud. Assumed constants, no registration error and no pipelining or capital cost: stylised, simulation only.

Does a better tour rescue scout-then-treat weeding?

research/osrobot-fieldtour · 6 tests

Does a better tour rescue scout-then-treat weeding? 2-opt cuts the tour from 539 m to 468 m but a field still takes 56.1 min against 51.7 min treating inline; scouting loses at every weed density tried (stylised, simulation only).

Abstract

A stdlib follow-up to osrobot-field that swaps nearest neighbour for 2-opt as the second stage of scout-then-treat. 2-opt cuts the straight-line tour over about 232 detections from 539 m to 468 m (random order: 5,403 m), but a field still takes 56.1 min against 51.7 min treating inline (nearest neighbour: 57.0), and scouting is slower at every weed density from 0.05 to 1.2 per m². Stylised: assumed constants, a mud-blind planner, 30 fields per row; no robot was built.

For a weeding robot with a cheap camera, is it better to treat weeds as it drives or to scout first and come back, and what does a weak sensor cost?

research/osrobot-field · 7 tests

For a weeding robot with a cheap camera, is it better to treat weeds as it drives or to scout first? Scouting then touring killed the same share (0.399 against 0.401 at 1 m/s) and was slower in all 23 paired rows; lane overlap repays a weak sensor (0.40 to 0.86 killed) at 3.5 times the time. Stylised, constants assumed.

Abstract

A stdlib simulation of a lane-following weeding robot on a 60×30 m field with clustered weeds, a motion-blurred noisy detector and muddy squares. Scouting then touring the targets kills the same share of weeds as treating inline (0.399 against 0.401 at 1 m/s) and is slower in all 23 paired rows, by 2.8 to 7.8 min. Lane overlap repays a weak sensor at a steep price: 0 to 0.75 overlap raises the kill share from 0.40 to 0.86 and the time from 52 to 178 min; no grid configuration reaches a 0.9 kill share at a 0.5 hit rate. Stylised: every constant is assumed, the speed results move with the blur assumption, and the planner comparison is a statement about this cost model.

Which open hydraulic circuit gets a small excavator closest to stock energy use for the least money?

research/heavy-hydraulics · 13 tests

Research programme (proposal stage): pump-shaft energy of fixed open-centre, load-sensing and ideal independent-metering circuits on an illustrative excavator cycle; over 2,916 swept cases load-sensing uses a median 47% of open-centre energy and metering 80% of load-sensing, an ordering that holds by construction; on 20,000 random cycles in a machine envelope load-sensing is a median 44% of open-centre; no measured cycle, margin or price is sourced yet

Abstract

An open research programme on which hydraulic circuit a small shop can build from catalogue parts to get a 1.5 to 3 t excavator closest to stock energy use, and at what parts cost. Milestone 1 is a stdlib model of pump-shaft energy for three circuits (fixed-displacement open-centre, load-sensing, ideal independent metering; analytic single-actuator check, 6 tests) and a 2,916-case grid on one four-phase cycle: load-sensing uses a median 47% of open-centre shaft energy (22 to 81%), saving more as flow demand falls (31%, 47%, 63% of open-centre at 0.5, 0.75 and 1.0 of full flow), and metering uses a median 80% of load-sensing, 88% with equal actuator pressures and 74% at 1.5 times the reference spread. The ordering holds in every case but only because each rung removes a loss term, so it is a code check rather than a finding. The cycle, pressures, flows and margins are illustrative values written from memory and swept, not sourced; there are no dynamics, leakage, line losses, energy recovery or parts costs; the DOI registry was unreachable so references were checked by web search, not cite_check. Milestone 2a repeats the comparison on 20,000 random cycles inside a machine envelope (pump 45 L/min, 20 to 180 bar, taken from an unopened search summary of one mini-excavator listing): load-sensing uses a median 44% of open-centre energy, metering 72% of load-sensing (87% at equal actuator pressures), and H3 fails per case in about a third of equal-pressure cycles. The cycles are random, not measured. Preliminary; arithmetic only, nothing run on a machine.

Collision avoidance that obeys the rules of the road: velocity obstacles against rule-based and sampling MPC for a small boat

research/marine-colregs · 5 tests

On 115 scripted COLREGs encounters a rule-aware velocity-obstacle planner passes at least 100 m in 95.7% (rule-based 77.4%, sampling MPC 84.3%), but its safe share falls to 82-85% when the target's velocity estimate is off by 0.3 to 0.6 m/s, and the stand-on vessel's action range matters most: 91% at 200 m, 99% at 600 m

Abstract

Milestone 1 of track 23's marine-colregs step, filed under the marine-hull programme. Kinematic own boat (4 m/s, 6 deg/s turn limit) against a target on constant course (it never gives way). 115 scripted head-on, crossing (both sides, speed ratios 0.5 to 1.5), overtaking and overtaken encounters with lateral offsets of -100 to 100 m. Roles are classified from Rules 13 to 15; planners: rule-based 35 degree starboard turn, velocity obstacle limited to starboard for give-way, and sampling MPC. Scores: closest point of approach (safe = at least 100 m), rule compliance (starboard turn, pass astern in a crossing, stand-on holds course until the action range) and detour. Check: straight-course CPA matches the analytic offset. Sweeps: target-velocity error 0, 0.3, 0.6 m/s (3 seeds) and stand-on action range 200 to 600 m. Preliminary: no vessel dynamics beyond a turn-rate limit, the safe distance and speeds are chosen not sourced, the target never manoeuvres, no AIS replay, and the MPC cost weights are untuned (no CMA-ES arm). Simulation only; research, not a certified system.

Which body carries a survey payload furthest per kWh? Hull choice for small autonomous boats

research/marine-hull · 55 tests

Research programme (proposal stage): energy per survey kilometre of hull types for 100 to 500 kg autonomous boats; with a Michell wave term a catamaran out-ranges a monohull in 3.3% of 6,561 cases, none at equal length; with Slocum coefficients from the gliderflight package a glider never out-ranges a same-mass propeller AUV at equal hotel load (0 of 2,430 cases); it breaks even when the AUV's hotel load is about 5 times its own; a REMUS-100-class AUV's non-propulsion load implied by vendor endurance is 104 to 175 W, far above that, so the glider out-ranges it in every case on energy per metre (at a tenth of the speed); a Savitsky planing hull reaches at most 0.14 of the monohull range (0 of 48 cases); a SWATH (two submerged torpedoes on struts) out-ranges the monohull in none of 4,374 swept pairs; charging panel mass to the battery (2 to 10 kg/m2, swept) cuts the median solar range multiplier from 2.01 to 1.64 at worst, and the full deck stays the best array wherever range is finite; against ten years of daily NASA POWER insolation a threshold speed policy (slow or hold when the pack is under 30%) never raises km/day over a fixed 1 m/s but cuts pack-empty days, e.g. 25.4% to 1.5% for a 4 m boat at 25 N

Abstract

An open research programme on which body (monohull, catamaran, SWATH, planing hull, hydrofoil, glider, AUV) carries a survey payload furthest per kWh, and where that ranking flips under uncertain drag inputs. Milestone 1 is a stdlib calculator (ITTC 1957 friction line checked analytically, form factor, wetted-area constant, hotel load; 9 tests) and a 6,561-case grid for a 200 kg craft: a catamaran of two slender demi-hulls out-ranges a monohull in 27 cases (0.4%) and in none of the 2,187 equal-length cases; the monohull's best speed is about 1 m/s, set by a 30 W hotel load, with range 560 to 1,188 km as an upper bound. The wave-resistance term is a placeholder and no published resistance curve is reproduced yet, so this is a friction-limited comparison; hull-form constants, efficiencies and water properties are swept or unsourced, and stability and deck area are not modelled. Two DOIs written from memory were wrong and were corrected by the citation check. Preliminary; simulation only. Milestone 2 replaces the placeholder wave term with Michell thin-ship theory on Wigley hulls: the catamaran wins 3.3% of 6,561 cases and none at equal length, and wave resistance changes best range by about 4% because the optimum speed (about 1 m/s) is at Froude number 0.16. Milestone 3a checks it against one published Wigley tank point (Ju 1983, via Wang et al. 2017): Michell plus the ITTC 1957 line with no form factor is within +1 to +5% of the measured total-resistance coefficient 4.16e-3 (water temperature unknown, 10 to 20 C), while the programme's central form factor 0.25 is 18 to 25% high; the form factor that fits is about 0, below the swept 0.10 to 0.40 box. One speed, second-hand source, geometry assumed. Milestone 4 compares a quasi-steady buoyancy glider with a same-mass propeller AUV over 19,683 swept cases (no glider coefficient is sourced: the papers could not be fetched): at equal hotel load the glider has the longer best range in 5.9% of cases, at 5 times the AUV hotel load in 89%, so the advantage comes from hotel load rather than hydrodynamics; glider speed tops out at 0.13 to 0.70 m/s, and the proposal's 0.4 to 0.9 m/s crossover is not supported. Not checked against a fielded glider's range. Milestone 4b re-ran it with Slocum aerodynamics read from the MIT-licensed gliderflight package (lift slope 7.5/rad, K 10.5/rad²): the glider out-ranges the AUV in 0 of 2,430 cases at equal hotel load, and the break-even AUV hotel load is a median 4.9 times the glider's (10th to 90th percentile 2.4 to 10.7); hotel loads and pump efficiency remain swept, not sourced. Milestone 4c reads a REMUS-100-class AUV's total power from vendor endurance (1.5 kWh, 12 h at 1.5 m/s to 8 h at 3 kn: 125 to 188 W), subtracts the model's 13 to 21 W of propulsion, and gets a 104 to 175 W non-propulsion load; against it the glider has the longer best range in all 810 x 18 cases. The vendor figures are approximate and mutually inconsistent, and energy per metre ignores that the glider is about seven times slower. Milestone 5 rungs: a lifting-line hydrofoil (all foil coefficients swept) and a Savitsky (1964) planing hull both fail to out-range the 4 m monohull (0 of 2,916 and 0 of 48 cases; range ratios up to 0.25 and 0.14), so they are transit-speed options, not endurance options; no tank data checked. Milestone 5b adds a SWATH rung (two fully submerged parabolic torpedoes on Wigley-form struts, Michell wave drag for torpedoes and struts, 4,374 pairs against the 4 m monohull): the SWATH out-ranges the monohull in none, at its best speed (range ratio median 0.69, best 0.83) or at a fixed 3 m/s (median 0.46), because strut wave drag and wetted area outweigh the torpedoes' small wave drag at 200 kg; torpedo wave drag falls with depth at about 2 k0 as theory says, but no SWATH tank curve was reachable, and stability and seakeeping are not modelled. Milestone 5d charges panel mass to the battery (areal mass 2, 5 and 10 kg/m2, swept, not sourced) and lets the array area vary: where the array cannot carry the boat the full deck is still the best layout in every finite-range case, but the range multiplier falls from a median 2.01 (no mass) to 1.95, 1.83 and 1.64; neutrality at 1 m/s is unchanged at 25.1%, by construction. Milestone 5g runs three speed policies against ten years of daily NASA POWER insolation at five sites: slowing when the pack is under 30% never raises distance (hotel load dominates at 0.5 m/s) but cuts pack-empty days, e.g. 25.4% to 4.2% (slow) and 1.5% (hold) for a 4 m boat at 25 N; above 42 N the deficit is seasonal and policy barely helps. Threshold and slow speed are not swept. Milestone 3b checks the placeholder wave term against five bare-hull tank speeds of a published 2.8 m catamaran (Zenodo 18459868, CC BY 4.0; geometry and water type inferred from the tables): the central model (k = 0.25) is 35 to 43% low at Fn 0.33 to 0.58 and within 10% at Fn 0.72 and 0.79; no single wave scale keeps all five speeds within 20% (best worst-case error 29 to 32%), so the placeholder is not safe for catamarans above Fn 0.3. The programme's survey speeds (Fn about 0.16) are below the data's range, and H3 (Holtrop-Mennen) is untouched.

Holding a survey line in current and waves: line-of-sight against integral line-of-sight for a small boat

research/marine-path · 7 tests

Plain line-of-sight guidance leaves a steady cross-track offset of delta*tan(asin(c/U)) in a cross current c (simulation matches it to 1%: 3.77 m at 0.3 m/s, 12 m look-ahead); integral LOS removes it, with lower rms cross-track error in 136 of 144 cross-current cases and the 8 exceptions all at a 6 m look-ahead with integral gain 2, where it oscillates (rms about 2.3 m even in still water)

Abstract

Milestone 1 of track 23's marine-path step, filed under the marine-hull programme. A stdlib 3-DOF (surge, sway, yaw) 200 kg boat with a rudder and surge PI, in a constant earth-frame current and a six-sinusoid wave disturbance (4 to 9 s periods, force scale swept, not sourced), follows a straight line under plain LOS and integral LOS (Borhaug, Pavlov and Pettersen 2008). Check: the simulated plain-LOS offset equals the analytic delta*tan(asin(c/U)) to 1% (0.3 m/s, 3.774 m). Sweep: cross current 0 to 0.5 m/s, wave scale 0 to 1, look-ahead 6, 12, 24 m, integral gain 0.5, 1, 2, 3 seeds. Integral LOS has lower rms cross-track error in 136 of 144 cases with current at least 0.2 m/s; the 8 exceptions are all look-ahead 6 m with gain 2, which oscillates. Energy per ground km differs by a median 1.4% (max 37%, in the oscillating cases, which also include the transient). Damping, rudder and wave-force coefficients are not sourced; the model has no Coriolis cross-coupling beyond u*r and v*r, no MPC arm, no JONSWAP spectrum and no field data. Preliminary; simulation only.

If a late field loses yield instead of failing a hard deadline, does a scout-and-treater fleet still lose to inline weeding robots?

research/osrobot-deadlineloss · 7 tests

Replaces the hard deadline of osrobot-deadline with a 2% yield loss per leaf stage of delay (Knezevic et al. 2003): the best pipeline costs 1.06 to 1.20 times the best inline fleet at 0.72 ha and 1.49 to 1.51 at 0.18 ha, and at 1.62 ha inline is cheaper when the window closes by 8 h and the pipeline from 12 h

Abstract

A stdlib extension of osrobot-deadline (no new simulation; fleet prices still assumed round numbers) that charges each late field 2% of its revenue per leaf stage of delay past the window, the pooled corn and soybean figure of Knezevic, Evans & Mainz (2003, Crop Management 2(1)). Leaf-stage length (2, 4, 8 days), an 8 h working day and revenue (1,000 and 2,000 USD/ha) are swept, not sourced. For 16 equal fields the fleet minimising fleet cost plus lost yield is searched over up to four scouts, 16 treaters and 32 inline robots. Pipeline over inline cost is 1.06 to 1.20 at 0.72 ha and 1.49 to 1.51 at 0.18 ha in every cell; at 1.62 ha it ranges 0.89 to 1.18, with inline cheaper when the window closes by 8 h (12.27 against 13.07 USD/ha at 2,000 USD/ha revenue and a 4-day stage) and the pipeline cheaper from 12 h. Late loss reaches 8.56 USD/ha in the worst cell against about 12 of fleet cost. Limits: the 2% rate is for corn and soybean up to canopy closure and is applied linearly; stage length and revenue unsourced; equal fields, one window, no weather or failures; search capped at four scouts.

What does a 2-joint feeding arm cost against a 6-joint one once the whole bill of materials is priced?

research/osrobot-dofbom · 8 tests

What does a 2-joint feeding arm cost against a 6-joint one once the whole bill of materials is priced? About 1.8 times, not 3: $66 against $122 at the SO-ARM101 table's $13.89 servo, rising to 2.4 times at a $49 retail servo.

Abstract

osrobot-dof priced servos alone and said extra joints triple the cost. Pricing the whole arm from the published SO-ARM101 parts list (board, cable, power supply, clamps, screwdrivers; the model reproduces the table's $121.94 follower and $229.88 two-arm totals exactly) gives a 6-joint to 2-joint ratio of 1.84 at the table's $13.89 servo ($66.38 against $121.94), 2.15 at a $26.00 retail listing and 2.44 at $49.22; it reaches 2.5 only at a $57.90 servo. Printed links add $1.50 to $4.00 across a swept $15 to $40 per kg filament price. Prices are a snapshot, the 7.4 V and 12 V servo classes are mixed, and camera, mount and safety stop are not priced, so every total is a lower bound. Only the filament price is not from a source (swept).

Does treating weeds as you drive still beat scouting first when the robot uses published laser-weeder numbers?

research/osrobot-fieldreal · 6 tests

Re-running the osrobot-field weeding model with sourced laser-weeder constants (2 m swath, 0.73 s per weed, 99.2% kill) halves the time but keeps the ranking: inline treatment takes 71.7 min against 79.3 for scout-then-treat at 0.3 weeds/m² and 1 km/h, and scout never wins across densities, speeds and detector hit rates

Abstract

osrobot-field ran on round numbers. This follow-up replaces the swath (2 m), time per weed (0.73 s) and kill rate (99.2%) with figures from laser-weeding literature and trade sources (read from search summaries, to be re-checked), and sweeps what has no source. Treating inline still beats scout-then-treat with equal kill: at 0.3 weeds/m² and 1 km/h, 71.7 min against 79.3 and 180 Wh against 216; at 3 weeds/m² 110.8 against 133.4 min. Scout never wins in any row. The sourced constants cut the time from 151 to 72 min for the same field. Speed trades kill for area rate (0.65 to 0.38 kill and 0.08 to 0.53 ha/h from 0.5 to 4 km/h); detector hit rate sets kill almost one for one. Stylised and preliminary: the detector hit rate (0.7) and blur law, false positives, mud, energy per metre and beam-steering speed are assumed, kill is limited to a single pass, the laser stops for each weed, and no weed-density source was found (swept 0.3 to 10 per m²).

Can a stdlib static linter catch the lab-protocol faults the Opentrons simulator accepts?

research/osrobot-lint · 13 tests

Can a stdlib static linter catch the lab-protocol faults the Opentrons simulator accepts? It flags 362 of the 522 seeded faults to the simulator's 270, adding reused tips, tips left on, sub-minimum volumes and carry-over; stylised, partly circular.

Abstract

A stdlib linter for Opentrons Python API scripts follows tip state, used tip wells, declared well volumes and the liquid in the tip without running the script. On the 522 seeded faults of osrobot-lab it flags 362, against 270 raised by the real simulator and 366 flagged by the twin, adding reused tips, tips left on, sub-minimum volumes and carry-over; it cannot see the travel-height collisions. Agreement with the twin is partly circular (same author, same fault set), and every limit is an assumed value. Stylised.

Does the MuJoCo feeding-arm result change when the lips have the ISO/TS 15066 face stiffness and the safe force comes from the standard?

research/osrobot-mjface · 4 tests

At the ISO/TS 15066 face stiffness (75 N/mm) the blocked-arm impact peak only doubles (7.56 N against 3.68 N at 0.10 m/s), and every camera-arm trial stays under the 65 N and 130 N face limits (worst peak 53 N), where the assumed 2 N limit had flagged most; contact damping is unsourced and swept (MuJoCo, simulation only)

Abstract

osrobot-mjfeed assumed an 800 N/m lip and a 2 N comfort limit. This project re-runs the same MuJoCo feeding trial with the ISO/TS 15066 face effective spring constant (75 N/mm, 75,000 N/m) and the standard's face force limits (65 and 130 N; secondary sources disagree on which is quasi-static, so both are used). A 94× stiffer lip raises the blocked-arm impact peak about 2× (3.68 to 7.56 N at 0.10 m/s, 7.35 to 15.21 N at 0.20 m/s) and leaves the steady push unchanged. For the camera arm against a 30 mm sway (200 seeds), the share fed with peak contact within 2 N falls from 0.45 to 0.32 at 0.10 m/s, but within 65 N and 130 N it is 1.00 in every row; the worst peak is 53.3 N. So the assumed 2 N, not the physics, drove the earlier unsafe reading. Contact damping has no sourced value and is swept (blocked-arm peak 12.7 to 49.3 N from 100 to 1000 N·s/m at 0.20 m/s). Limits: the standard's tables were read only from secondary excerpts, lips are kinematic and cannot yield, pressure limits were not applied, tip mass, gains and sway remain assumed, no human model. Simulation only, not a safety case.

How much force can a feeding-arm tip apply to a lip before the tissue bottoms out on bone?

research/osrobot-mjlayer · 6 tests

With tissue as a 5 to 20 mm layer bonded to bone at 4 to 45 kPa, the force that indents it 30 % is 0.05 to 9 N, 1.3 to 1000 times below the simulated 12.6 to 53 N trial forces, so the arm needs a newton-scale force cap, not 65 N (published bottom-effect corrections, no FE run)

Abstract

osrobot-mjmodulus showed the half-space Hertz model is out of range at published 4 to 45 kPa face moduli. Here the tissue is a layer of 5 to 20 mm bonded to rigid bone, using two published bottom-effect polynomials (Dimitriadis and Garcia, as tabulated by Dal Fabbro et al., ν = 0.5). The force that indents the layer by 30 % of its thickness is 0.05 to 9.4 N across tip radii 4 to 15 mm; for a 15 mm lip and the 4 mm tip it is 0.2 to 2.2 N. The simulated trial forces (12.6 to 53.3 N) exceed it by 1.3 to 1000 times, and at them the model's depth is usually beyond the layer thickness. The two corrections agree within about 40 %. Limits: homogeneous linear bonded layer, polynomial fits extrapolated from micro-scale indentation, the 30 % limit is my choice, thicknesses are lip values from one summary, no finite-element check. Not a safety case.

Is the feeding-arm tip's contact pressure computable at a measured face modulus?

research/osrobot-mjmodulus · 5 tests

Published in-vivo face and lip moduli are 4 to 45 kPa, below the 0.05 to 5 MPa that osrobot-mjpress swept; at them a 4 mm tip at 53 N would sink 48 to 241 mm in a Hertz model, so the model is out of range and tip radius or depth, not 65 N, is the design question (closed-form, simulation forces)

Abstract

osrobot-mjpress found the pass or fail of the feeding arm's tip pressure flipped on an unsourced face modulus swept from 0.05 to 5 MPa. Published in-vivo values are 4 to 45 kPa (a one-subject lip and cheek device, Hertz fits to skin indentation, an aspiration study), all below that sweep. At those moduli a Hertz sphere of the 4 mm tip at the worst trial force (53.3 N) has a contact radius 3.5 to 7.8 times the tip radius and an indentation depth of 48 to 241 mm, so the half-space model is out of range and its 1.8 to 8.8 N/cm² pressures are a bound, not a result. Hertz holds (a/R ≤ 0.5) only for a tip radius of about 73 to 245 mm. The forces come from a stiff kinematic-lip simulation that is not self-consistent with a soft face; the modulus values come from small studies read as summaries; pressure limits remain unconfirmed. Not a safety case.

Does the feeding arm's tip pressure, not its force, break the ISO/TS 15066 face limits?

research/osrobot-mjpress · 4 tests

A 4 mm feeding-arm tip that meets the 65 N face force limit still needs 0.5 to 2.7 cm² of contact to meet a 110 to 20 N/cm² pressure limit at its worst trial (53 N); the answer flips on an unsourced face modulus (MuJoCo, simulation only)

Abstract

osrobot-mjface found every camera-arm trial under the 65 N face force limit (worst 53.3 N) but did not apply pressure limits. This project divides the same 200-seed peak forces by a swept contact area. The worst trial needs 0.48 cm² to stay within 110 N/cm², 0.97 cm² within 55 and 2.67 cm² within 20; a Hertz contact of the 4 mm tip gives 0.41, 1.93 or 8.9 cm² for a face modulus of 5, 0.5 or 0.05 MPa, so the verdict depends on a modulus that is not sourced. Lightly damped contact (b = 4 to 100) needs a third of the area of b = 1000. Pressure limits (20, 55, 110 N/cm²) are from conflicting secondary excerpts and not confirmed; damping, modulus, tip mass, gains and sway are assumed; lips are kinematic. Simulation only, not a safety case.

What happens when a feeding arm meets a soft lip instead of a spring, and does a force cap help?

research/osrobot-mjsoft · 6 tests

Replacing the 75,000 N/m spring with a bonded tissue layer (4 to 45 kPa, 5 or 15 mm) cuts simulated peaks to 1 to 3 N in most cells but still breaks the 30 % depth limit in about half the trials; a 0.2 to 0.5 N cap fixes steady pushes, slowing to 0.02 m/s fixes a 10 kPa, 15 mm lip, and nothing fixes a thin 4 kPa one by speed alone (MuJoCo dynamics, closed-form tissue force)

Abstract

osrobot-mjlayer found the force that indents a lip 30 % of its thickness is 0.05 to 9 N, far below the 12 to 53 N a kinematic spring produced. Here the osrobot-mjfeed arm (MuJoCo dynamics, same controller and 30 mm sway) meets a lip whose force is that layer law, with assumed viscous damping and a bone stop, across 4 to 45 kPa, 5 and 15 mm and 0.02 to 0.20 m/s, 100 seeds per cell. Peaks are mostly 1 to 3 N, but the indentation stays within 30 % of the layer in only 36 to 100 % of trials: 100 % at 0.02 m/s for a 10 kPa, 15 mm lip (feed time 8.7 s), 52 % at 0.10 m/s, 36 to 53 % for a thin soft lip at any speed. A blocked arm pushes 1 N by its own controller; a 0.2 to 0.5 N cap brings the depth under the limit in the 10 kPa case and a 0.2 N cap in the softest, and the simulated depth matches the closed-form law. Caps barely trim fast impacts. More lip damping raises the share within the limit (52 to 85 %) and the peak force about 8 times. Limits: homogeneous linear bonded layer, MuJoCo used as an integrator with hand-coded contact, unsourced damping, bone stop and controller gains, no pressure limit, no human model. Not a safety case.

How fast can a purpose-built robot fill a 96-well plate, and does the robot or the number of channels matter more?

research/osrobot-plate · 7 tests

How fast can a purpose-built robot fill a 96-well plate, and does the robot or the number of channels matter more? Eight channels cut the time by 86 to 88 % (9.5 s against 69.7 s for a gantry at 10 µL) while gantry against arm moves it 4 to 14 %, since about 76 % is fixed pipetting actions (stylised; every speed, price and accuracy figure assumed).

Abstract

A stdlib model times a 96-well plate fill on an XY gantry and a two-link arm with 1 or 8 channels. At 10 µL per well one channel takes 69.7 s (gantry) or 66.7 s (arm); eight channels take 9.5 and 9.0 s. Channel count cuts the time by 86–88%; robot type moves it by 4–14%, because 76–79% of the time is fixed aspirate and dispense actions, so well order saves only about 2%. Which robot is faster flips with the assumed speeds; the 8-channel gantry is cheapest per plate-hour by a small margin. With assumed joint noise the arm misses the 1.5 mm well radius often enough to hit all 96 wells with probability 0.005. Stylised: every speed, price and accuracy figure is assumed.

Does the scout-and-treater weeding fleet still lose to inline robots when the machines are priced from published list prices?

research/osrobot-sourcedprices · 6 tests

Re-runs osrobot-deadlineloss with a Holybro X500 V2 drone (609 USD) and an AgileX Scout Mini (4,500 USD) at list price: pipeline over inline cost moves from 1.49 to 1.54 at 0.18 ha and 1.07 to 1.15 at 1.62 ha, ties at a 4,500 USD ground platform, and flips with an unsourced loaded flight time

Abstract

A stdlib re-run of osrobot-deadlineloss (16 equal fields, 2% yield loss per leaf stage late, Knezevic, Evans & Mainz 2003) with two list prices read on 2026-10-23 in place of round numbers: a Holybro X500 V2 PX4 kit (609 USD, no battery, 18 min hover) and an AgileX Scout Mini (4,500 USD). Pipeline over inline cost moves from 1.49 to 1.54 at 0.18 ha, 1.11 to 1.14 at 0.72 ha and 1.07 to 1.15 at 1.62 ha (8 h window, 2,000 USD/ha). At 1.62 ha and a 12 h window the fleets tie when the ground platform costs 4,500 USD. A 12 min loaded flight time raises the ratio by 0.12 and can flip the verdict. Not sourced and swept: battery, camera, weeding tool, inline-robot premium (0 or 1,500 USD) and loaded endurance; no weeding tool is priced for the treater, so both ground fleets are too cheap. Two retail prices; simulation only.

Does the osrobot-uav multirotor energy model match real aircraft?

research/osrobot-uavcal · 7 tests

Does the osrobot-uav multirotor energy model match real aircraft? With the Mavic 3's published 9.4 in propellers (0.239 m) it predicts 1.3 to 1.6 times the published 45 min endurance, so it is optimistic; the Anafi UKR rotor size was not found, so that row remains a sweep.

Abstract

Checks the osrobot-uav multirotor power model (imported unchanged) against two aircraft with a published mass, pack energy and endurance: DJI Mavic 3E (1.050 kg, 77 Wh, 45 min) and Parrot Anafi UKR (1.450 kg, 78.5 Wh, 38 min at 21.6 km/h), taken from Wikipedia's specification tables. Rotor diameter is not in the sources, so it is swept from 0.15 to 0.30 m: the model's endurance over the published one runs from 0.68 to 2.21 (Mavic) and 0.47 to 1.47 (Anafi). The model matches the published endurance at 0.181 m (Mavic) and 0.248 m (Anafi) at 90 % usable energy. At 0.22 m the errors have opposite signs (1.31× and 0.85×). Two aircraft of one class only; the fixed-wing and VTOL models are not tested; figures are from a secondary source and manufacturer maxima. Update: DJI's listing gives the Mavic 3 propellers as 9.4 in (0.239 m); at that diameter the model gives 1.30 to 1.63× the published endurance (80 to 100 % usable), so the earlier matching diameter of 0.18 m was a fit to a wrong model, not a rotor size. The Anafi diameter is still unsourced.

Is one slow weeding pass better than several fast ones, and does treating on the move change that?

research/osrobot-weedpass · 7 tests

A laser-weeding robot that drives three fast passes (4 km/h) kills 0.780 of the weeds in 75 min, against 0.607 in 83 min for one slow pass (1 km/h), and treating on the move instead of stopping cuts time by 6% at 0.3 weeds/m² and 39% at 3 weeds/m²; the ranking survives 30% of weeds being invisible to the detector

Abstract

osrobot-fieldreal left two next steps: a second pass over missed weeds and treating on the move. This project adds both to its sourced-constant weeding model (2 m swath, 0.73 s per weed, 99.2% kill from laser-weeding literature; 60×30 m field, 20 seeds per row). At 1 weed/m², three passes at 4 km/h kill 0.780 of the weeds in 75.1 min, against 0.607 in 82.8 min for one pass at 1 km/h; two passes at 2 km/h reach 0.778 in 90.5 min. Because the assumed detector loses hits as speed rises, the second pass recovers more than speed costs. Treating on the move rather than stopping cuts time by 6% at 0.3 weeds/m² and 39% at 3 weeds/m² (1 km/h) with identical kill, and is bounded by laser throughput at 10 weeds/m². If 30% of weeds are never seen by the detector, kill falls (three passes at 2 km/h: 0.894 to 0.627) but the pass-count ranking is unchanged. Stylised and preliminary: detector hit rate (0.7, swept 0.5 to 0.9) and blur law, false positives, mud, energy per metre and beam steering are assumed; passes are independent except for the swept hidden share; no weed-density source was found; simulation only.

Do several fast laser-weeding passes still beat one slow pass when the detector's hit rate comes from published field trials?

research/osrobot-weedsrc · 6 tests

With a detector fitted to two published field detection rates (88.9% at 0.2 m/s, 86.2% at 0.425 m/s), two laser-weeding passes at 4 km/h kill 0.952 in 40 min against 0.875 in 68 min for one pass at 1 km/h; the ranking holds, and the share of weeds the detector never sees (3 passes cap at 0.897 with 10% hidden) now sets the ceiling

Abstract

osrobot-weedpass assumed a detector hit rate of 0.7 falling as exp(−v/2 m/s). This project fits pmax·exp(−v/vblur) through two published detection rates (88.94% at 0.2 m/s, Frontiers in Plant Science 2022; 86.2% at 0.425 m/s, arXiv 2512.10319), giving 0.914 and 7.19 m/s, and re-runs the multi-pass sweeps (60×30 m field, 20 seeds per row, treating on the move). The detector is far better than assumed (0.846 against 0.530 at 2 km/h), so one pass at 2 km/h kills 0.842, and two passes at 4 km/h kill 0.952 in 39.8 min against 0.875 in 68.4 min for one pass at 1 km/h: fast multi-pass still wins, and a third pass adds only 0.020. With a share of weeds never seen, three passes cap at 0.996, 0.946, 0.897, 0.799 and 0.700 for 0, 5, 10, 20 and 30% hidden. Limits: two points from two different robots read from search snippets (the papers were not opened), a flat two-point fit extrapolated to 4 km/h, independent detections apart from the swept hidden share, and assumed mud, energy and false-positive figures.

Other research topics

Proper scoring & elicitation28Effort & peer prediction9Verification games & slashing19Detection & tolerances14Markets as routers13Prediction-market design9Paying contributors8Decentralised training systems23Digital twins & sim-to-real164LLM chip design loops40Robot manufacturing loops53Ambient AI assistant46Self-replicating manufacturing34Simulation-first design64Engineered clothing45Task-specific AI accelerators40Algorithmic chip-design loops42Open-source purpose-built robots44The software-engineering loop43Adversarial human imitation41Open-source residential construction41Autonomous multi-angle capture34Sensing, imaging and 3D31Energy supply and dense energy storage39Robot societies among people31Agentic co-design of low-cost robots27Laundry-hanging robots25Machine learning on qualitative data23Robots on the building site27Civilizations & group psychology1History & human sciences1

Produced with AI assistance (Claude). Results are from the code in this repository and are simulated or stylised unless the abstract says otherwise; nothing here implies affiliation with or endorsement by any lab, researcher or company cited. MIT licensed.