HEXFELLOW hex-flow Core
Project description
HEX FLOW CORE
📖 Overview
What is hex_flow_core
hex_flow_core is the Python core library for the HEXFELLOW hex-flow framework. It provides Zenoh-based publish/subscribe node abstractions and launch configuration utilities, enabling multi-node orchestration for HEXFELLOW robots, sensors, and simulators.
What problem it solves
- Pub/Sub communication: Nodes publish and subscribe to topics over Eclipse Zenoh, supporting high-throughput binary payloads (images, commands, sensor data).
- Topic remapping: Each node can remap logical topic names to actual Zenoh keys via environment variables, enabling flexible deployment without code changes.
- Launch orchestration:
LaunchConfigandNodeConfiggenerate YAML launch files consumed byhexflow run, managing multiple nodes, build steps, environment variables, and router settings from a single Python script.
Target users
- Engineers integrating HEXFELLOW robots into their systems.
- Researchers running experiments with HEXFELLOW robots.
📦 Installation
Requirements
- Python >= 3.10
- OS: Ubuntu (or other Linux)
- Core dependencies:
eclipse-zenoh>= 1.9.0envlog== 1.0.0hex_util_runtime>= 0.0.0, < 0.1.0pyyaml>= 6.0
Install hex-flow-cli
For Ubuntu or any Debian-based system, install Zenoh and hex-flow CLI:
curl -L https://download.eclipse.org/zenoh/debian-repo/zenoh-public-key | sudo gpg --dearmor --yes --output /etc/apt/keyrings/zenoh-public-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/zenoh-public-key.gpg] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
sudo apt install zenoh curl
curl -fsSL https://raw.githubusercontent.com/hexfellow/hex-flow/main/install.sh | sh
For other systems, please install zenohd yourself, then run the install script.
Install hex-flow-core from PyPI
pip install hex_flow_core
📑 API
NodeCallback
Low-level base class wrapping a Zenoh session with publisher/subscriber management, topic remapping, and structured logging.
from hex_flow_core import NodeCallback
node = NodeCallback("my_node")
node.start()
node.create_pub("my/topic")
node.pub("my/topic", b"hello")
node.create_sub("other/topic", lambda sample: print(sample.payload.to_bytes()))
while node.is_working():
time.sleep(1)
node.stop()
Environment variables read at init:
| Variable | Description | Default |
|---|---|---|
HEX_FLOW_NODE_NAME |
Overrides the name argument |
constructor arg |
HEX_FLOW_REMAP |
JSON dict mapping logical topics to actual Zenoh keys | {} |
RUST_LOG |
Log level passed to envlog |
"info" |
Node
Higher-level subclass of NodeCallback that automatically buffers received messages in bounded deques, providing a polling-style get() interface.
from hex_flow_core import Node
node = Node("my_node")
node.start()
node.create_sub("sensor/data", maxlen=20)
data = node.get("sensor/data", latest=True)
if data is not None:
print(f"received {len(data)} bytes")
node.stop()
NodeConfig
Describes a single node for launch: name, build/run commands, required flag, topic remaps, and environment variables.
from hex_flow_core import NodeConfig
cfg = NodeConfig(
name="cam_publisher",
run_cmd="python cam_pub.py",
build_cmd="pip install -e .",
required=True,
remap_dict={"camera/rgb": "robot_a/camera/rgb"},
env_dict={"RUST_LOG": "debug"},
)
LaunchConfig
Aggregates multiple NodeConfig entries and exports a YAML launch file for hexflow run.
from hex_flow_core import LaunchConfig, NodeConfig
launch = LaunchConfig(
local_only=True,
enable_tui=False,
log_to_file=True,
save_path="/tmp/my.launch.yml",
)
launch.set_node("cam", NodeConfig(run_cmd="python cam.py"))
launch.set_node("ctrl", NodeConfig(run_cmd="python ctrl.py"))
path = launch.export()
print(path) # /tmp/my.launch.yml
The exported YAML can be used with:
hexflow run /tmp/my.launch.yml
💡 Example
We provide examples to test the installation. After installation, run:
git clone https://github.com/hexfellow/hex_flow_core.git
cd hex_flow_core
hexflow run examples/test.launch.py
This launches 8 command publishers (~1000 Hz each), 6 image publishers (~50 Hz each), and 1 subscriber that validates payloads and logs throughput.
Note: Examples require
numpy(pip install numpy).
📄 License
Apache License 2.0. See LICENSE.
🌟 Star History
👥 Contributors
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hex_flow_core-0.0.1a7.tar.gz.
File metadata
- Download URL: hex_flow_core-0.0.1a7.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15699171b34b202a8ea9250a20ef74e0468fef485f06a88487bb442b3c269e69
|
|
| MD5 |
f7ada827579af8e9ff96a25bc171f3ce
|
|
| BLAKE2b-256 |
500a4f3527c371c53b896a4867c818ce4043b26d2935efbec5f1846c8eef8a32
|
File details
Details for the file hex_flow_core-0.0.1a7-py3-none-any.whl.
File metadata
- Download URL: hex_flow_core-0.0.1a7-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72de1c8ca88f1703bd090301f67010c52d822710f30754168f13179d35833aac
|
|
| MD5 |
10bf1ab82eb4143bf32fb508914faabc
|
|
| BLAKE2b-256 |
760862a99d0341b97fe19b4ddb92f26ff78fe83762869568f89f8be5c2a161d6
|