Graph-Fused Vision-Language-Action Models for Semantically Safe Dual-Robot Control via Control Barrier Functions
Official code and support material for our work on semantically safe dual-robot manipulation using Graph-Fused Vision-Language-Action (GF-VLA) models with Control Barrier Functions (CBFs). This framework enables language-conditioned dual-arm control while guaranteeing collision-free motion through real-time CBF-based safety filtering.
- Dual-arm VLA control β UR5e + UR10e coordination for manipulation tasks
- CBF safety filter β Minimal modification of nominal actions for guaranteed obstacle avoidance
- Vision-language grounding β Point cloud + language instruction for semantic understanding
- Real-time QP solver β Efficient CBF-QP formulation for online safety filtering
# Clone repository
git clone https://github.com/YOUR_ORG/GFVLA_CBF.git
cd GFVLA_CBF
# Install dependencies
pip install -r requirement.txt# Build "VLA" letters with Jenga blocks (CBF enabled by default)
python hardware/demo_build_vla_2d.py --ur5e-ip 192.168.1.101 --ur10e-ip 192.168.1.102
# Simulation mode (no hardware)
python hardware/demo_build_vla_2d.py --simulationThe CBF module provides safety filtering that minimally modifies VLA-predicted actions to ensure collision-free motion during dual-robot manipulation.
| Feature | Description |
|---|---|
| Obstacle avoidance | Keeps end-effectors at safe distance from obstacles (point cloud / detected blocks) |
| Inter-arm collision | Maintains minimum distance between left and right arms |
| Workspace bounds | Enforces Cartesian workspace limits |
| CBF-QP formulation | Solves QP to find closest safe action to nominal control |
CBF is enabled by default. To disable:
python hardware/demo_build_vla_2d.py --no-cbfIn HardwareConfig.safety:
| Parameter | Default | Description |
|---|---|---|
use_cbf_filter |
True |
Enable/disable CBF filter |
cbf_obstacle_margin |
0.08 m |
Minimum distance from obstacles |
cbf_inter_arm_margin |
0.12 m |
Minimum distance between arms |
from hardware import DualArmHardwareInterface, Obstacle, obstacles_from_point_cloud
# Create hardware interface
hardware = DualArmHardwareInterface(config)
# Obstacles from point cloud (e.g., depth camera)
obstacles = obstacles_from_point_cloud(point_cloud, safety_margin=0.05)
# Option 1: Update obstacles globally
hardware.set_cbf_obstacles(obstacles)
# Option 2: Pass per-action
hardware.execute_action(action, blocking=True, obstacles=obstacles)GFVLA_CBF/
βββ hardware/ # Dual-arm hardware & CBF
β βββ cbf.py # Control Barrier Function module
β βββ dual_arm_hardware.py
β βββ vla_integration.py
β βββ demo_build_vla_2d.py
βββ models/ # VLA model definitions
βββ vla/ # VLA training & datasets
βββ scripts/ # Training scripts
βββ assets/ # Figures & resources
This project is released for research purposes. See individual files for license details.

