Skip to content

Proposal: FarmBotAdapter for URML's substrate-neutral robot-intent language (Layer-2 primitives onto sequences / regimens / peripherals) #2515

Description

@idoco2003

Proposing a FarmBotAdapter that targets FarmBot's public REST API and MQTT pub/sub surface. The adapter routes URML Layer-2 primitives (move_to, grasp, release, measure, wait_for, report) onto FarmBot's existing sequence / regimen / peripheral / tool vocabulary. Each FarmBot tool (seeder, watering nozzle, weeder, soil sensor) becomes a URML-named effector.

URML is an Apache 2.0 specification for substrate-neutral robot intent at urml.dev. FarmBot is URML's first outreach into the agricultural vertical — Moves #1, #2, and #3 did not touch agriculture. The natural reason FarmBot is first: it is the one open-source small-plot farming robot with a Python-friendly developer surface, REST API, and a community oriented toward customisation. Closed agricultural vendors (Naïo, Carbon Robotics) sell hardware-as-service with no public API.

The English-to-program use case lands more naturally on FarmBot than on any URML target so far. A sentence like "plant a row of lettuce two centimeters apart along the back bed" is the canonical FarmBot use case.

This is proposal-only, posted as part of URML's Move #4 outreach (adjacent niches). No adapter code in this PR. The primitive-to-sequence mapping, the agriculture-profile primitive question (plant / water / weed as future Layer-3 vocabulary), and the local-MQTT-broker path for URML's offline-execution rule are observable choices worth your input before shipping.

Full RFC with proposed package layout, per-primitive mapping, manifest sketches, drawbacks, and alternatives:

https://github.com/URML-MARS/URML/blob/main/docs/rfcs/0067-farmbot-outreach.md

Feedback we'd value

  1. Adapter home. URML repo (reference/agriculture-runtime/), FarmBot contributed example, both?
  2. Primitive-to-sequence mapping. Is the move_to + tool_mount + peripheral_on decomposition the right way to ground URML primitives in FarmBot's sequence vocabulary, or would you prefer URML primitives map to CeleryScript directly?
  3. Agriculture-profile primitives. Appetite for a co-designed plant / water / weed Layer-3 vocabulary in a future RFC, with FarmBot as the first adapter?
  4. Local MQTT broker. What is the documented path for running FarmBot's MQTT broker locally for URML's offline-execution requirement?
  5. Generation-specific manifests. Per-generation manifests (Genesis v1.7 / Genesis XL / Express / Express XL) or parametric?
  6. Conformance lane. Open to a URML conformance line on developer.farm.bot or in the Web App README?

Thanks for FarmBot. The sequence / regimen / peripheral abstraction is exactly the right shape for the audience URML is trying to reach, and this is URML's first outreach into the agricultural vertical because FarmBot makes it the most concrete.

Ido Yahalomi (URML maintainer, urml.dev)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions