Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
|
|
5 months ago | |
|---|---|---|
| .. | ||
| .gitignore | 3 years ago | |
| README.md | 2 years ago | |
| dataflow.yml | 1 year ago | |
| node.c | 2 years ago | |
| operator.c | 2 years ago | |
| run.rs | 5 months ago | |
| sink.c | 2 years ago | |
This examples shows how to create and connect dora operators and custom nodes in C.
The dataflow.yml defines a simple dataflow graph with the following three nodes:
node.c is a custom node, i.e., it has its own main function and runs as a separate process. It uses the dora-node-api-c crate to interact with the dora dataflow.
timer that is mapped to a dora-provided periodic timer (dora/timer/secs/1).tick and a counter value as data (just a single byte).operator.c file defines a dora operator that is plugged as a shared library into a dora runtime. Instead of defining a main function, it implements a template of dora_* functions, which are invoked by the dora runtime, e.g. when new input is available.
tick messages created by the node.c node as input. For each input value, it checks the ID and then prints the received message to stdout.sink.c file defines a custom node again, which takes the output string of the operator as input. It prints each received input to stdout and exits as soon as the input stream is closed.To try it out, you can use the run.rs binary. It performs all required build steps and then starts the dataflow. Use the following command to run it: cargo run --example c-dataflow.
For a manual build, follow these steps:
Build the custom nodes:
build folder in this directory (i.e., next to the node.c file)dora-node-api-c crate into a static library.
cargo build -p dora-node-api-c --release../../target/release/libdora-node-api-c.a.node.c (e.g. using clang) and link the staticlib
clang node.c <FLAGS> -ldora_node_api_c -L ../../target/release --output build/c_node
<FLAGS> depend on the operating system and the libraries that the C node uses. The following flags are required for each OS:
-lm -lrt -ldl -pthread-framework CoreServices -framework Security -l System -l resolv -l pthread -l c -l m-ladvapi32 -luserenv -lkernel32 -lws2_32 -lbcrypt -lncrypt -lschannel -lntdll -liphlpapi
-lcfgmgr32 -lcredui -lcrypt32 -lcryptnet -lfwpuclnt -lgdi32 -lmsimg32 -lmswsock -lole32
-lopengl32 -lsecur32 -lshell32 -lsynchronization -luser32 -lwinspool
-Wl,-nodefaultlib:libcmt -D_DLL -lmsvcrt
Also: On Windows, the output file should have an .exe extension: --output build/c_node.exesink.c executableBuild the operator:
operator.c file into a shared library.
clang -c operator.c -o build/operator.o -fdeclspec -fPIC
clang -shared build/operator.o -o build/liboperator.so
Omit the -fPIC argument on Windows. Replace the liboperator.so name with the shared library standard library prefix/extensions used on your OS, e.g. .dll on Windows.Build the dora coordinator and runtime:
dora-coordinator executable using cargo build -p dora-coordinator --releasedora-runtime executable using cargo build -p dora-runtime --releaseRun the dataflow:
Start the dora-coordinator, passing the paths to the dataflow file and the dora-runtime as arguments:
../../target/release/dora-daemon --run-dataflow dataflow.yml ../../target/release/dora-runtime
DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed datafl
Rust Python TOML Markdown C other