ROS 2 remote debugging
that actually works.
A local-first robot agent, managed debug sessions, and Debug Projection for Foxglove and RViz when robots are behind NAT and SSH is not dependable.
Not just a tunnel: RoboTunnel adds a robot-side Debug Projection layer on top of the connection path.
From brittle remote access to a real debug workflow
After: managed debug sessions
Bring the robot online once, then start the managed debug session you actually wanted instead of rebuilding transport every time.
robotunnel init <platform-token>
robotunnel list
robotunnel debug start <robot> --mode foxglove
robotunnel debug open <robot> --launch
# Keep using your normal tools
CLI-first onboarding, Debug Projection on weak links, and native Foxglove / RViz workflows stay intact.
Before: SSH + ad hoc forwarding
The robot is remote, the link is weak, and every session starts by rebuilding plumbing.
# SSH drops, port forwards drift, tools break
ssh robot@field-host
ssh -L 8765:localhost:8765 robot@field-host
ros2 topic echo /joint_states
# Rebuild the setup again when the link dies
One product, two interaction surfaces
For Developers
The CLI is the primary surface for hands-on debugging and session control.
- Managed debug sessions from
robotunnel debug ... - Debug Projection for constrained links
- Foxglove and RViz integration
- Direct robot-side skill invocation when needed
For Teams
Discord extends the product into team workflows without replacing the CLI.
- Natural-language status and diagnostics
- Alert delivery and monitor workflows
- Shared operational context
- Fleet-facing workflows as the product grows
Debug Projection gets the data you need onto the link you have
What makes it different
RoboTunnel does not stop at “the robot is reachable.” Debug Projection adds a robot-side policy layer that can adapt topics for remote debugging while preserving your normal client tools.
- Session-level profiles such as
balanced,lidar_low_bw, andvision_low_bw - Per-topic overrides for image, point cloud, and scan-heavy debugging
- TF passthrough guardrails to avoid breaking transform chains
- Foxglove, RViz, and stream-oriented inspection paths from the same session
robotunnel debug start <robot> \
--mode foxglove \
--profile lidar_low_bw \
--topic /lidar/points \
--topic-policy-file ./topic_policy.json
Projection path
{
"/camera/image_raw": { "image_scale": 0.5, "max_fps": 8 },
"/lidar/points": { "point_stride": 4, "voxel": 0.10 }
}
Security that matches the developer workflow
Local LLM keys
Provider keys stay on the robot, encrypted at rest, and do not pass through the RoboTunnel platform.
Ed25519 authentication
Connections use explicit cryptographic identity, not shared passwords or hand-managed SSH sprawl.
Explicit trust boundary
The agent uses an allowlist model by default so robot-side execution stays inside an explicit trust boundary.
Open-source agent
The robot-side process is fully open source and auditable at the repository level.
Outbound-first networking
The robot reaches out. You do not need to expose inbound ports just to start debugging.
Bring one robot online in three steps
1. Install the CLI
Start on the developer machine.
curl -fsSL https://downloads.robotunnel.io/install.sh -o install-robotunnel.sh
bash install-robotunnel.sh
2. Install the agent
Download the installer and config example, then register the robot-side trust bootstrap.
curl -fsSL https://downloads.robotunnel.io/agent/install-agent.sh -o install-agent.sh
curl -fsSL https://downloads.robotunnel.io/agent/install-agent.config.example -o install-agent.config
# Edit install-agent.config:
# - RT_KEY
# - ROBOT_NAME (optional)
# - PLATFORM_BASE_URL (optional)
chmod +x install-agent.sh
./install-agent.sh ./install-agent.config
3. Start the debug session
Use the managed debug path, not raw plumbing.
robotunnel list
robotunnel debug start <robot> --mode foxglove
robotunnel debug open <robot> --launch