BTView
A visual graph editor for BehaviorTree.CPP trees, built into VS Code and Cursor. Bidirectional XML sync, tidy layout, and a validation panel that jumps straight to the offending node.
- TypeScript
- Behavior Trees
- VS Code
Leading teams that ship mission planning, task allocation and behavior orchestration for drone fleets — today at SIRB.AI and the Technology Innovation Institute. Before drones, the same planning stack drove a robot through the aisles of a supermarket in Denmark. Eight years, four countries, one layer of the problem.
about
Hello! I'm Erwin. My titles have said "robotics," but what I actually build is one layer: given a goal and a set of constraints, decide what happens next. A planner, a behavior tree, a search over a graph — the part underneath the mission that turns intent into action. I don't particularly care which body it's wired to.
Today I lead autonomy architecture at SIRB.AI and the Technology Innovation Institute — mission planning, task allocation, and behavior orchestration for drone fleets. Before drones, I put the same planning stack into a robot working the aisles of a supermarket in Odense, Denmark, at Coalescent Mobile Robotics — same constraints, same discipline, a chassis with wheels instead of rotors. On the side, at Unchained Labs, I apply the same instincts to software agents: giving an LLM a toolset and a plan is the same problem as giving a robot a mission.
My actual background is planning: multi-agent pathfinding, PDDL search, graph theory, real-time control. If the question is "what should this system do next, given what it knows and what it can't do," that's my domain — whether the actor is a drone, a warehouse robot, or an agent with tool access. When I'm not shipping autonomy stacks I'm playing basketball, watching films, or chasing ranked ladders.
Here are a few technologies I've been working with recently:
experience
Eight years, four countries, one thread running through it: what should this system do next. Select a bar for the detail.
2026 — Present · Abu Dhabi, UAE
2022 — 2024 · Abu Dhabi, UAE
2024 — 2026 · Abu Dhabi, UAE
2026 — Present · Abu Dhabi, UAE
2024 — Present · Remote
2021 — 2022 · Odense, Denmark
2020 — 2021 · Nantes, France
2018 — 2019 · Bordeaux, France
2020 — 2021 · Remote
2019 · Coimbra, Portugal
projects
Three altitudes, one question: given a goal and constraints, what happens next. A route through a warehouse, a mission for a drone fleet, a sequence of tool calls for an agent — same discipline, different actors. Six with something to show; the rest are in the archive.
in the field
A multi-agent planning toolbox — CBS, PIBT, LaCAM and Prioritized Planning solvers, running on arbitrary graphs, not just grids. Every solver streams its search live, so you can watch conflicts get found and resolved node by node instead of taking the answer on faith.
in the field
A pure-Python PDDL planning framework — hand-written parser and grounder covering STRIPS through durative actions, 14 planners from BFS to weighted A* to LM-cut, and heuristics you can train on your own solved plans.
on the metal
A ROS 2 dependency graph is a DAG, not a tree — expanding it path by path is exponential. rostree explores it properly instead: from the command line, a TUI, or a self-contained HTML file with no CDN and no network calls, so it survives being opened on a robot with no route out.
in the field
Flight algorithms from scratch: multirotor, fixed-wing and VTOL physics written out in full, 40+ runnable simulations, and a gym for teaching a drone to fly itself. The platform-agnostic argument made literal — the planning and control layer doesn't know or care what it's flying.
in the loop
Speak an intent and watch it become a queue of build jobs. Voice goes in through a Python speech service, a Rust orchestrator plans and schedules the work, and a React board tracks every job through todo → running → done. The queue plans itself — the same scheduling problem as a robot fleet, with a microphone as the input device.
in the loop
A live D&D session assistant — captures table audio, transcribes the narrative, maintains a rolling recap, and offers suggestions grounded in the campaign's own characters and lore. STT plus a LangGraph agent plus a memory of the campaign — a planning problem wearing a dice-game costume.
A visual graph editor for BehaviorTree.CPP trees, built into VS Code and Cursor. Bidirectional XML sync, tidy layout, and a validation panel that jumps straight to the offending node.
One curl command turns a bare Ubuntu box into my entire working environment — shell, toolchains, containers, dotfiles via chezmoi. Ansible underneath for idempotency, a typed Python CLI so every generated command is auditable before it runs.
An MCP server giving AI assistants read-only access to a Trading 212 account — balances, positions, dividends, pies. No code path issues anything but a GET.
Agentic tooling that keeps documentation alive: watches a codebase, detects drift, and opens documentation pull requests on its own.
Published research on decentralized, acceleration-based coordination for UAVs — a third-order control law for collective motion, validated in field experiments.
A campaign kit for one statistic: sourced research, regenerable charts, decks in two languages, and a zero-dependency dataviz site — all rebuilt from the underlying data by script, never by hand.
contact
I'm not actively looking, but the inbox stays open — a question about multi-agent planning, an open-source idea, or just to say hi. I'll get back to you.