+
Amiga Inspector v0.8.19
Assess machines · verify readiness · capture conditions
🔑 Set key
Saved ✓
Site: Machine:

Deployment Overview

Capabilities assessment and recommended next action for the selected machine.

Machine State
● Baseline

No baseline captured yet. Import a collector snapshot or paste SSH output in the System tab.

● Latest

No snapshots yet.

Capabilities Matrix

Site Profile

Farm/site-level information. Shared across all machines at this location.


Repetitive Sites

Repetitive tasks, candidate beds, and tool use cases for this site.


Site Photos

Photos of the field, beds, and farm environment.

Machine Inventory

Hardware, software, and tool details for the selected machine.


Machine Issues / Next Steps

Problems, follow-ups, and observations specific to this machine.


Machine Photos

Photos of the machine, screens, tools, and wiring.

System Readiness

Capture machine state via SSH or manual observation. Choose a method below to get started.

SSH Connection & Onboarding

SSH connects over WiFi (port 22), not USB. Connect your laptop to the same network as the Amiga. Find the IP on the brain touchscreen under WiFi settings. Cross-network: use Tailscale.

Manual SSH — Paste Output Quick checks, version confirmation

1. SSH into the brain

ssh amiga@<robot-ip>

2. Check software version

pip list | grep -iE 'farm|amiga|adk'

3. List installed apps

ls -1 ~/apps/ 2>/dev/null

4. Full diagnostic (all at once)

echo "=HOST="; hostname; echo "=PIP="; pip list 2>/dev/null | grep -iE 'farm|amiga|adk|kivy|pynng'; echo "=APPS="; ls ~/apps/ 2>/dev/null; echo "=DISK="; df -h / | tail -1; echo "=MEM="; free -m | grep Mem; echo "=NET="; iwgetid -r 2>/dev/null; echo "=DONE="

Paste terminal output below. Data auto-populates Machine fields and creates a snapshot.

Collector Script — Import File Full diagnostic, 25+ fields

The collector script gathers 25+ diagnostic fields automatically via SSH and produces a JSON file you import back into this tool.

Enriched collection: If you have amiga-connect installed, use python -m amiga_connect.collector --host <ip> for Layer 2 live probes (battery, GPS, filter, control state) in addition to SSH facts. The enriched JSON imports here and displays additional Live State data on the Machine tab.

amiga-collector-v0.4.0.py · 17KB
How to use:
1. Save the downloaded .py file to your laptop
2. Open Mac Terminal and run:
python3 amiga-collector-v0.4.0.py --host <robot-ip>
3. The script creates a file like amiga-snapshot-element-vegetable-20260414-103000.json
4. Import it using the button below
Snapshot History

No snapshots yet. Run the collector script or import a JSON file.


Manual Status Entry

For fields the terminal cannot report — confirm from the brain touchscreen, dashboard, or field observation.

Pre-Autonomy Checklist

Click ✓ pass, ✗ fail, — not tested.

Next Actions

Synthesized action plan from site workflows, machine issues, and checklist readiness.


Success Condition

What does a successful first attempt look like?


Visit Notes

Freeform session notes — operator conversations, follow-ups, sequencing, vendor questions.

Amiga Inspector — Guide & Reference
Field Quick Reference — First Visit
  1. Create or select site → fill in site profile via Edit in dropdown
  2. Go to System → SSH into the brain or run the collector script
  3. Import or paste output → software version confirmed, baseline created
  4. Complete the Checklist — verify GPS/RTK, cameras, tool mounting
  5. Review Next Actions — top blockers, candidates, define success condition
  6. Capture Photos — site photos on Site Profile tab, machine photos on Machine tab
  7. Add Visit Notes on Next Actions — freeform session observations
  8. Export Encrypted Workspace (data backup) + Machine Report (Markdown) before leaving
Part 1 — Inspector Guide

What This Tool Does

The Amiga Inspector is a field onboarding and diagnostic tool for Bonsai Amiga autonomous tractors. It structures the entire first-visit workflow: capturing farm site data, identifying machine hardware and software, verifying autonomy readiness, and deriving a capabilities assessment with a recommended next action.

It runs entirely in the browser. No server, no login, no internet required after loading. Data persists in your browser's LocalStorage and exports as JSON or Markdown.

Tab Workflow

TabPurposeWhen to use
01 OverviewRecommendation, capabilities matrix, baseline vs latest, diffCheck status at any time
02 Site ProfileFarm/site details + repetitive site workflows + site photosReview; edit via dropdown
03 MachineHardware, software, tools + machine issues + machine photosFirst visit identification
04 SystemSSH connection, collector script, manual status, snapshot historyOnboarding + refresh
05 ChecklistPre-autonomy readiness with evidence cues + priority tagsBefore first autonomous run
06 Next ActionsSynthesized action plan, success condition, visit notesAfter assessment

Onboarding a Machine

Onboarding means establishing the machine's identity, confirming its software version, and creating a baseline snapshot. There are two methods:

Method 1: Manual SSH & Paste

Open System tab → expand Manual SSH. SSH into the brain, run the diagnostic commands, copy the output, paste it into the text area. The Inspector parses the output, auto-populates Machine fields, detects the software generation (2.x or 3.0), and creates a snapshot.

Method 2: Collector Script

Open System tab → expand Collector Script. Download the Python script, run it from your laptop terminal. It SSHs into the brain automatically, collects 25+ diagnostic fields, and saves a JSON file. Import the JSON using the Import Collector JSON button in the System tab's collector section. This method captures more data (WiFi signal, load average, video devices, app manifests, etc.).

Both methods produce the same result: a snapshot in the machine's history. The first snapshot becomes the baseline automatically.

Snapshots, Baselines & Diffs

Every time you paste SSH output or import a collector JSON, a timestamped snapshot is saved. The Overview tab shows:

Snapshots include: software generation, packages, installed apps, hostname, WiFi, disk, memory, load, timezone, uptime, video devices, and more.

Exports

Export Encrypted Workspace (header → Export) saves the complete state: all sites, all machines, all snapshots, all photos, all workflows, issues, and notes. The file is encrypted with your password using AES-256-GCM. You need the same password to import it on another device. Import still accepts plain (unencrypted) JSON files from older exports or collector snapshots.

Machine Report (machine bar) generates a Markdown field report with tables summarizing the selected machine's capabilities, checklist status, and recommendations. Use it for stakeholder communication.

Data auto-saves to browser LocalStorage on every field change. This is browser-specific — always export an encrypted JSON backup before leaving the field.

Photos

Photos are captured directly on the Site Profile tab (field/bed photos) and Machine tab (machine/screen/tool/wiring photos). Images are resized to max 1200px wide, compressed to JPEG quality 0.7, and stored as base64 in the machine record. They export with the JSON.

Each photo gets a caption and tag (machine, screen, tool, field, wiring, other). Storage limit is approximately 5MB total in LocalStorage — roughly 3-5 photos per machine. A warning appears when storage is getting full.

Part 2 — Amiga Technical Reference

Version Detection

Visual Check

Definitive SSH Check

ssh amiga@<robot-ip>
pip list | grep -E 'farm-ng|farm_ng'

Dashboard → Settings → ID → firmware version provides additional confirmation.

Service Port Maps

V2.x Service Ports (gRPC)

ServicePortPurpose
canbus6001Motor control, twist commands, tool control, pendant
filter (UKF)20001State estimation, pose, track recording
track_follower20101Autonomous path following
amiga (oak/gps/recorder)50010Camera streams, GPS, recording

V3.0 Ports (NNG / Nexus)

SocketPortProtocol
Nexus request54388Request-reply (NNG REQ)
Nexus feedback54389Continuous state stream (NNG SUB)
Nexus stream54390High-bandwidth data (NNG SUB)
Nodo54398Node discovery

Teach-and-Repeat (Autoplot)

The primary operational pattern for the Amiga. No code required.

  1. Teach: Drive the path manually (teleop or walking with pendant). The Autoplot app records waypoints as a track.
  2. Save: Name the track. It persists on the brain.
  3. Repeat: Load the saved track in Autoplot. The robot follows the recorded path autonomously.

Requirements: RTK GPS fix (converged filter), saved track, clear path, operator supervising with pendant.

Track File Format Details

Tracks are stored as protobuf files on the brain. In V2.x, the proto is farm_ng.track.Track with waypoints containing a_from_b pose transforms (x, y, heading). In V3.0, the format uses the ADK track proto. Waypoints use robot-local coordinates (meters, radians) with a GPS anchor for global positioning.

# V2.x track waypoint structure
waypoint.a_from_b.translation = [x, y, 0]
waypoint.a_from_b.rotation = quaternion(heading)

# V3.0 uses Amiga class
from farm_ng.adk import Amiga
amiga = Amiga()
# Track operations via amiga.track_follower

Tool Control

The Amiga controls implements via CAN bus. Two primary mechanisms:

Tool engagement and disengagement can be tied to track lifecycle events (start, end) or triggered manually via pendant.

V2.x Tool Control Code
# V2.x gRPC tool control
from farm_ng.canbus import canbus_pb2
from farm_ng.core.events_file_reader import proto_from_json_file

# Connect to canbus service
channel = grpc.insecure_channel('localhost:6001')

# Send tool control command
# H-bridge duty cycle: -1.0 to 1.0
# PTO RPM: 0 to max
V3.0 Tool Control Code
# V3.0 NNG tool control
from farm_ng.adk import Amiga

amiga = Amiga()
# Tool control via amiga.canbus
# Uses NNG request socket on port 54388
# H-bridge and PTO commands through Nexus API

Track Follower Failure Modes

Common reasons the robot stops or deviates during autonomous replay:

SymptomLikely CauseFix
Robot stops immediatelyFilter not convergedDrive manually for 30-60 seconds to converge
Robot stops mid-trackGPS RTK fix lostCheck NTRIP connection, base station, sky view
Robot drifts off pathTrack recorded with poor fixRe-record with confirmed RTK Fixed
Robot oscillatesSpeed too high for turn radiusReduce target speed, widen turns
E-stop triggeredObstacle detection or pendant bumpClear obstacle, reset pendant, restart track
Track won't loadTrack recorded on different software versionRe-record on current version

USB Serial Console — Validate Onsite

Status: unverified — check on first visit.

The Amiga brain uses a Jetson module (Xavier NX or Orin). Jetson hardware includes a micro-USB or USB-C debug port that provides UART serial console access. If physically accessible on the Amiga, this would provide a fallback shell connection without WiFi.

What to check onsite

If USB serial works

What would NOT work over USB serial

If validated, a USB Serial method could be added to the System tab as a third onboarding path alongside Manual SSH and Collector Script.

Battery & Safety

V2.x vs V3.0 Architecture Summary
AspectV2.xV3.0
TransportgRPCNNG (nanomsg-next-gen)
ClientEventClient per serviceUnified Amiga class
UI FrameworkKivyTBD / web-based
App EntryPer-service gRPC stubsNexusClient + 3 sockets
PortsMultiple (6001, 20001, etc.)Three NNG sockets (54388-90)
Packagefarm-ng-amiga, farm-ng-corefarm_ng_adk
V2.x Quick Code Reference
# Connect to a V2.x service
from farm_ng.core.event_client import EventClient
from farm_ng.core.event_service_pb2 import EventServiceConfig

config = EventServiceConfig(
    name="canbus",
    port=6001
)
client = EventClient(config)

# Subscribe to canbus state
async for event, msg in client.subscribe(
    SubscribeRequest(
        uri=Uri(path="/state"),
        every_n=1
    )
):
    state = msg  # AmigaRpdo1 proto
    print(f"Speed: {state.meas_speed}")
V3.0 Quick Code Reference
# Connect to a V3.0 Amiga
from farm_ng.adk import Amiga

amiga = Amiga()

# Three NNG sockets:
# Request (54388) - send commands
# Feedback (54389) - receive state
# Stream (54390) - high-bandwidth data

# Get robot state
state = await amiga.get_state()
print(f"Control: {state.control_state}")
print(f"Speed: {state.measured_speed}")

Amiga Inspector v0.8.4 — MorganicSystems
Source authority: farm-ng GitHub repos (canonical), official docs, video transcripts
Technical content verified against: farm-ng/amiga-dev-kit, farm-ng/farm-ng-amiga, farm-ng/farm-ng-amiga-3.0, farm-ng/farm-ng-core

Guide