Skip to content

Commit 1b5c187

Browse files
committed
Update examples
Signed-off-by: Michael X. Grey <[email protected]>
1 parent 29fe10e commit 1b5c187

11 files changed

+60
-81
lines changed

examples/message_demo/src/message_demo.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{convert::TryInto, env, sync::Arc};
1+
use std::convert::TryInto;
22

33
use anyhow::{Error, Result};
44
use rosidl_runtime_rs::{seq, BoundedSequence, Message, Sequence};
@@ -138,8 +138,8 @@ fn demonstrate_sequences() {
138138
fn demonstrate_pubsub() -> Result<(), Error> {
139139
println!("================== Interoperability demo ==================");
140140
// Demonstrate interoperability between idiomatic and RMW-native message types
141-
let context = rclrs::Context::new(env::args())?;
142-
let node = rclrs::create_node(&context, "message_demo")?;
141+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
142+
let node = executor.create_node("message_demo")?;
143143

144144
let idiomatic_publisher = node.create_publisher::<rclrs_example_msgs::msg::VariousTypes>(
145145
"topic",
@@ -166,10 +166,10 @@ fn demonstrate_pubsub() -> Result<(), Error> {
166166
)?;
167167
println!("Sending idiomatic message.");
168168
idiomatic_publisher.publish(rclrs_example_msgs::msg::VariousTypes::default())?;
169-
rclrs::spin_once(Arc::clone(&node), None)?;
169+
executor.spin(rclrs::SpinOptions::spin_once())?;
170170
println!("Sending RMW-native message.");
171171
direct_publisher.publish(rclrs_example_msgs::msg::rmw::VariousTypes::default())?;
172-
rclrs::spin_once(Arc::clone(&node), None)?;
172+
executor.spin(rclrs::SpinOptions::spin_once())?;
173173

174174
Ok(())
175175
}

examples/minimal_client_service/src/minimal_client.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn main() -> Result<(), Error> {
6-
let context = rclrs::Context::new(env::args())?;
4+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
75

8-
let node = rclrs::create_node(&context, "minimal_client")?;
6+
let node = executor.create_node("minimal_client")?;
97

108
let client = node.create_client::<example_interfaces::srv::AddTwoInts>("add_two_ints")?;
119

@@ -30,5 +28,5 @@ fn main() -> Result<(), Error> {
3028
std::thread::sleep(std::time::Duration::from_millis(500));
3129

3230
println!("Waiting for response");
33-
rclrs::spin(node).map_err(|err| err.into())
31+
executor.spin(rclrs::SpinOptions::default()).map_err(|err| err.into())
3432
}

examples/minimal_client_service/src/minimal_client_async.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
#[tokio::main]
64
async fn main() -> Result<(), Error> {
7-
let context = rclrs::Context::new(env::args())?;
5+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
86

9-
let node = rclrs::create_node(&context, "minimal_client")?;
7+
let node = executor.create_node("minimal_client")?;
108

119
let client = node.create_client::<example_interfaces::srv::AddTwoInts>("add_two_ints")?;
1210

@@ -22,7 +20,7 @@ async fn main() -> Result<(), Error> {
2220

2321
println!("Waiting for response");
2422

25-
let rclrs_spin = tokio::task::spawn_blocking(move || rclrs::spin(node));
23+
let rclrs_spin = tokio::task::spawn_blocking(move || executor.spin(rclrs::SpinOptions::default()));
2624

2725
let response = future.await?;
2826
println!(

examples/minimal_client_service/src/minimal_service.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn handle_service(
@@ -13,13 +11,13 @@ fn handle_service(
1311
}
1412

1513
fn main() -> Result<(), Error> {
16-
let context = rclrs::Context::new(env::args())?;
14+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
1715

18-
let node = rclrs::create_node(&context, "minimal_service")?;
16+
let node = executor.create_node("minimal_service")?;
1917

2018
let _server = node
2119
.create_service::<example_interfaces::srv::AddTwoInts, _>("add_two_ints", handle_service)?;
2220

2321
println!("Starting server");
24-
rclrs::spin(node).map_err(|err| err.into())
22+
executor.spin(rclrs::SpinOptions::default()).map_err(|err| err.into())
2523
}

examples/minimal_pub_sub/src/minimal_publisher.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn main() -> Result<(), Error> {
6-
let context = rclrs::Context::new(env::args())?;
4+
let context = rclrs::Context::default_from_env()?;
5+
let executor = context.create_basic_executor();
76

8-
let node = rclrs::create_node(&context, "minimal_publisher")?;
7+
let node = executor.create_node("minimal_publisher")?;
98

109
let publisher =
1110
node.create_publisher::<std_msgs::msg::String>("topic", rclrs::QOS_PROFILE_DEFAULT)?;

examples/minimal_pub_sub/src/minimal_subscriber.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn main() -> Result<(), Error> {
6-
let context = rclrs::Context::new(env::args())?;
4+
let context = rclrs::Context::default_from_env()?;
5+
let mut executor = context.create_basic_executor();
76

8-
let node = rclrs::create_node(&context, "minimal_subscriber")?;
7+
let node = executor.create_node("minimal_subscriber")?;
98

109
let mut num_messages: usize = 0;
1110

@@ -19,5 +18,5 @@ fn main() -> Result<(), Error> {
1918
},
2019
)?;
2120

22-
rclrs::spin(node).map_err(|err| err.into())
21+
executor.spin(rclrs::SpinOptions::default()).map_err(|err| err.into())
2322
}

examples/minimal_pub_sub/src/minimal_two_nodes.rs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
1-
use std::{
2-
env,
3-
sync::{
4-
atomic::{AtomicU32, Ordering},
5-
Arc, Mutex,
6-
},
1+
use std::sync::{
2+
atomic::{AtomicU32, Ordering},
3+
Arc, Mutex,
74
};
85

96
use anyhow::{Error, Result};
107

118
struct MinimalSubscriber {
129
num_messages: AtomicU32,
13-
node: Arc<rclrs::Node>,
10+
node: rclrs::Node,
1411
subscription: Mutex<Option<Arc<rclrs::Subscription<std_msgs::msg::String>>>>,
1512
}
1613

1714
impl MinimalSubscriber {
18-
pub fn new(name: &str, topic: &str) -> Result<Arc<Self>, rclrs::RclrsError> {
19-
let context = rclrs::Context::new(env::args())?;
20-
let node = rclrs::create_node(&context, name)?;
15+
pub fn new(executor: &rclrs::Executor, name: &str, topic: &str) -> Result<Arc<Self>, rclrs::RclrsError> {
16+
let node = executor.create_node(name)?;
2117
let minimal_subscriber = Arc::new(MinimalSubscriber {
2218
num_messages: 0.into(),
2319
node,
@@ -50,11 +46,11 @@ impl MinimalSubscriber {
5046
}
5147

5248
fn main() -> Result<(), Error> {
53-
let publisher_context = rclrs::Context::new(env::args())?;
54-
let publisher_node = rclrs::create_node(&publisher_context, "minimal_publisher")?;
49+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
50+
let publisher_node = executor.create_node("minimal_publisher")?;
5551

56-
let subscriber_node_one = MinimalSubscriber::new("minimal_subscriber_one", "topic")?;
57-
let subscriber_node_two = MinimalSubscriber::new("minimal_subscriber_two", "topic")?;
52+
let _subscriber_node_one = MinimalSubscriber::new(&executor, "minimal_subscriber_one", "topic")?;
53+
let _subscriber_node_two = MinimalSubscriber::new(&executor, "minimal_subscriber_two", "topic")?;
5854

5955
let publisher = publisher_node
6056
.create_publisher::<std_msgs::msg::String>("topic", rclrs::QOS_PROFILE_DEFAULT)?;
@@ -71,11 +67,5 @@ fn main() -> Result<(), Error> {
7167
}
7268
});
7369

74-
let executor = rclrs::SingleThreadedExecutor::new();
75-
76-
executor.add_node(&publisher_node)?;
77-
executor.add_node(&subscriber_node_one.node)?;
78-
executor.add_node(&subscriber_node_two.node)?;
79-
80-
executor.spin().map_err(|err| err.into())
70+
executor.spin(rclrs::SpinOptions::default()).map_err(|err| err.into())
8171
}

examples/minimal_pub_sub/src/zero_copy_publisher.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn main() -> Result<(), Error> {
6-
let context = rclrs::Context::new(env::args())?;
4+
let context = rclrs::Context::default_from_env()?;
5+
let executor = context.create_basic_executor();
76

8-
let node = rclrs::create_node(&context, "minimal_publisher")?;
7+
let node = executor.create_node("minimal_publisher")?;
98

109
let publisher =
1110
node.create_publisher::<std_msgs::msg::rmw::UInt32>("topic", rclrs::QOS_PROFILE_DEFAULT)?;

examples/minimal_pub_sub/src/zero_copy_subscriber.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
use std::env;
2-
31
use anyhow::{Error, Result};
42

53
fn main() -> Result<(), Error> {
6-
let context = rclrs::Context::new(env::args())?;
4+
let mut executor = rclrs::Context::default_from_env()?.create_basic_executor();
75

8-
let node = rclrs::create_node(&context, "minimal_subscriber")?;
6+
let node = executor.create_node("minimal_subscriber")?;
97

108
let mut num_messages: usize = 0;
119

@@ -19,5 +17,5 @@ fn main() -> Result<(), Error> {
1917
},
2018
)?;
2119

22-
rclrs::spin(node).map_err(|err| err.into())
20+
executor.spin(rclrs::SpinOptions::default()).map_err(|err| err.into())
2321
}
Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1-
use rclrs::{create_node, Context, Node, Publisher, RclrsError, QOS_PROFILE_DEFAULT};
1+
use rclrs::{Context, Executor, Publisher, RclrsError, SpinOptions, QOS_PROFILE_DEFAULT};
22
use std::{sync::Arc, thread, time::Duration};
33
use std_msgs::msg::String as StringMsg;
4-
struct SimplePublisherNode {
5-
node: Arc<Node>,
6-
_publisher: Arc<Publisher<StringMsg>>,
4+
5+
struct SimplePublisher {
6+
publisher: Arc<Publisher<StringMsg>>,
77
}
8-
impl SimplePublisherNode {
9-
fn new(context: &Context) -> Result<Self, RclrsError> {
10-
let node = create_node(context, "simple_publisher").unwrap();
11-
let _publisher = node
8+
9+
impl SimplePublisher {
10+
fn new(executor: &Executor) -> Result<Self, RclrsError> {
11+
let node = executor.create_node("simple_publisher").unwrap();
12+
let publisher = node
1213
.create_publisher("publish_hello", QOS_PROFILE_DEFAULT)
1314
.unwrap();
14-
Ok(Self { node, _publisher })
15+
Ok(Self { publisher })
1516
}
1617

1718
fn publish_data(&self, increment: i32) -> Result<i32, RclrsError> {
1819
let msg: StringMsg = StringMsg {
1920
data: format!("Hello World {}", increment),
2021
};
21-
self._publisher.publish(msg).unwrap();
22+
self.publisher.publish(msg).unwrap();
2223
Ok(increment + 1_i32)
2324
}
2425
}
2526

2627
fn main() -> Result<(), RclrsError> {
27-
let context = Context::new(std::env::args()).unwrap();
28-
let publisher = Arc::new(SimplePublisherNode::new(&context).unwrap());
28+
let mut executor = Context::default_from_env().unwrap().create_basic_executor();
29+
let publisher = Arc::new(SimplePublisher::new(&executor).unwrap());
2930
let publisher_other_thread = Arc::clone(&publisher);
3031
let mut count: i32 = 0;
3132
thread::spawn(move || loop {
3233
thread::sleep(Duration::from_millis(1000));
3334
count = publisher_other_thread.publish_data(count).unwrap();
3435
});
35-
rclrs::spin(publisher.node.clone())
36+
executor.spin(SpinOptions::default())
3637
}

examples/rust_pubsub/src/simple_subscriber.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
use rclrs::{create_node, Context, Node, RclrsError, Subscription, QOS_PROFILE_DEFAULT};
1+
use rclrs::{Context, Executor, RclrsError, SpinOptions, Subscription, QOS_PROFILE_DEFAULT};
22
use std::{
3-
env,
43
sync::{Arc, Mutex},
54
thread,
65
time::Duration,
76
};
87
use std_msgs::msg::String as StringMsg;
8+
99
pub struct SimpleSubscriptionNode {
10-
node: Arc<Node>,
1110
_subscriber: Arc<Subscription<StringMsg>>,
1211
data: Arc<Mutex<Option<StringMsg>>>,
1312
}
13+
1414
impl SimpleSubscriptionNode {
15-
fn new(context: &Context) -> Result<Self, RclrsError> {
16-
let node = create_node(context, "simple_subscription").unwrap();
15+
fn new(executor: &Executor) -> Result<Self, RclrsError> {
16+
let node = executor.create_node("simple_subscription").unwrap();
1717
let data: Arc<Mutex<Option<StringMsg>>> = Arc::new(Mutex::new(None));
1818
let data_mut: Arc<Mutex<Option<StringMsg>>> = Arc::clone(&data);
1919
let _subscriber = node
@@ -26,7 +26,6 @@ impl SimpleSubscriptionNode {
2626
)
2727
.unwrap();
2828
Ok(Self {
29-
node,
3029
_subscriber,
3130
data,
3231
})
@@ -41,12 +40,12 @@ impl SimpleSubscriptionNode {
4140
}
4241
}
4342
fn main() -> Result<(), RclrsError> {
44-
let context = Context::new(env::args()).unwrap();
45-
let subscription = Arc::new(SimpleSubscriptionNode::new(&context).unwrap());
43+
let mut executor = Context::default_from_env().unwrap().create_basic_executor();
44+
let subscription = Arc::new(SimpleSubscriptionNode::new(&executor).unwrap());
4645
let subscription_other_thread = Arc::clone(&subscription);
4746
thread::spawn(move || loop {
4847
thread::sleep(Duration::from_millis(1000));
4948
subscription_other_thread.data_callback().unwrap()
5049
});
51-
rclrs::spin(subscription.node.clone())
50+
executor.spin(SpinOptions::default())
5251
}

0 commit comments

Comments
 (0)