Skip to content

Capabilities (Legacy Compatibility)

New R2Kernel platform manifests do not need a separate capability.* layer. Apps require api.* contracts, compounds declaratively export selected APIs from required component.* bundles, and the runtime resolves those exports to the implementing component.

The material below documents the legacy contract family retained for existing manifests. Do not use it for new platform or tutorial definitions.

Capabilities are app-facing robot contracts. They describe what an application may ask a robot to do without exposing controller, gateway, device-channel, or vendor topology.

Each capability.* spec points to one backing api.* contract. Official R2Kernel capabilities currently use the api.capability.* namespace. The API owns the concrete endpoints and message types. The capability adds semantic constraints that an app and provider must share.

Capability IDs always include an authority as their first namespace segment: capability.<authority>.<domain>.<name>.vN. The r2kernel authority is reserved for contracts published in the official dictionary. Vendors and packages use their own stable authority, for example capability.acme.fire.suppression.v1 or capability.example.cleaning.trash_disposal.v1. An authority identifies who owns the semantics. It does not make that capability portable by itself.

Legacy Boundary

  • an app requires capability.*
  • a component normally provides the standard capability.* surface associated with its robotics function
  • a platform-specific component provides specialized capability adapters
  • the backing api.* contract defines the callable surface
  • component and gateway contracts remain available for platform composition, but apps bind to the capability interface selected by the robot manifest
  • vendor and package-specific capabilities use their own authority and package spec root. They do not enter the official dictionary automatically

Official Capabilities

Capability Meaning Backing API
capability.r2kernel.mobility.body_motion.v1 bounded body-frame motion and stop behavior api.capability.mobility.body_motion.v1
capability.r2kernel.manipulation.reach.v1 extend, shrink, and stow a platform manipulator api.capability.manipulation.reach.v1
capability.r2kernel.manipulation.gripper.control.v1 open, close, and observe a gripper api.capability.manipulation.gripper.control.v1
capability.r2kernel.perception.object_detection.v1 query semantic object detections api.capability.perception.object_detection.v1
capability.r2kernel.navigation.goal.v1 execute and cancel framed goal or path navigation api.capability.navigation.goal.v1

body_motion uses periodic Control because continuous motion needs period, deadline, validity, and late-command rejection. Reach and gripper requests use Procedures because they are bounded semantic actions. Goal navigation uses Operations because progress, cancellation, and terminal state are part of its application-facing contract.

Legacy Platform Declaration

The robot manifest maps each declared capability to a concrete provider.

capabilities:
  mobility.body_motion:
    capability: capability.r2kernel.mobility.body_motion.v1
    implementation:
      kind: interface_binding
      subsystem: component.mobile
      interface: body_motion

interface_binding selects the public component interface that provides the complete capability contract. Runtime traffic goes directly to that provider. Platform-specific behavior remains a component even when it wraps only one gateway channel.

The runtime continues to read legacy compound_subsystem capability mappings for migration compatibility. Within the legacy model, a component interface_binding identifies the implementation. New platform manifests use compound API exports as described above.

An application owns task sequencing. A radar-cleaning app can call perception, navigation, reach, gripper, and burn capabilities in order, including its own retry and fault policy. The compound does not hide that sequence inside a second application-like state machine.

Cleaner Tutorial Migration

The current cleaner tutorial uses api.r2kernel.actuation.trigger.v1 from component.r2kernel.trigger_actuator.v1, exported as trash_disposal by its compound. The old capability.tutorial.robot_cleaner.* package specs were removed. Use the current platform guide for new examples; the legacy mapping above is not the cleaner's current manifest.