Browse Source

Adjust python-ros2-dataflow example and move it to top level

tags/v0.2.5-alpha.2
Philipp Oppermann 2 years ago
parent
commit
b12f5e7620
Failed to extract signature
9 changed files with 31 additions and 28 deletions
  1. +5
    -0
      Cargo.toml
  2. +4
    -1
      apis/python/node/src/lib.rs
  3. +1
    -1
      examples/python-ros2-dataflow/control_node.py
  4. +0
    -0
      examples/python-ros2-dataflow/dataflow.yml
  5. +6
    -6
      examples/python-ros2-dataflow/random_turtle.py
  6. +0
    -0
      examples/python-ros2-dataflow/requirements.txt
  7. +15
    -4
      examples/python-ros2-dataflow/run.rs
  8. +0
    -5
      libraries/extensions/ros2-bridge/Cargo.toml
  9. +0
    -11
      libraries/extensions/ros2-bridge/python/README.md

+ 5
- 0
Cargo.toml View File

@@ -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"


+ 4
- 1
apis/python/node/src/lib.rs View File

@@ -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| {


libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/control_node.py → examples/python-ros2-dataflow/control_node.py View File

@@ -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()

libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/dataflow.yml → examples/python-ros2-dataflow/dataflow.yml View File


libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/random_turtle.py → examples/python-ros2-dataflow/random_turtle.py View File

@@ -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)

libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/requirements.txt → examples/python-ros2-dataflow/requirements.txt View File


libraries/extensions/ros2-bridge/examples/python-ros2-dataflow/run.rs → examples/python-ros2-dataflow/run.rs View File

@@ -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?;

+ 0
- 5
libraries/extensions/ros2-bridge/Cargo.toml View File

@@ -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"]

+ 0
- 11
libraries/extensions/ros2-bridge/python/README.md View File

@@ -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
````

Loading…
Cancel
Save