mirror of
https://gitee.com/dlmu-cone/Arborflow
synced 2026-10-24 02:02:19 +08:00
feat: launch ArborFlow behavior tree studio
This commit is contained in:
103
README.md
Normal file
103
README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# ArborFlow
|
||||
|
||||
ArborFlow is a cross-platform visual behavior tree editor for BehaviorTree.CPP. It runs as an Electron desktop app on Windows, Linux, and macOS.
|
||||
|
||||
## Features
|
||||
|
||||
- Drag-and-drop behavior tree canvas with cycle and child-count validation
|
||||
- BehaviorTree.CPP control, decorator, action, condition, and subtree nodes
|
||||
- Editable ports and blackboard expressions such as `{goal}`
|
||||
- Automatic tree layout, minimap, zoom, undo, and redo
|
||||
- ArborFlow project files (`.arborflow`) and BehaviorTree.CPP v4 XML import/export
|
||||
- Real-time node monitoring over a direct WebSocket or `rosbridge_server`
|
||||
- Runtime states: `IDLE`, `RUNNING`, `SUCCESS`, `FAILURE`, and `SKIPPED`
|
||||
|
||||
## Development
|
||||
|
||||
Requirements: Node.js 20 or newer and npm.
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Run a local status server in another terminal to exercise the monitor without ROS:
|
||||
|
||||
```bash
|
||||
npm run mock:monitor
|
||||
```
|
||||
|
||||
Connect ArborFlow to `ws://127.0.0.1:1667` and the demo tree will cycle through live states.
|
||||
|
||||
Build the web assets and type-check the project:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Create desktop packages on the current operating system:
|
||||
|
||||
```bash
|
||||
npm run dist
|
||||
```
|
||||
|
||||
Platform-specific targets are available as `npm run dist:win`, `npm run dist:linux`, and `npm run dist:mac`. Electron applications should normally be packaged on the matching host OS, especially for macOS signing.
|
||||
|
||||
## Real-time Monitor
|
||||
|
||||
Open **Monitor** in the application toolbar and enter either a direct WebSocket endpoint or a `rosbridge_server` endpoint. Node references are matched in this order:
|
||||
|
||||
1. ArborFlow node ID, visible in the Inspector
|
||||
2. Exact display name or registration name
|
||||
3. Last segment of a slash-separated path
|
||||
|
||||
### Direct WebSocket protocol
|
||||
|
||||
ArborFlow accepts one JSON object per WebSocket message. A single status event can use any of `nodeId`, `uid`, `node`, `name`, or `path` as the node reference:
|
||||
|
||||
```json
|
||||
{"type":"status","nodeId":"navigate_action","status":"RUNNING","timestamp":1784635200000}
|
||||
```
|
||||
|
||||
Numeric BehaviorTree.CPP status values are supported: `0=IDLE`, `1=RUNNING`, `2=SUCCESS`, `3=FAILURE`, and `4=SKIPPED`.
|
||||
|
||||
A full snapshot can update several nodes at once:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "snapshot",
|
||||
"timestamp": 1784635200000,
|
||||
"nodes": {
|
||||
"BatteryOK": "SUCCESS",
|
||||
"NavigateToPose": "RUNNING",
|
||||
"ReportResult": "IDLE"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The client sends `{"type":"subscribe","client":"ArborFlow","protocol":1}` after connecting and a ping every five seconds. A server may return the same timestamp using `{"type":"pong","timestamp":1784635200000}` to report round-trip latency.
|
||||
|
||||
### ROS 2 with rosbridge
|
||||
|
||||
Start rosbridge and use its WebSocket address, usually `ws://ROBOT_IP:9090`:
|
||||
|
||||
```bash
|
||||
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
|
||||
```
|
||||
|
||||
The default topic is `/arborflow/status` with type `std_msgs/msg/String`. Publish the direct-protocol JSON as the string payload:
|
||||
|
||||
```bash
|
||||
ros2 topic pub --once /arborflow/status std_msgs/msg/String \
|
||||
"{data: '{\"node\":\"NavigateToPose\",\"status\":\"RUNNING\"}'}"
|
||||
```
|
||||
|
||||
ArborFlow sends the rosbridge subscribe request automatically. The topic can be changed in the monitor panel.
|
||||
|
||||
## Project format
|
||||
|
||||
`.arborflow` files retain visual positions, editor metadata, node ports, and stable monitor IDs. XML exports contain only BehaviorTree.CPP data. Runtime monitor state is transient and is never saved into either format.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user