diff --git a/Cargo.toml b/Cargo.toml index 506cee75..b7503d3e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -114,6 +114,11 @@ path = "examples/c++-dataflow/run.rs" name = "python-dataflow" path = "examples/python-dataflow/run.rs" +[[example]] +name = "python-ros2-dataflow" +path = "examples/python-ros2-dataflow/run.rs" +required-features = ["ros2-examples"] + [[example]] name = "python-operator-dataflow" path = "examples/python-operator-dataflow/run.rs" diff --git a/apis/python/node/src/lib.rs b/apis/python/node/src/lib.rs index 057017e3..6d255d4c 100644 --- a/apis/python/node/src/lib.rs +++ b/apis/python/node/src/lib.rs @@ -106,7 +106,10 @@ impl Node { pythonize::pythonize(py, self.node.dataflow_descriptor()) } - pub fn merge_ros2_events(&mut self, subscription: &mut Ros2Subscription) -> eyre::Result<()> { + pub fn merge_external_events( + &mut self, + subscription: &mut Ros2Subscription, + ) -> eyre::Result<()> { let subscription = subscription.into_stream()?; let stream = futures::stream::poll_fn(move |cx| { let s = subscription.as_stream().map(|item| { diff --git a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/control_node.py b/examples/python-ros2-dataflow/control_node.py similarity index 93% rename from libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/control_node.py rename to examples/python-ros2-dataflow/control_node.py index 6188c20b..dcef48ac 100755 --- a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/control_node.py +++ b/examples/python-ros2-dataflow/control_node.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import random -from dora_ros2_bridge import Node +from dora import Node import pyarrow as pa node = Node() diff --git a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/dataflow.yml b/examples/python-ros2-dataflow/dataflow.yml similarity index 100% rename from libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/dataflow.yml rename to examples/python-ros2-dataflow/dataflow.yml diff --git a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/random_turtle.py b/examples/python-ros2-dataflow/random_turtle.py similarity index 83% rename from libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/random_turtle.py rename to examples/python-ros2-dataflow/random_turtle.py index 1383dded..7626bdff 100755 --- a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/random_turtle.py +++ b/examples/python-ros2-dataflow/random_turtle.py @@ -1,14 +1,14 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import time, random -from dora_ros2_bridge import * +import time, random, dora +from dora import Node import pyarrow as pa -context = Ros2Context() -node = context.new_node("turtle_teleop", "/ros2_demo", Ros2NodeOptions(rosout=True)) +context = dora.experimental.ros2_bridge.Ros2Context() +node = context.new_node("turtle_teleop", "/ros2_demo", dora.experimental.ros2_bridge.Ros2NodeOptions(rosout=True)) -topic_qos = Ros2QosPolicies(reliable=True, max_blocking_time=0.1) +topic_qos = dora.experimental.ros2_bridge.Ros2QosPolicies(reliable=True, max_blocking_time=0.1) turtle_twist_topic = node.create_topic( "/turtle1/cmd_vel", "geometry_msgs::Twist", topic_qos @@ -16,7 +16,7 @@ turtle_twist_topic = node.create_topic( twist_writer = node.create_publisher(turtle_twist_topic) turtle_pose_topic = node.create_topic("/turtle1/pose", "turtlesim::Pose", topic_qos) -pose_reader = node.create_subscription_stream(turtle_pose_topic) +pose_reader = node.create_subscription(turtle_pose_topic) dora_node = Node() dora_node.merge_external_events(pose_reader) diff --git a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/requirements.txt b/examples/python-ros2-dataflow/requirements.txt similarity index 100% rename from libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/requirements.txt rename to examples/python-ros2-dataflow/requirements.txt diff --git a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/run.rs b/examples/python-ros2-dataflow/run.rs similarity index 77% rename from libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/run.rs rename to examples/python-ros2-dataflow/run.rs index b546d5f3..e531b8b2 100644 --- a/libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/run.rs +++ b/examples/python-ros2-dataflow/run.rs @@ -14,7 +14,9 @@ async fn main() -> eyre::Result<()> { std::env::set_current_dir(root.join(file!()).parent().unwrap()) .wrap_err("failed to set working dir")?; - run(&["python3", "-m", "venv", "../.env"], None).await?; + run(&["python3", "-m", "venv", "../.env"], None) + .await + .context("failed to create venv")?; let venv = &root.join("examples").join(".env"); std::env::set_var( "VIRTUAL_ENV", @@ -32,10 +34,19 @@ async fn main() -> eyre::Result<()> { ), ); - run(&["pip", "install", "--upgrade", "pip"], None).await?; - run(&["pip", "install", "-r", "requirements.txt"], None).await?; + run(&["pip", "install", "--upgrade", "pip"], None) + .await + .context("failed to install pip")?; + run(&["pip", "install", "-r", "requirements.txt"], None) + .await + .context("pip install failed")?; - run(&["maturin", "develop"], Some(&root.join("python"))).await?; + run( + &["maturin", "develop"], + Some(&root.join("apis").join("python").join("node")), + ) + .await + .context("maturin develop failed")?; let dataflow = Path::new("dataflow.yml"); dora_daemon::Daemon::run_dataflow(dataflow).await?; diff --git a/libraries/extensions/ros2-bridge/Cargo.toml b/libraries/extensions/ros2-bridge/Cargo.toml index 8bf29b1c..799c4745 100644 --- a/libraries/extensions/ros2-bridge/Cargo.toml +++ b/libraries/extensions/ros2-bridge/Cargo.toml @@ -33,8 +33,3 @@ futures = { version = "0.3.28", default-features = false } name = "random_turtle" path = "examples/rust-standalone-bridge/random_turtle.rs" required-features = ["ros2-examples"] - -[[example]] -name = "python-ros2-dataflow" -path = "examples/python-ros2-dataflow/run.rs" -required-features = ["ros2-examples"] diff --git a/libraries/extensions/ros2-bridge/python/README.md b/libraries/extensions/ros2-bridge/python/README.md deleted file mode 100644 index d3d0d4e4..00000000 --- a/libraries/extensions/ros2-bridge/python/README.md +++ /dev/null @@ -1,11 +0,0 @@ - -## Building - -To build the Python module for development: - -````bash -python3 -m venv .env -source .env/bin/activate -pip install maturin -maturin develop -````