neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
AMR Emulator는 자율 모바일 로봇 REST API를 정확히 구현한 에뮬레이터이며, 현재 MiR을 지원하고 향후 브랜드가 추가됩니다
AMR Emulator — spec-faithful emulators of autonomous mobile robot REST APIs (MiR today; more brands coming). An advin.io service.
개발 도구Python · ShellGitHub @JimothyJohn온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An advin.io service — spec-faithful emulators of
autonomous mobile robot (AMR) interfaces: the vendor-neutral VDA 5050
standard, and the Mobile Industrial Robots (MiR) REST APIs.
VDA 5050 — emulated mobile robots for your master controlREADME 전문 보기 ↗An advin.io service — spec-faithful emulators of autonomous mobile robot (AMR) interfaces: the vendor-neutral VDA 5050 standard, and the Mobile Industrial Robots (MiR) REST APIs.
packages/vda5050-emulator emulates VDA 5050
mobile robots (MQTT + JSON) — protocol versions 2.0.0, 2.1.0 and 3.0.0,
switchable — with an embedded MQTT 3.1.1 broker so evaluation needs zero
infrastructure. Every message in and out is validated against the official
JSON schemas, vendored with pinned provenance from the VDA5050 repository and
re-checked against upstream weekly (vda5050-sync.yml).
uv run vda5050-emulator # embedded broker on :1883 + one 3.0.0 robot
uv run vda5050-emulator --spec 2.1.0 # speak VDA 5050 2.1.0 instead
uv run vda5050-emulator --broker 10.0.0.5 # join YOUR existing broker
uv run vda5050-emulator --robots 5 --time-scale 60
Point any master control (or mosquitto_sub) at the printed broker address:
the robot publishes retained connection/factsheet, event-driven state
and visualization, and consumes order/instantActions (plus
zoneSet/responses on 3.0.0) with the full acceptance flow of the
recommendation — base/horizon stitching, the complete rejection-error
catalogue, action blocking types, zones with the request/response mechanism,
hibernation, and a last-will CONNECTION_BROKEN. Chaos goes through the
non-standard .../_emulator topic: emergency stop, field violation,
localization loss, battery override, teleport, forced action failures,
connection drops, time scaling.
from vda5050_emulator import AGVConfig, Broker, MasterControl, VirtualAGV
Emulator of the Mobile Industrial Robots (MiR) robot REST API
and the MiR Fleet Enterprise Integration API.
Develop and test MiR integrations against a local, spec-faithful /api/v2.0.0
(robot) or /api/v1 (fleet) without owning either — across the newest four
minor lines of every major software generation.
./Quickstart -t # lint + unit + conformance + integration
./Quickstart -s # serve the newest tracked robot version on :8080
curl -H "Authorization: Basic $(printf '%s:%s' distributor "$(printf distributor | shasum -a 256 | cut -d' ' -f1)" | base64)" \
http://127.0.0.1:8080/api/v2.0.0/status
uv run amr-emulator --fleet-version 1.5.0 # a MiR Fleet with two embedded robots
curl -H 'x-api-key: distributor' http://127.0.0.1:8080/api/v1/robots
amr_emulator.fleet embeds a configurable set of robot emulators and controls
them the way a real MiR Fleet does: over the robots' own REST API (auth,
validation, mission simulation — the full HTTP stack, via an in-process ASGI
transport). A POST /api/v1/serial-order really enqueues missions on a robot's
/mission_queue; order status is derived live from the robot's simulation, so
the fleet view and the robot view can never disagree. X-AMR-Session composes:
one session id gets an isolated fleet and isolated robots. Fleet specs are
MiR's official OpenAPI 3 documents, served verbatim (no PDF conversion) —
see the public Swagger UI
for the canonical reference; the emulator links to it rather than rebuilding it.
scrape.yml runs weekly: logs into the MiR support portal, parses the
REST API files listing (~500 PDFs, one per product per version), and
applies the selection rule — for every major release line, the
latest patch of each of its newest 4 minor lines (so both MiR software
generations stay covered four API revisions deep).amr_spec_scraper/pdf_convert.py).swagger.json, pinned in the
registry). Every scrape run re-converts the 3.5.4 PDF and requires zero
structural differences (operations, parameters, response schemas,
definition property types) against that official document.packages/amr-emulator/src/amr_emulator/specs/ + registry.json via an
automated PR; ci.yml proves every tracked version against the full
conformance + adversarial suite before it merges.release.yml builds one amr-emulator wheel per tracked MiR
version as an attested workflow artifact. Nothing is published to PyPI —
the product is the hosted endpoint; run locally from a checkout.MIR_PORTAL_EMAIL / MIR_PORTAL_PASSWORD — portal credentials (free
account); without them the scrape workflow no-ops with a notice.OPEN_ROUTER_API_KEY (optional) — adds an AI-generated "release impact"
summary on top of the mechanical API changelog in scrape PRs (model:
anthropic/claude-sonnet-5, override with AMR_SUMMARY_MODEL). Strictly
best-effort: any failure falls back to the mechanical report.packages/amr-emulator/src/amr_emulator/specs/registry.json is the
authoritative list (versions, hashes, provenance, source PDF URLs). New
releases are picked up as the latest patch of each major's newest 4 minor
lines; once tracked, a minor line is permanent — it keeps updating to its
latest patch but is never dropped. Currently:
| Family | Versions | Source |
|---|---|---|
| VDA 5050 | 3.0.0, 2.1.0, 2.0.0 | Official JSON schemas, vendored from VDA5050/VDA5050 (provenance in vda5050_emulator/schemas/registry.json) |
| Robot REST API 3.x | 3.8.1, 3.7.2, 3.6.7, 3.5.6 | Converted from the official MiR250 REST API PDFs |
| Robot REST API 3.x | 3.5.4 (pinned) | Official swagger.json — the converter's oracle |
| Robot REST API 2.x | 2.14.7, 2.13.5.4, 2.12.0.4, 2.10.5.8 | Converted from the official MiR250 REST API PDFs |
| Fleet Integration API | 1.5.0, 1.4.2, 1.3.1 | Official OpenAPI 3 JSON, served verbatim (public URLs) |
/api/v2.0.0
(289 operations across 159 paths in 3.8.1), with responses that validate
against the spec's response schemas. Deterministic: same requests, same
answers./status (PUT merges), /mission_queue
(POST enqueues Pending entries with monotonic ids, DELETE clears),
/registers (200 PLC registers, read/write), generic CRUD with
create/read/update/delete semantics everywhere else. /metrics speaks
OpenMetrics.Authorization: Basic BASE64(user:SHA-256(password)),
default account distributor/distributor like a factory robot. Override
with --username/--password or disable with --no-auth./_emulator/faults injects emergency stop, error,
localization loss, critical battery, and blocked-path states (session-
isolated; holding faults freeze the mission simulation); /_emulator/battery
sets the battery level and runs charging curves toward a target; on a fleet,
/_emulator/robots/{robot-id}/{faults|battery} proxies both surfaces to an
embedded robot so orders can be chaos-tested in flight; /_emulator/clock
runs simulated time Nx wall speed (process-wide) so missions and charging
keep realistic durations and timestamps while tests wait seconds, not
minutes (--time-scale at startup); X-AMR-Latency
delays any response for timeout testing; X-AMR-Mission-Duration gives one
queue entry its own runtime (real routes are not uniform);
/_emulator/diff?from=&to= on the dispatcher reports structural API changes
between tracked versions./swagger.json
(Swagger 2.0, verbatim) and /openapi.json (OpenAPI 3.0, converted and
round-trip-validated) so SDK generators and contract-testing tools can point
straight at it; --cors for browser dashboards; --export openapi3 to dump
the definition; Dockerfile + compose.yaml for CI service stacks
(docker compose up → MiR 3.8.1 on :8080 and 2.14.7 on :8081).from amr_emulator import create_app, supported_versions
app = create_app("3.8.1") # ASGI app: run under uvicorn, or hit with httpx/TestClient
packages/vda5050-emulator/ — VDA 5050 mobile-robot emulator (asyncio;
embedded MQTT 3.1.1 broker, virtual AGV core, fleet-control test client).
Bundles the official schemas for every tracked protocol version.packages/amr-vda5050-adapter/ — VDA 5050 robot-side adapter for MiR:
drive a MiR robot (real or emulated) from any VDA 5050 master control.
Validated live: Isaac Mission Dispatch → adapter → amr-emulator.packages/arcl-emulator/ — Omron ARCL (LD/HD AMR) emulator: line-based
TCP protocol per the public I617-E-02 reference manual, with the fleet
queuing loop, docking/charging and fault injection.packages/amr-emulator/ — the emulator library (Starlette; spec-driven
routes + behavior overlays). Bundles all tracked spec files.packages/amr-spec-scraper/ — portal login, listing parser, selection
rule, registry updater.tests/ — cross-version conformance, adversarial/negative-path, and
real-TCP integration suites, parametrized over every tracked version.scripts/build_versioned.py — stamps and builds one wheel per MiR version.Test harness: every tracked version runs the conformance suite (every operation answered with a declared status, every GET body validated against its response schema), an adversarial suite (auth bypass, injection, traversal, oversized payloads, concurrency races), and a deterministic hypothesis fuzz suite whose invariant is no input produces a 5xx or a non-JSON error — plus real-TCP integration tests and an offline test of the full scraper state machine (pinning, dropping, broken-file fallback). CI gates coverage at 82% offline; the PDF converter's full-document path is gated live by the 3.5.4 oracle on every scrape.
Supply chain: SHA-pinned actions, permissions: {} + least-privilege jobs,
locked installs everywhere, Dependabot (uv + actions), CodeQL, PR dependency
review, and build-provenance attestations on release wheels. Details and hard
limits: SECURITY.md.
Self-improvement loop: the weekly scrape opens PRs whose body is an API
changelog (added/removed/changed operations and definitions), re-validates
the converter against the pinned oracle first, survives individually broken
portal files by falling back to the last good spec of that major, and files a
scraper-attention issue whenever anything needed human eyes — a new major,
a new file format, or a PDF shape the converter can't parse cleanly.
Runtime: starlette + uvicorn (ASGI routing/serving), jsonschema
(request/response validation against the spec), pyyaml (YAML specs),
httpx (scraper HTTP + test client), pdfplumber (scraper only: the portal
publishes PDFs, and its ruled-table extraction is what makes the PDF→swagger
conversion reliable). Dev: pytest, hypothesis (property tests on the
input-handling paths), ruff, ty.
MIT — use it freely, commercially or not; the only ask is that the copyright notice stays with the code. If this emulator saves you robot time, a mention is appreciated.