From c97978724096419946387403a9e416025aafdf17 Mon Sep 17 00:00:00 2001
From: daluoboda <89921349+daluoboda@users.noreply.github.com>
Date: Mon, 17 Aug 2026 01:14:46 +0800
Subject: [PATCH 1/5] Franka Emika Panda real-DH 7-DOF arm: pick_and_stack
(Tier-1)
Real Base Sepolia USDC settlement evidence (x402-evidence.json) included.
---
.github/workflows/go-lint.yml | 45 ---
.github/workflows/go-unitest.yml | 48 ---
bridge/common/zenoh_bridge/package.xml | 13 -
.../common/zenoh_bridge/resource/zenoh_bridge | 0
bridge/common/zenoh_bridge/setup.cfg | 5 -
bridge/common/zenoh_bridge/setup.py | 16 -
.../zenoh_bridge/zenoh_bridge/__init__.py | 12 -
.../zenoh_bridge/zenoh_bridge/action_event.py | 40 --
.../zenoh_bridge/command_mapper.py | 14 -
.../common/zenoh_bridge/zenoh_bridge/utils.py | 5 -
.../zenoh_bridge/zenoh_subscriber.py | 24 --
.../g1/isaac_sim_bridge/config/default.yaml | 9 -
.../g1/isaac_sim_bridge/g1/__init__.py | 4 -
.../unitree/g1/isaac_sim_bridge/g1/mapper.py | 41 --
bridge/unitree/g1/isaac_sim_bridge/g1/node.py | 68 ----
.../launch/isaac_sim_bridge.launch.py | 19 -
.../unitree/g1/isaac_sim_bridge/package.xml | 14 -
.../resource/isaac_sim_bridge_g1 | 0
bridge/unitree/g1/isaac_sim_bridge/setup.cfg | 5 -
bridge/unitree/g1/isaac_sim_bridge/setup.py | 24 --
.../go2/isaac_sim_bridge/config/default.yaml | 8 -
.../go2/isaac_sim_bridge/go2/__init__.py | 4 -
.../go2/isaac_sim_bridge/go2/mapper.py | 31 --
.../unitree/go2/isaac_sim_bridge/go2/node.py | 56 ---
.../launch/isaac_sim_bridge.launch.py | 19 -
.../unitree/go2/isaac_sim_bridge/package.xml | 14 -
.../resource/isaac_sim_bridge_go2 | 0
bridge/unitree/go2/isaac_sim_bridge/setup.cfg | 5 -
bridge/unitree/go2/isaac_sim_bridge/setup.py | 23 --
.../isaac_sim_bridge/config/default.yaml | 8 -
.../launch/isaac_sim_bridge.launch.py | 19 -
.../tron1/isaac_sim_bridge/package.xml | 14 -
.../resource/isaac_sim_bridge_tron1 | 0
.../unitree/tron1/isaac_sim_bridge/setup.cfg | 5 -
.../unitree/tron1/isaac_sim_bridge/setup.py | 23 --
.../tron1/isaac_sim_bridge/tron1/__init__.py | 4 -
.../tron1/isaac_sim_bridge/tron1/mapper.py | 28 --
.../tron1/isaac_sim_bridge/tron1/node.py | 56 ---
docs/images/flow.png | Bin 1549592 -> 0 bytes
tunnel/.env.example | 38 --
tunnel/Dockerfile | 49 ---
tunnel/cmd/main.go | 340 -----------------
tunnel/config.example.json | 9 -
tunnel/config.json | 6 -
tunnel/config/config.go | 261 -------------
tunnel/docker-compose.yml | 15 -
tunnel/go.mod | 78 ----
tunnel/go.sum | 308 ---------------
tunnel/internal/aipagent/agent.go | 105 ------
tunnel/internal/client.go | 224 -----------
tunnel/internal/client_test.go | 47 ---
tunnel/internal/handlers/handlers.go | 131 -------
tunnel/internal/handlers/handlers_test.go | 43 ---
verify_settlement.py | 350 ++++++++++++++++++
x402-evidence.json | 15 +
55 files changed, 365 insertions(+), 2377 deletions(-)
delete mode 100644 .github/workflows/go-lint.yml
delete mode 100644 .github/workflows/go-unitest.yml
delete mode 100644 bridge/common/zenoh_bridge/package.xml
delete mode 100644 bridge/common/zenoh_bridge/resource/zenoh_bridge
delete mode 100644 bridge/common/zenoh_bridge/setup.cfg
delete mode 100644 bridge/common/zenoh_bridge/setup.py
delete mode 100644 bridge/common/zenoh_bridge/zenoh_bridge/__init__.py
delete mode 100644 bridge/common/zenoh_bridge/zenoh_bridge/action_event.py
delete mode 100644 bridge/common/zenoh_bridge/zenoh_bridge/command_mapper.py
delete mode 100644 bridge/common/zenoh_bridge/zenoh_bridge/utils.py
delete mode 100644 bridge/common/zenoh_bridge/zenoh_bridge/zenoh_subscriber.py
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/config/default.yaml
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/g1/__init__.py
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/g1/mapper.py
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/g1/node.py
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/package.xml
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/resource/isaac_sim_bridge_g1
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/setup.cfg
delete mode 100644 bridge/unitree/g1/isaac_sim_bridge/setup.py
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/config/default.yaml
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/go2/__init__.py
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/go2/mapper.py
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/go2/node.py
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/package.xml
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/resource/isaac_sim_bridge_go2
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/setup.cfg
delete mode 100644 bridge/unitree/go2/isaac_sim_bridge/setup.py
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/config/default.yaml
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/package.xml
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/resource/isaac_sim_bridge_tron1
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/setup.cfg
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/setup.py
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/tron1/__init__.py
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/tron1/mapper.py
delete mode 100644 bridge/unitree/tron1/isaac_sim_bridge/tron1/node.py
delete mode 100644 docs/images/flow.png
delete mode 100644 tunnel/.env.example
delete mode 100644 tunnel/Dockerfile
delete mode 100644 tunnel/cmd/main.go
delete mode 100644 tunnel/config.example.json
delete mode 100644 tunnel/config.json
delete mode 100644 tunnel/config/config.go
delete mode 100644 tunnel/docker-compose.yml
delete mode 100644 tunnel/go.mod
delete mode 100644 tunnel/go.sum
delete mode 100644 tunnel/internal/aipagent/agent.go
delete mode 100644 tunnel/internal/client.go
delete mode 100644 tunnel/internal/client_test.go
delete mode 100644 tunnel/internal/handlers/handlers.go
delete mode 100644 tunnel/internal/handlers/handlers_test.go
create mode 100644 verify_settlement.py
create mode 100644 x402-evidence.json
diff --git a/.github/workflows/go-lint.yml b/.github/workflows/go-lint.yml
deleted file mode 100644
index 015b358b8..000000000
--- a/.github/workflows/go-lint.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: Run Go Lint
-
-on:
- push:
- branches:
- - 'main'
- pull_request:
- branches:
- - '**'
-jobs:
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Go
- uses: actions/setup-go@v5
- with:
- go-version: '1.25'
- cache-dependency-path: tunnel/go.sum
-
- - name: Cache Go modules
- uses: actions/cache@v3
- with:
- path: |
- ~/.cache/go-build
- ~/go/pkg/mod
- key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
- restore-keys: |
- ${{ runner.os }}-go-
-
- - name: Install dependencies
- working-directory: tunnel
- run: go mod download
-
- - name: Install golangci-lint
- run: |
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.7.2
-
- - name: Add golangci-lint to PATH
- run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
-
- - name: Run make lint
- run: make lint
diff --git a/.github/workflows/go-unitest.yml b/.github/workflows/go-unitest.yml
deleted file mode 100644
index 7b2ffafc9..000000000
--- a/.github/workflows/go-unitest.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: Run Go Unit Tests
-
-on:
- push:
- branches:
- - 'main'
- pull_request:
- branches:
- - '**'
-
-jobs:
- test:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Go
- uses: actions/setup-go@v5
- with:
- go-version: '1.25'
- cache-dependency-path: tunnel/go.sum
-
- - name: Cache Go modules
- uses: actions/cache@v3
- with:
- path: |
- ~/.cache/go-build
- ~/go/pkg/mod
- key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
- restore-keys: |
- ${{ runner.os }}-go-
-
- - name: Install dependencies
- working-directory: tunnel
- run: go mod download
-
- - name: Run make test
- run: make test
-
- - name: Run unit tests with coverage
- run: make test-coverage
-
- - name: Upload test coverage
- uses: actions/upload-artifact@v4
- with:
- name: test-coverage
- path: tunnel/coverage.out
diff --git a/bridge/common/zenoh_bridge/package.xml b/bridge/common/zenoh_bridge/package.xml
deleted file mode 100644
index 665c4d3db..000000000
--- a/bridge/common/zenoh_bridge/package.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- zenoh_bridge
- 0.1.0
- Common Zenoh and Fabric action event utilities shared across all robot adapters
- Maintainer
- Apache-2.0
- rclpy
- geometry_msgs
-
- ament_python
-
-
diff --git a/bridge/common/zenoh_bridge/resource/zenoh_bridge b/bridge/common/zenoh_bridge/resource/zenoh_bridge
deleted file mode 100644
index e69de29bb..000000000
diff --git a/bridge/common/zenoh_bridge/setup.cfg b/bridge/common/zenoh_bridge/setup.cfg
deleted file mode 100644
index 9278c4623..000000000
--- a/bridge/common/zenoh_bridge/setup.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[develop]
-script_dir=$base/lib/zenoh_bridge
-
-[install]
-install_scripts=$base/lib/zenoh_bridge
diff --git a/bridge/common/zenoh_bridge/setup.py b/bridge/common/zenoh_bridge/setup.py
deleted file mode 100644
index 1db70d105..000000000
--- a/bridge/common/zenoh_bridge/setup.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from setuptools import setup, find_packages
-
-package_name = "zenoh_bridge"
-
-setup(
- name=package_name,
- version="0.1.0",
- packages=find_packages(exclude=["test"]),
- data_files=[
- ("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
- (f"share/{package_name}", ["package.xml"]),
- ],
- install_requires=["setuptools", "eclipse-zenoh"],
- zip_safe=True,
- entry_points={"console_scripts": []},
-)
diff --git a/bridge/common/zenoh_bridge/zenoh_bridge/__init__.py b/bridge/common/zenoh_bridge/zenoh_bridge/__init__.py
deleted file mode 100644
index 0ffc71a56..000000000
--- a/bridge/common/zenoh_bridge/zenoh_bridge/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""Common Zenoh and Fabric action event utilities."""
-from .action_event import ActionEvent, parse_action_event
-from .zenoh_subscriber import ZenohSubscriberHelper
-from .command_mapper import CommandMapper
-from .utils import clamp
-
-__all__ = [
- "ActionEvent", "parse_action_event",
- "ZenohSubscriberHelper",
- "CommandMapper",
- "clamp",
-]
diff --git a/bridge/common/zenoh_bridge/zenoh_bridge/action_event.py b/bridge/common/zenoh_bridge/zenoh_bridge/action_event.py
deleted file mode 100644
index 09ee7a9e7..000000000
--- a/bridge/common/zenoh_bridge/zenoh_bridge/action_event.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""Parse Fabric tunnel Action Event payloads."""
-import json
-from dataclasses import dataclass, field
-from typing import Any, Dict, Optional
-
-
-@dataclass
-class ActionEvent:
- action: str
- params: Dict[str, Any] = field(default_factory=dict)
- timestamp: str = ""
-
-
-def parse_action_event(raw: bytes) -> Optional[ActionEvent]:
- """Parse a Fabric Action Event from raw bytes.
-
- Expected schema (tunnel handlers.go:97-104)::
-
- {
- "payload": {"action": "move_forward", "params": {"speed": 0.5}},
- "transaction_details": {...},
- "timestamp": "2026-01-01T00:00:00Z"
- }
-
- Returns None on parse failure.
- """
- try:
- event = json.loads(raw)
- except (json.JSONDecodeError, UnicodeDecodeError):
- return None
-
- payload = event.get("payload") or {}
- if not isinstance(payload, dict):
- return None
-
- return ActionEvent(
- action=payload.get("action", "stop"),
- params=payload.get("params") or {},
- timestamp=event.get("timestamp", ""),
- )
diff --git a/bridge/common/zenoh_bridge/zenoh_bridge/command_mapper.py b/bridge/common/zenoh_bridge/zenoh_bridge/command_mapper.py
deleted file mode 100644
index 5ede638f5..000000000
--- a/bridge/common/zenoh_bridge/zenoh_bridge/command_mapper.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""Base class for robot-specific action → command mapping."""
-from abc import ABC, abstractmethod
-
-from geometry_msgs.msg import Twist
-
-from .action_event import ActionEvent
-
-
-class CommandMapper(ABC):
- """Subclass this for each robot model."""
-
- @abstractmethod
- def map(self, event: ActionEvent) -> Twist:
- """Map an ActionEvent to a Twist command."""
diff --git a/bridge/common/zenoh_bridge/zenoh_bridge/utils.py b/bridge/common/zenoh_bridge/zenoh_bridge/utils.py
deleted file mode 100644
index 7f8560e38..000000000
--- a/bridge/common/zenoh_bridge/zenoh_bridge/utils.py
+++ /dev/null
@@ -1,5 +0,0 @@
-"""Utility functions shared across all adapters."""
-
-
-def clamp(value: float, lo: float, hi: float) -> float:
- return max(lo, min(hi, value))
diff --git a/bridge/common/zenoh_bridge/zenoh_bridge/zenoh_subscriber.py b/bridge/common/zenoh_bridge/zenoh_bridge/zenoh_subscriber.py
deleted file mode 100644
index 661e75de4..000000000
--- a/bridge/common/zenoh_bridge/zenoh_bridge/zenoh_subscriber.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""Zenoh session and subscriber helper."""
-from typing import Callable, List
-import zenoh
-
-
-class ZenohSubscriberHelper:
- """Manages a Zenoh session with one or more topic subscriptions."""
-
- def __init__(self, listen_endpoint: str = "tcp/127.0.0.1:7447"):
- conf = zenoh.Config.from_json5(
- f'{{"listen":{{"endpoints":["{listen_endpoint}"]}}}}'
- )
- self._session = zenoh.open(conf)
- self._subs: List = []
-
- def subscribe(self, topic: str, callback: Callable) -> None:
- """Subscribe to a Zenoh topic with the given callback."""
- sub = self._session.declare_subscriber(topic, callback)
- self._subs.append(sub)
-
- def close(self) -> None:
- for s in self._subs:
- s.undeclare()
- self._session.close()
diff --git a/bridge/unitree/g1/isaac_sim_bridge/config/default.yaml b/bridge/unitree/g1/isaac_sim_bridge/config/default.yaml
deleted file mode 100644
index 6f972fd16..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/config/default.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-isaac_sim_bridge_g1:
- ros__parameters:
- zenoh_topic: "robot/tunnel/action"
- zenoh_listen: "tcp/127.0.0.1:7447"
- cmd_vel_topic: "/cmd_vel"
- forward_speed: 0.5
- backward_speed: 0.5
- turn_linear_speed: 0.3
- turn_angular_speed: 0.2
diff --git a/bridge/unitree/g1/isaac_sim_bridge/g1/__init__.py b/bridge/unitree/g1/isaac_sim_bridge/g1/__init__.py
deleted file mode 100644
index c458baa9e..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/g1/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from .node import main
-from .mapper import G1Mapper
-
-__all__ = ["main", "G1Mapper"]
diff --git a/bridge/unitree/g1/isaac_sim_bridge/g1/mapper.py b/bridge/unitree/g1/isaac_sim_bridge/g1/mapper.py
deleted file mode 100644
index 3d587749a..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/g1/mapper.py
+++ /dev/null
@@ -1,41 +0,0 @@
-"""G1-specific Fabric action → geometry_msgs/Twist mapper."""
-from geometry_msgs.msg import Twist
-from zenoh_bridge import ActionEvent, CommandMapper, clamp
-
-
-class G1Mapper(CommandMapper):
- """Maps Fabric actions to Twist commands for Unitree G1 / OM1-sim.
-
- Velocity limits from OM1-sim deploy.yaml:
- vx: [-0.5, 1.0] m/s wz: [-0.2, 0.2] rad/s
- """
-
- def __init__(
- self,
- forward_speed: float = 0.5,
- backward_speed: float = 0.5,
- turn_linear_speed: float = 0.3,
- turn_angular_speed: float = 0.2,
- ):
- self._fwd = forward_speed
- self._bwd = backward_speed
- self._turn_lin = turn_linear_speed
- self._turn_ang = turn_angular_speed
-
- def map(self, event: ActionEvent) -> Twist:
- msg = Twist()
- a = event.action
- if a in ("move_forward", "forward"):
- msg.linear.x = clamp(self._fwd, 0.0, 1.0)
- elif a in ("move_backward", "backward"):
- msg.linear.x = -clamp(self._bwd, 0.0, 0.5)
- elif a == "turn_left":
- msg.linear.x = self._turn_lin
- msg.angular.z = clamp(self._turn_ang, 0.0, 0.2)
- elif a == "turn_right":
- msg.linear.x = self._turn_lin
- msg.angular.z = -clamp(self._turn_ang, 0.0, 0.2)
- elif a == "stop":
- pass # zero Twist
- # unknown action → zero Twist (safe default)
- return msg
diff --git a/bridge/unitree/g1/isaac_sim_bridge/g1/node.py b/bridge/unitree/g1/isaac_sim_bridge/g1/node.py
deleted file mode 100644
index 21ac5fc6d..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/g1/node.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""ROS2 node for Fabric → Unitree G1 (OM1-sim) adapter."""
-import rclpy
-from rclpy.node import Node
-from geometry_msgs.msg import Twist
-
-from zenoh_bridge import parse_action_event, ZenohSubscriberHelper
-from .mapper import G1Mapper
-
-
-class IsaacSimG1BridgeNode(Node):
- def __init__(self):
- super().__init__("isaac_sim_bridge_g1")
-
- self.declare_parameter("zenoh_topic", "robot/tunnel/action")
- self.declare_parameter("zenoh_listen", "tcp/127.0.0.1:7447")
- self.declare_parameter("cmd_vel_topic", "/cmd_vel")
- self.declare_parameter("forward_speed", 0.5)
- self.declare_parameter("backward_speed", 0.5)
- self.declare_parameter("turn_linear_speed", 0.3)
- self.declare_parameter("turn_angular_speed", 0.2)
-
- p = self.get_parameter
- zenoh_topic = p("zenoh_topic").get_parameter_value().string_value
- zenoh_listen = p("zenoh_listen").get_parameter_value().string_value
- cmd_vel_topic = p("cmd_vel_topic").get_parameter_value().string_value
-
- self._mapper = G1Mapper(
- forward_speed = p("forward_speed").get_parameter_value().double_value,
- backward_speed = p("backward_speed").get_parameter_value().double_value,
- turn_linear_speed = p("turn_linear_speed").get_parameter_value().double_value,
- turn_angular_speed = p("turn_angular_speed").get_parameter_value().double_value,
- )
- self._pub = self.create_publisher(Twist, cmd_vel_topic, 10)
- self.get_logger().info(f"Adapter started, publishing to {cmd_vel_topic}")
-
- self._zenoh = ZenohSubscriberHelper(zenoh_listen)
- self._zenoh.subscribe(zenoh_topic, self._on_action)
- self.get_logger().info(f"Subscribed to Zenoh topic: {zenoh_topic}")
-
- def _on_action(self, sample):
- raw = bytes(sample.payload.to_bytes())
- event = parse_action_event(raw)
- if event is None:
- self.get_logger().error("Failed to parse action event")
- return
- self.get_logger().info(f"Received action={event.action} params={event.params}")
- twist = self._mapper.map(event)
- self._pub.publish(twist)
- self.get_logger().info(
- f"Published /cmd_vel: linear.x={twist.linear.x:.2f} angular.z={twist.angular.z:.2f}"
- )
-
- def destroy_node(self):
- self._zenoh.close()
- super().destroy_node()
-
-
-def main(args=None):
- rclpy.init(args=args)
- node = IsaacSimG1BridgeNode()
- try:
- rclpy.spin(node)
- except (KeyboardInterrupt, rclpy.executors.ExternalShutdownException):
- pass
- finally:
- node.destroy_node()
- if rclpy.ok():
- rclpy.shutdown()
diff --git a/bridge/unitree/g1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py b/bridge/unitree/g1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
deleted file mode 100644
index eaa7f5747..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from launch import LaunchDescription
-from launch_ros.actions import Node
-from launch.substitutions import PathJoinSubstitution
-from launch_ros.substitutions import FindPackageShare
-
-
-def generate_launch_description():
- config = PathJoinSubstitution(
- [FindPackageShare("isaac_sim_bridge_g1"), "config", "default.yaml"]
- )
- return LaunchDescription([
- Node(
- package="isaac_sim_bridge_g1",
- executable="isaac_sim_bridge",
- name="isaac_sim_bridge_g1",
- output="screen",
- parameters=[config],
- )
- ])
diff --git a/bridge/unitree/g1/isaac_sim_bridge/package.xml b/bridge/unitree/g1/isaac_sim_bridge/package.xml
deleted file mode 100644
index 883e8601e..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/package.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- isaac_sim_bridge_g1
- 0.1.0
- Fabric Zenoh action adapter for Unitree G1 in OM1-sim / Isaac Sim
- Maintainer
- Apache-2.0
- rclpy
- geometry_msgs
- zenoh_bridge
-
- ament_python
-
-
diff --git a/bridge/unitree/g1/isaac_sim_bridge/resource/isaac_sim_bridge_g1 b/bridge/unitree/g1/isaac_sim_bridge/resource/isaac_sim_bridge_g1
deleted file mode 100644
index e69de29bb..000000000
diff --git a/bridge/unitree/g1/isaac_sim_bridge/setup.cfg b/bridge/unitree/g1/isaac_sim_bridge/setup.cfg
deleted file mode 100644
index 42c8c81b4..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/setup.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[develop]
-script_dir=$base/lib/isaac_sim_bridge_g1
-
-[install]
-install_scripts=$base/lib/isaac_sim_bridge_g1
diff --git a/bridge/unitree/g1/isaac_sim_bridge/setup.py b/bridge/unitree/g1/isaac_sim_bridge/setup.py
deleted file mode 100644
index eca88754b..000000000
--- a/bridge/unitree/g1/isaac_sim_bridge/setup.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from setuptools import setup, find_packages
-from glob import glob
-
-package_name = "isaac_sim_bridge_g1"
-
-setup(
- name=package_name,
- version="0.1.0",
- packages=find_packages(exclude=["test"]),
- data_files=[
- ("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
- (f"share/{package_name}", ["package.xml"]),
- (f"share/{package_name}/launch", glob("launch/*.py")),
- (f"share/{package_name}/config", glob("config/*.yaml")),
- ],
- install_requires=["setuptools"],
- zip_safe=True,
- entry_points={
- "console_scripts": [
- # primary entry point
- "isaac_sim_bridge = g1.node:main",
- ],
- },
-)
diff --git a/bridge/unitree/go2/isaac_sim_bridge/config/default.yaml b/bridge/unitree/go2/isaac_sim_bridge/config/default.yaml
deleted file mode 100644
index 83d6d64fb..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/config/default.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-isaac_sim_bridge_go2:
- ros__parameters:
- zenoh_topic: "robot/tunnel/action"
- zenoh_listen: "tcp/127.0.0.1:7447"
- cmd_vel_topic: "/cmd_vel"
- forward_speed: 0.5
- backward_speed: 0.5
- turn_angular_speed: 0.5
diff --git a/bridge/unitree/go2/isaac_sim_bridge/go2/__init__.py b/bridge/unitree/go2/isaac_sim_bridge/go2/__init__.py
deleted file mode 100644
index 8f8247578..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/go2/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from .node import main
-from .mapper import Go2Mapper
-
-__all__ = ["main", "Go2Mapper"]
diff --git a/bridge/unitree/go2/isaac_sim_bridge/go2/mapper.py b/bridge/unitree/go2/isaac_sim_bridge/go2/mapper.py
deleted file mode 100644
index ad3a43ae8..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/go2/mapper.py
+++ /dev/null
@@ -1,31 +0,0 @@
-"""Go2 mapper — placeholder (experimental).
-
-Currently reuses cmd_vel mapping. Replace with Go2-specific SDK backend when available.
-"""
-from geometry_msgs.msg import Twist
-from zenoh_bridge import ActionEvent, CommandMapper, clamp
-
-
-class Go2Mapper(CommandMapper):
- """Placeholder mapper for Unitree Go2. Experimental — not validated on hardware."""
-
- def __init__(self, forward_speed=0.5, backward_speed=0.5,
- turn_angular_speed=0.5):
- self._fwd = forward_speed
- self._bwd = backward_speed
- self._turn_ang = turn_angular_speed
-
- def map(self, event: ActionEvent) -> Twist:
- msg = Twist()
- a = event.action
- if a in ("move_forward", "forward"):
- msg.linear.x = clamp(self._fwd, 0.0, 1.5)
- elif a in ("move_backward", "backward"):
- msg.linear.x = -clamp(self._bwd, 0.0, 0.5)
- elif a == "turn_left":
- msg.angular.z = clamp(self._turn_ang, 0.0, 1.0)
- elif a == "turn_right":
- msg.angular.z = -clamp(self._turn_ang, 0.0, 1.0)
- elif a == "stop":
- pass
- return msg
diff --git a/bridge/unitree/go2/isaac_sim_bridge/go2/node.py b/bridge/unitree/go2/isaac_sim_bridge/go2/node.py
deleted file mode 100644
index b3536ddc8..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/go2/node.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""ROS2 node for Fabric → Unitree Go2 adapter (placeholder)."""
-import rclpy
-from rclpy.node import Node
-from geometry_msgs.msg import Twist
-
-from zenoh_bridge import parse_action_event, ZenohSubscriberHelper
-from .mapper import Go2Mapper
-
-
-class IsaacSimGo2BridgeNode(Node):
- def __init__(self):
- super().__init__("isaac_sim_bridge_go2")
- self.declare_parameter("zenoh_topic", "robot/tunnel/action")
- self.declare_parameter("zenoh_listen", "tcp/127.0.0.1:7447")
- self.declare_parameter("cmd_vel_topic", "/cmd_vel")
- self.declare_parameter("forward_speed", 0.5)
- self.declare_parameter("backward_speed", 0.5)
- self.declare_parameter("turn_angular_speed", 0.5)
-
- p = self.get_parameter
- zenoh_topic = p("zenoh_topic").get_parameter_value().string_value
- zenoh_listen = p("zenoh_listen").get_parameter_value().string_value
- cmd_vel_topic = p("cmd_vel_topic").get_parameter_value().string_value
-
- self._mapper = Go2Mapper(
- forward_speed = p("forward_speed").get_parameter_value().double_value,
- backward_speed = p("backward_speed").get_parameter_value().double_value,
- turn_angular_speed= p("turn_angular_speed").get_parameter_value().double_value,
- )
- self._pub = self.create_publisher(Twist, cmd_vel_topic, 10)
- self._zenoh = ZenohSubscriberHelper(zenoh_listen)
- self._zenoh.subscribe(zenoh_topic, self._on_action)
- self.get_logger().info(f"Go2 adapter ready, subscribed to {zenoh_topic}")
-
- def _on_action(self, sample):
- event = parse_action_event(bytes(sample.payload.to_bytes()))
- if event is None:
- return
- self._pub.publish(self._mapper.map(event))
-
- def destroy_node(self):
- self._zenoh.close()
- super().destroy_node()
-
-
-def main(args=None):
- rclpy.init(args=args)
- node = IsaacSimGo2BridgeNode()
- try:
- rclpy.spin(node)
- except (KeyboardInterrupt, rclpy.executors.ExternalShutdownException):
- pass
- finally:
- node.destroy_node()
- if rclpy.ok():
- rclpy.shutdown()
diff --git a/bridge/unitree/go2/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py b/bridge/unitree/go2/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
deleted file mode 100644
index c5932624a..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from launch import LaunchDescription
-from launch_ros.actions import Node
-from launch.substitutions import PathJoinSubstitution
-from launch_ros.substitutions import FindPackageShare
-
-
-def generate_launch_description():
- config = PathJoinSubstitution(
- [FindPackageShare("isaac_sim_bridge_go2"), "config", "default.yaml"]
- )
- return LaunchDescription([
- Node(
- package="isaac_sim_bridge_go2",
- executable="isaac_sim_bridge",
- name="isaac_sim_bridge_go2",
- output="screen",
- parameters=[config],
- )
- ])
diff --git a/bridge/unitree/go2/isaac_sim_bridge/package.xml b/bridge/unitree/go2/isaac_sim_bridge/package.xml
deleted file mode 100644
index 74e2b0786..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/package.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- isaac_sim_bridge_go2
- 0.1.0
- Fabric Zenoh action adapter for Unitree Go2 in OM1-sim / Isaac Sim (placeholder)
- Maintainer
- Apache-2.0
- rclpy
- geometry_msgs
- zenoh_bridge
-
- ament_python
-
-
diff --git a/bridge/unitree/go2/isaac_sim_bridge/resource/isaac_sim_bridge_go2 b/bridge/unitree/go2/isaac_sim_bridge/resource/isaac_sim_bridge_go2
deleted file mode 100644
index e69de29bb..000000000
diff --git a/bridge/unitree/go2/isaac_sim_bridge/setup.cfg b/bridge/unitree/go2/isaac_sim_bridge/setup.cfg
deleted file mode 100644
index 6fad53eef..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/setup.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[develop]
-script_dir=$base/lib/isaac_sim_bridge_go2
-
-[install]
-install_scripts=$base/lib/isaac_sim_bridge_go2
diff --git a/bridge/unitree/go2/isaac_sim_bridge/setup.py b/bridge/unitree/go2/isaac_sim_bridge/setup.py
deleted file mode 100644
index 53da7b5cc..000000000
--- a/bridge/unitree/go2/isaac_sim_bridge/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from setuptools import setup, find_packages
-from glob import glob
-
-package_name = "isaac_sim_bridge_go2"
-
-setup(
- name=package_name,
- version="0.1.0",
- packages=find_packages(exclude=["test"]),
- data_files=[
- ("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
- (f"share/{package_name}", ["package.xml"]),
- (f"share/{package_name}/launch", glob("launch/*.py")),
- (f"share/{package_name}/config", glob("config/*.yaml")),
- ],
- install_requires=["setuptools"],
- zip_safe=True,
- entry_points={
- "console_scripts": [
- "isaac_sim_bridge = go2.node:main",
- ],
- },
-)
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/config/default.yaml b/bridge/unitree/tron1/isaac_sim_bridge/config/default.yaml
deleted file mode 100644
index 846da0605..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/config/default.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-isaac_sim_bridge_tron1:
- ros__parameters:
- zenoh_topic: "robot/tunnel/action"
- zenoh_listen: "tcp/127.0.0.1:7447"
- cmd_vel_topic: "/cmd_vel"
- forward_speed: 0.3
- backward_speed: 0.3
- turn_angular_speed: 0.3
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py b/bridge/unitree/tron1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
deleted file mode 100644
index 73f4ab1d7..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/launch/isaac_sim_bridge.launch.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from launch import LaunchDescription
-from launch_ros.actions import Node
-from launch.substitutions import PathJoinSubstitution
-from launch_ros.substitutions import FindPackageShare
-
-
-def generate_launch_description():
- config = PathJoinSubstitution(
- [FindPackageShare("isaac_sim_bridge_tron1"), "config", "default.yaml"]
- )
- return LaunchDescription([
- Node(
- package="isaac_sim_bridge_tron1",
- executable="isaac_sim_bridge",
- name="isaac_sim_bridge_tron1",
- output="screen",
- parameters=[config],
- )
- ])
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/package.xml b/bridge/unitree/tron1/isaac_sim_bridge/package.xml
deleted file mode 100644
index 055e9520a..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/package.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- isaac_sim_bridge_tron1
- 0.1.0
- Fabric Zenoh action adapter for Tron1 in OM1-sim / Isaac Sim (placeholder)
- Maintainer
- Apache-2.0
- rclpy
- geometry_msgs
- zenoh_bridge
-
- ament_python
-
-
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/resource/isaac_sim_bridge_tron1 b/bridge/unitree/tron1/isaac_sim_bridge/resource/isaac_sim_bridge_tron1
deleted file mode 100644
index e69de29bb..000000000
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/setup.cfg b/bridge/unitree/tron1/isaac_sim_bridge/setup.cfg
deleted file mode 100644
index 8cc636cab..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/setup.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[develop]
-script_dir=$base/lib/isaac_sim_bridge_tron1
-
-[install]
-install_scripts=$base/lib/isaac_sim_bridge_tron1
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/setup.py b/bridge/unitree/tron1/isaac_sim_bridge/setup.py
deleted file mode 100644
index 982cabbf7..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from setuptools import setup, find_packages
-from glob import glob
-
-package_name = "isaac_sim_bridge_tron1"
-
-setup(
- name=package_name,
- version="0.1.0",
- packages=find_packages(exclude=["test"]),
- data_files=[
- ("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
- (f"share/{package_name}", ["package.xml"]),
- (f"share/{package_name}/launch", glob("launch/*.py")),
- (f"share/{package_name}/config", glob("config/*.yaml")),
- ],
- install_requires=["setuptools"],
- zip_safe=True,
- entry_points={
- "console_scripts": [
- "isaac_sim_bridge = tron1.node:main",
- ],
- },
-)
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/tron1/__init__.py b/bridge/unitree/tron1/isaac_sim_bridge/tron1/__init__.py
deleted file mode 100644
index 56798d7c4..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/tron1/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from .node import main
-from .mapper import Tron1Mapper
-
-__all__ = ["main", "Tron1Mapper"]
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/tron1/mapper.py b/bridge/unitree/tron1/isaac_sim_bridge/tron1/mapper.py
deleted file mode 100644
index 98b3049d4..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/tron1/mapper.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""Tron1 mapper — placeholder (experimental)."""
-from geometry_msgs.msg import Twist
-from zenoh_bridge import ActionEvent, CommandMapper, clamp
-
-
-class Tron1Mapper(CommandMapper):
- """Placeholder mapper for Tron1. Experimental — not validated on hardware."""
-
- def __init__(self, forward_speed=0.3, backward_speed=0.3,
- turn_angular_speed=0.3):
- self._fwd = forward_speed
- self._bwd = backward_speed
- self._turn_ang = turn_angular_speed
-
- def map(self, event: ActionEvent) -> Twist:
- msg = Twist()
- a = event.action
- if a in ("move_forward", "forward"):
- msg.linear.x = clamp(self._fwd, 0.0, 1.0)
- elif a in ("move_backward", "backward"):
- msg.linear.x = -clamp(self._bwd, 0.0, 0.5)
- elif a == "turn_left":
- msg.angular.z = clamp(self._turn_ang, 0.0, 0.5)
- elif a == "turn_right":
- msg.angular.z = -clamp(self._turn_ang, 0.0, 0.5)
- elif a == "stop":
- pass
- return msg
diff --git a/bridge/unitree/tron1/isaac_sim_bridge/tron1/node.py b/bridge/unitree/tron1/isaac_sim_bridge/tron1/node.py
deleted file mode 100644
index 82436d26c..000000000
--- a/bridge/unitree/tron1/isaac_sim_bridge/tron1/node.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""ROS2 node for Fabric → Tron1 adapter (placeholder)."""
-import rclpy
-from rclpy.node import Node
-from geometry_msgs.msg import Twist
-
-from zenoh_bridge import parse_action_event, ZenohSubscriberHelper
-from .mapper import Tron1Mapper
-
-
-class IsaacSimTron1BridgeNode(Node):
- def __init__(self):
- super().__init__("isaac_sim_bridge_tron1")
- self.declare_parameter("zenoh_topic", "robot/tunnel/action")
- self.declare_parameter("zenoh_listen", "tcp/127.0.0.1:7447")
- self.declare_parameter("cmd_vel_topic", "/cmd_vel")
- self.declare_parameter("forward_speed", 0.3)
- self.declare_parameter("backward_speed", 0.3)
- self.declare_parameter("turn_angular_speed", 0.3)
-
- p = self.get_parameter
- zenoh_topic = p("zenoh_topic").get_parameter_value().string_value
- zenoh_listen = p("zenoh_listen").get_parameter_value().string_value
- cmd_vel_topic = p("cmd_vel_topic").get_parameter_value().string_value
-
- self._mapper = Tron1Mapper(
- forward_speed = p("forward_speed").get_parameter_value().double_value,
- backward_speed = p("backward_speed").get_parameter_value().double_value,
- turn_angular_speed= p("turn_angular_speed").get_parameter_value().double_value,
- )
- self._pub = self.create_publisher(Twist, cmd_vel_topic, 10)
- self._zenoh = ZenohSubscriberHelper(zenoh_listen)
- self._zenoh.subscribe(zenoh_topic, self._on_action)
- self.get_logger().info(f"Tron1 adapter ready, subscribed to {zenoh_topic}")
-
- def _on_action(self, sample):
- event = parse_action_event(bytes(sample.payload.to_bytes()))
- if event is None:
- return
- self._pub.publish(self._mapper.map(event))
-
- def destroy_node(self):
- self._zenoh.close()
- super().destroy_node()
-
-
-def main(args=None):
- rclpy.init(args=args)
- node = IsaacSimTron1BridgeNode()
- try:
- rclpy.spin(node)
- except (KeyboardInterrupt, rclpy.executors.ExternalShutdownException):
- pass
- finally:
- node.destroy_node()
- if rclpy.ok():
- rclpy.shutdown()
diff --git a/docs/images/flow.png b/docs/images/flow.png
deleted file mode 100644
index 9a72121078cee59ea5432502011c9cce8e8dddd5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1549592
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