Remote Node Reference

Technical reference for the Remote node type

Remote node reference

Technical reference for the Remote node type. A Remote is the user interface for controlling Agents in the OctoMY™ network.

Did You Know?

The Remote is designed as a "thin client" - most of its logic comes from the Node base class, and each Agent connection is managed by a separate AgentClient instance. This makes the codebase simpler and means you can control multiple Agents simultaneously, each with its own connection state.


Overview

Property Value
Class Remote (inherits Node)
NodeType TYPE_REMOTE
NodeRole ROLE_CONTROL
Default Port 8125 (UDP)
Theme Color #36bee8 (blue)
Library libremote

Architecture

Remote Architecture


Core components

Remote class

The main Remote class extends Node for control functionality:

class Remote : public Node {
    QSharedPointer<RemoteWindow> mWindow;
    // Node provides: keyStore, addressBook, comms, discovery...
};

The Remote is designed as a "thin client" - most complexity lives in the Node base class and in the AgentClient instances.

Key methods

Method Description
nodeConfigure() Initialize Remote-specific setup
nodeActivate(bool) Activate/deactivate the Remote
nodeWindow() Returns the RemoteWindow instance
nodeRole() Returns ROLE_CONTROL
nodeType() Returns TYPE_REMOTE
registerNodeCouriers(bool) Register communication couriers

Control role

The Remote has the ROLE_CONTROL role in OctoMY communication. This is shared with Hub but differs in purpose:

Aspect Remote Hub
Focus Single agent at a time Multiple agents
Hardware Portable handheld Stationary server
UI Rich, interactive Administrative
Use case Direct human control Automated coordination

Agent management

AgentListModel

The Remote maintains a list of known Agents:

class AgentListModel : public QAbstractListModel {
    // Provides model for Agent list display
    // Updates from AddressBook
    // Tracks connection status
};

Client connections

For each paired Agent, the Remote creates an AgentClient:

Component Purpose
AgentClient Connection to one Agent
AgentClientWidget UI for one Agent connection
AgentClientCourierSet Couriers for Agent communication

Communication

As Control role

In communication, the Control role means:

  • Sends commands to Agents
  • Receives sensor data from Agents
  • Sends Plan updates to Agents
  • Requests state information

Couriers registered

Courier Direction Purpose
RemoteClientCourierSet Both Agent control
DiscoveryCourier Both Peer discovery
BlobCourier Both Binary data transfer

Control modes

The Remote supports multiple levels of control:

Low-level control

Direct actuator manipulation with real-time feedback:

Low-Level Control

Mid-level control

Gesture-based commands:

  • Move forward
  • Turn left/right
  • Stop
  • Emergency stop (panic)

High-level control

Target-based navigation:

  • Go to waypoint
  • Follow path
  • Execute Plan

UI components

RemoteWindow

The main window for Remote UI:

Remote Window Layout

Activities

Activity Purpose
AgentSelectActivity Choose which Agent to control
RemoteController Active control interface
ControlDeliveryActivity First-time setup
PairingActivity Establish trust with Agents
ConnectionActivity Manage Agent connections

Control widgets

Widget Purpose
CarSteeringWidget Virtual steering wheel
PanicButton Emergency stop
HUDWidget Flight instrument display
RealtimeValuesWidget Live sensor readings

Storage location

~/.local/share/OctoMY™/OctoMY Remote/<personality>/
├── keystore.json       # Cryptographic keys
├── addressbook.json    # Known Agents
└── planbook/           # Stored Plans (optional)

First-time setup

The Remote "birth" process:

  1. Key Generation - Create cryptographic identity
  2. Personality Generation - Derive name, colors, identicon
  3. Agent Discovery - Find nearby Agents
  4. Pairing - Establish trust with first Agent
  5. Control Setup - Configure preferred control mode

Command line

# Start Remote with default personality
./remote

# Start with specific personality
./remote --personality "MyController"

# Start with specific base directory
./remote --base-dir /path/to/data

# Enable debug output
./remote --debug

Services

The Remote activates these services in order:

Level Service Purpose
1 KeyStoreService Cryptographic identity
2 LocalIdentityStoreService Node identity
3 LocalAddressListService Network addresses
4 AddressBookService Known Agents
5 PlanBookService Behavior plans (optional)
6 CarrierService UDP transport
7 CommsService Communication protocol
8 DiscoveryClientService Agent discovery

API reference

Inherited from Node

The Node base class provides these inherited methods:

  • keyStore() - Access cryptographic keys
  • addressBook() - Access known Agents
  • comms() - Access communication system
  • discoveryClient() - Access Agent discovery
  • nodeIdentity() - Get this node's identity
  • clientList() - Get connected clients

Platform support

Platform Status Notes
Linux (Desktop) Full Primary development platform
Android Full Touch-optimized UI
macOS Partial Needs testing
iOS Planned Future support
Windows Partial Needs testing

In this section
Topics
reference remote node-type technical control
See also