Skip to content
DecisionNodeDecisionNdedocs
  • Guides
  • API reference
  • Examples
  • Playground

start here

  • QuickstartGet startedGet an API key, send one request with three questions, and branch your code on the typed answers. Plain HTTPS, nothing to install.
  • POST /v1/decideAPI referenceAnswer typed questions about a state, optional images and video frames. One request, one buffered JSON response, one answer per question.
  • QuestionsConceptsQuestions say what to decide. Each one has a type that fixes the shape of its answer: a choice from your options, a score on your scale, a…
  • ConfidenceConceptsProbabilities are calibrated per question type, so a threshold means what it says on the data we measure.
  • ImagesConceptsSend up to 16 images and text in the same request. The model reads printed and handwritten text, amounts, dates, objects and layout, and…
  • Batch jobsPatternsSend up to 10,000 requests in one file and collect the answers later, at a lower price than live calls.
  • Pricing and billingYou pay for input tokens only. Output is free because the model generates no text.
↑↓ moveopen7 suggestions
Get API keyGet API key
DecisionNodeDecisionNde

Get started

  • Introduction
  • Quickstart
  • CLI
  • Playground
  • Console and keys
  • With coding agents
  • MCP server
  • Examples

Concepts

  • State
  • Questions
  • Choice
  • Score
  • Truth
  • Number
  • Points and boxes
  • Images
  • Video
  • Boosters
  • Collections
  • Confidence
  • Determinism

Models

  • DecisionNode MoE
  • DecisionNode Flash
  • Limits
  • Versions
  • Dedicated capacity

Fine-tuning

  • Overview
  • Prepare your dataset
  • Upload and validation
  • Start a training run
  • Watch a run
  • The quality gate
  • Use your model
  • Limits and pricing

Patterns

  • Confidence-gated routing
  • Fan-out
  • Guardrails
  • Control loops
  • Batch jobs

Integrations

  • Home Assistant
  • MQTT bridge
  • ROS 2

API reference

  • Overview
  • POST/v1/decide
  • GET/v1/models
  • POST/v1/uploads
  • /v1/collections
  • Errors
  • Safety check
  • Rate limits

Sessions API

  • Sessions overview
  • POSTOpen a session
  • WSStream frames
  • DELEnd a session

Batch API

  • The batch object
  • POSTCreate a batch
  • POSTAdd requests
  • POSTFinalize a batch
  • GETRetrieve a batch
  • GETGet batch results
  • POSTCancel a batch
  • GETList batches

Pricing and billing

  • Pricing and billing
  • Refer & earn

Policies

  • Responsible use
  • Data and privacy
  • Benchmarks
  • Pricing
  • Playground
Get API key
  • Guides
  • API reference
  • Examples
  • Playground

Get started

  • Introduction
  • Quickstart
  • CLI
  • Playground
  • Console and keys
  • With coding agents
  • MCP server
  • Examples

Concepts

  • State
  • Questions
  • Choice
  • Score
  • Truth
  • Number
  • Points and boxes
  • Images
  • Video
  • Boosters
  • Collections
  • Confidence
  • Determinism

Models

  • DecisionNode MoE
  • DecisionNode Flash
  • Limits
  • Versions
  • Dedicated capacity

Fine-tuning

  • Overview
  • Prepare your dataset
  • Upload and validation
  • Start a training run
  • Watch a run
  • The quality gate
  • Use your model
  • Limits and pricing

Patterns

  • Confidence-gated routing
  • Fan-out
  • Guardrails
  • Control loops
  • Batch jobs

Integrations

  • Home Assistant
  • MQTT bridge
  • ROS 2

API reference

  • Overview
  • POST/v1/decide
  • GET/v1/models
  • POST/v1/uploads
  • /v1/collections
  • Errors
  • Safety check
  • Rate limits

Sessions API

  • Sessions overview
  • POSTOpen a session
  • WSStream frames
  • DELEnd a session

Batch API

  • The batch object
  • POSTCreate a batch
  • POSTAdd requests
  • POSTFinalize a batch
  • GETRetrieve a batch
  • GETGet batch results
  • POSTCancel a batch
  • GETList batches

Pricing and billing

  • Pricing and billing
  • Refer & earn

Policies

  • Responsible use
  • Data and privacy
  1. docs
  2. /
  3. Integrations

ROS 2

A ROS 2 node that asks your questions about an image topic at a rate you set and publishes each set of typed answers. Decisions only, never the sole means of control.

on this page7 sections
  1. Install from source
  2. Quickstart (5 minutes)
  3. Start a camera
  4. Run the node
  5. Read the decisions
  6. Configuration
  7. The API key

Decisions, never the controller

Answers are decisions only. They are never the sole means of controlling a robot, a vehicle, an aircraft, a machine or any other system whose failure could cause death, injury or damage (Terms, section 7.6). Keep control in a controller built and, where required, certified for it, with independent safety controls and a safe state that needs no answer; treat a missing, late or failed answer as no answer.

  • Keep control in your controller, designed, tested and, where required, certified for that purpose, and use answers only as one input to it.
  • Keep independent safety controls, limits and fallback behaviour that bring and keep the system in a safe state without any answer, including when an answer is late, dropped, unavailable or wrong.
  • Test and validate the system together with DecisionNode in the conditions it will be used in, before use and after every change of model, settings or software.
  • In practice: subscribe to decision from your own logic, check ok, read header.stamp to know how old the frame was, and treat a missing or stale answer as no answer. Control loops shows the pattern.

The repository brings DecisionNode to ROS 2 as two packages: decisionnode_ros, an rclpy node that reads frames from an image topic, asks your questions at a rate you set and publishes each set of answers, and decisionnode_msgs, the Decision and Answer messages and the DecideOnce service. Supported: ROS 2 Jazzy (Ubuntu 24.04), Humble (Ubuntu 22.04) and Rolling, on amd64 and arm64.

Install from source#

mkdir -p ~/dn_ws/src && cd ~/dn_ws/src
git clone https://github.com/Bynn-Intelligence/decision-node-ros2.git
cd ~/dn_ws
source /opt/ros/$ROS_DISTRO/setup.bash
rosdep install --from-paths src --ignore-src -y

Quickstart (5 minutes)#

You need ROS 2 Jazzy, Humble or Rolling, the packages built as above, and an API key from the console.

  1. 1

    Start a camera#

    A USB webcam with usb_cam, or a recorded bag that has an image topic.

    bash
    sudo apt install ros-$ROS_DISTRO-usb-cam
    ros2 run usb_cam usb_cam_node_exe
  2. 2

    Run the node#

    In another terminal, with your API key in the environment:

    bash
    source ~/dn_ws/install/setup.bash
    export DECISIONNODE_API_KEY=your-api-key
    ros2 launch decisionnode_ros decisionnode.launch.py
  3. 3

    Read the decisions#

    One decisionnode_msgs/Decision a second, answering the three example questions (is there a person, what hazard is in view, how many people).

    bash
    ros2 topic echo /decision

Configuration#

Copy config/example.yaml, edit it, and launch with params:=/path/to/my_params.yaml. Questions live under questions, in the order ids gives, each a truth, choice, score, number, point or box.

my_params.yaml
decisionnode:
  ros__parameters:
    image_topic: /image_raw
    model: decisionnode-flash
    max_rate_hz: 2.0
    questions:
      ids: [blocked, surface, door]
      blocked:
        type: truth
        instructions: Is the path ahead blocked?
      surface:
        type: choice
        instructions: What is the floor surface ahead?
        options: [concrete, carpet, grass, gravel, wet]
      door:
        type: box
        instructions: Where is the nearest door?
  • image_topic

    Default
    image
    Meaning
    The image topic to read
  • compressed

    Default
    false
    Meaning
    true to read sensor_msgs/CompressedImage, sent as it is
  • state_topic

    Default
    empty
    Meaning
    A std_msgs/String topic of JSON sent with every frame as the state
  • model

    Default
    decisionnode-flash
    Meaning
    The model to ask
  • max_rate_hz

    Default
    1.0
    Meaning
    The most decisions a second
  • max_in_flight

    Default
    1
    Meaning
    Requests running at once
  • timeout_s

    Default
    10.0
    Meaning
    The time one request may take
  • session_mode

    Default
    false
    Meaning
    true to stream frames into one live session instead of one request each
The main parameters
ParameterDefaultMeaning
image_topicimageThe image topic to read
compressedfalsetrue to read sensor_msgs/CompressedImage, sent as it is
state_topicemptyA std_msgs/String topic of JSON sent with every frame as the state
modeldecisionnode-flashThe model to ask
max_rate_hz1.0The most decisions a second
max_in_flight1Requests running at once
timeout_s10.0The time one request may take
session_modefalsetrue to stream frames into one live session instead of one request each

The node keeps one slot for the newest frame: a newer frame replaces a waiting one and nothing queues, and each Decision says in frames_dropped how many were replaced. A failed request publishes a Decision with ok: false and the API's error_type, so your logic always knows no answer came. The decide_once service answers the configured questions about the image you send, or the latest frame.

The API key#

The key comes from DECISIONNODE_API_KEY, or from the file api_key_file names (keep it at mode 600). It is never a parameter's value, because parameters can be read by anything on the ROS graph, and the node never logs it. Without a key the node refuses to start.

The source, the full README and the issues are in the repository. MIT licence.

previousMQTT bridgenextAPI reference

DecisionNode is built and run by Bynn Intelligence, Inc.

  • Home
  • Playground
  • Examples
  • Console
  • Responsible use
  • Terms
  • Acceptable use
  • Privacy
  • Data processing
  • Defence addendum
  • Cookies
  • Affiliate program

on this page

  1. Install from source
  2. Quickstart (5 minutes)
  3. Start a camera
  4. Run the node
  5. Read the decisions
  6. Configuration
  7. The API key