Module reference · Downlink

Operator-side Assistance (downlink)

The optional feedback-side attachment point. It uses required reconstructed information and declared local dependencies, then publishes assistance output that Operator Presentation combines with reconstructed feedback.

LayerUnite.Kernel
DirectionDownlink · robot → operator
Base typeDownlinkOperatorSideAssistanceModule
SelectionOptional — zero or one per study
Demo implementationsNoAssistance, CommandTimelineAssistance, IdealTrajectoryAssistance, WorstCaseEnvelopeAssistance
Paper§5.10 · DR5

What

Operator-side Assistance produces prediction, state estimation, filtering, warnings, or visualisations from declared inputs. Remote information comes through Operator-side State Reconstruction; local command history can also drive assistance without any new remote observation.

It does not apply delay or update the authoritative robot. Base reconstructed feedback reaches presentation independently. A technique that replaces or hides that feedback must define how its presentation implementation uses the assistance output.

Why

The same delayed feedback can support different operator-side techniques. A baseline can show only the delayed video, while another condition can add a command timeline, a predicted path, or an uncertainty envelope. Keeping that choice in one module lets a study vary the assistance technique while holding the vehicle, task, observation streams, and communication conditions fixed.

The paper's demonstration uses this as the experimental factor. The Every Move You Make reconstruction has four scenes: Baseline, Network, Path, and Envelope. They share the same apparatus and differ only in the selected Operator-side Assistance (downlink) implementation.

How

Operator-side State Reconstruction (5.9)Reconstructs received observations
Reconstructed feedback5.9 → 5.11 · video, pose, local buffers
Operator-side Assistance (5.10)Uses required reconstructed information and local dependencies; produces optional overlays or warnings
Operator Presentation (5.11)Combines reconstructed feedback and optional assistance
Base feedback reaches presentation directly. Assistance need not receive or forward every reconstructed item.

The Kernel queues explicitly reconstructed results before calling ProcessPackage, then calls UpdateAssistance once per tick. A technique consumes only the reconstructed contracts it needs. It may publish output from local dependencies even when no reconstruction result arrived.

  • Input. Required reconstructed information and declared dependencies, such as command history, vehicle configuration, route information, communication delay, or a reconstructed map.
  • Output. Study-defined assistance packages on declared streams. Base feedback need not be forwarded.
  • Timing. Assistance runs after reconstruction and before presentation in the same kernel cycle.

Boundary

Owns

  • Consuming required reconstructed information after module 5.9, and declared local dependencies.
  • Computing study-defined assistance output; presentation defines any replacement or suppression of base feedback.
  • Publishing assistance that Operator Presentation combines with reconstructed feedback.

Does not own

  • Applying communication delay, ordering, or release rules — Downlink Communication's job.
  • Reconstructing the operator-side remote state — Operator-side State Reconstruction's job.
  • Updating authoritative robot state or calculating the assistance technique in the presentation layer.

Contract

Implementations inherit the package queue and publish through PackageProduced. The base class rejects input whose payload is not a ReconstructedFeedbackContract, calls ProcessPackage for reconstructed results, and then calls UpdateAssistance.

C#
using System;
using System.Collections.Generic;
using Unite.Core;
using UnityEngine;

namespace Unite.Kernel
{
    /// <summary>
    /// Optional operator-side attachment point after operator-side state
    /// reconstruction and before feedback presentation. Reconstruction also
    /// feeds presentation directly; assistance need not forward base feedback.
    /// </summary>
    public abstract class DownlinkOperatorSideAssistanceModule
        : TeleroboticsModule, IPackageSource, IPackageConsumer
    {
        private readonly Queue<Package> pendingPackages = new Queue<Package>();

        public event Action<Package> PackageProduced;

        internal sealed override int ExecutionOrder => 900;

        public void ReceivePackage(Package package)
        {
            if (package == null || !(package.Payload is ReconstructedFeedbackContract))
            {
                Debug.LogError(
                    $"{GetType().Name} requires a reconstructed feedback package.", this);
                return;
            }

            pendingPackages.Enqueue(package);
        }

        internal sealed override void Step(double timestampSeconds)
        {
            while (pendingPackages.Count > 0)
            {
                ProcessPackage(pendingPackages.Dequeue(), timestampSeconds);
            }

            UpdateAssistance(timestampSeconds);
        }

        /// <summary>
        /// Publishes one feedback package to the downstream presentation stage.
        /// </summary>
        protected void PublishPackage(Package package)
        {
            if (package == null)
            {
                Debug.LogError($"{GetType().Name} tried to publish a null package.", this);
                return;
            }

            PackageProduced?.Invoke(package);
        }

        /// <summary>
        /// Processes one reconstructed result when needed by the technique.
        /// Output supplements the independent reconstruction-to-presentation
        /// path. Replacing or hiding base feedback requires a study-defined
        /// presentation contract; omitting output does not suppress that path.
        /// </summary>
        protected abstract void ProcessPackage(
            Package package,
            double timestampSeconds);

        /// <summary>
        /// Allows assistance implementations to publish locally computed output
        /// from declared dependencies even when no downlink package was released
        /// during this tick.
        /// </summary>
        protected virtual void UpdateAssistance(double timestampSeconds)
        {
        }
    }
}
  • Call PublishPackage for assistance output; there is no need to forward the base feedback.
  • Publish a new Package when the assistance output is supplementary or transformed.
  • Preserve the source observation metadata for derived outputs and use a declared assistance stream. Producing no output does not hide independently reconstructed feedback.
  • Do not modify the vehicle or the authoritative remote state from this module.

Examples

The four conditions keep communication, vehicle, task, and observation settings fixed while changing the presentation assistance.

Input: no reconstructed information is needed. Output: none. Presentation still shows the video supplied directly by reconstruction.

C#
public abstract class EveryMoveAssistanceBase : DownlinkOperatorSideAssistanceModule
{
    protected override void ProcessPackage(
        Package package,
        double timestamp)
    {
        // No assistance output; reconstruction supplies the base video.
    }
}

[EveryMoveCondition("condition-baseline")]
public sealed partial class NoAssistance
    : EveryMoveAssistanceBase
{
}

Config

  1. Implement DownlinkOperatorSideAssistanceModule in the study's Runtime assembly.
  2. Attach one selected implementation to the TeleroboticsAgent; the module connects to the configured downlink feedback path.
  3. Declare and wire only the dependencies the technique needs. The demo's trajectory assistance uses the uplink queue, vehicle configuration, communication configuration, and the copied motion state published by reconstruction, aligned to the reconstructed video exposure.
  4. Configure the selected assistance component in the Inspector for the study condition.

Baseline needs no assistance output. Leave the module unassigned when a study has no downlink assistance. In the shipped demonstration, the explicit NoAssistance class is used so the generated baseline scene has the same wiring shape as the other conditions.