1
- use std:: {
2
- env,
3
- sync:: {
4
- atomic:: { AtomicU32 , Ordering } ,
5
- Arc , Mutex ,
6
- } ,
1
+ use rclrs:: * ;
2
+ use std:: sync:: {
3
+ atomic:: { AtomicU32 , Ordering } ,
4
+ Arc , Mutex ,
7
5
} ;
8
6
9
7
use anyhow:: { Error , Result } ;
10
8
11
9
struct MinimalSubscriber {
12
10
num_messages : AtomicU32 ,
13
- node : Arc < rclrs :: Node > ,
14
- subscription : Mutex < Option < Arc < rclrs :: Subscription < std_msgs:: msg:: String > > > > ,
11
+ node : Arc < Node > ,
12
+ subscription : Mutex < Option < Arc < Subscription < std_msgs:: msg:: String > > > > ,
15
13
}
16
14
17
15
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) ?;
16
+ pub fn new ( executor : & Executor , name : & str , topic : & str ) -> Result < Arc < Self > , RclrsError > {
17
+ let node = executor. create_node ( name) ?;
21
18
let minimal_subscriber = Arc :: new ( MinimalSubscriber {
22
19
num_messages : 0 . into ( ) ,
23
20
node,
@@ -29,7 +26,7 @@ impl MinimalSubscriber {
29
26
. node
30
27
. create_subscription :: < std_msgs:: msg:: String , _ > (
31
28
topic,
32
- rclrs :: QOS_PROFILE_DEFAULT ,
29
+ QOS_PROFILE_DEFAULT ,
33
30
move |msg : std_msgs:: msg:: String | {
34
31
minimal_subscriber_aux. callback ( msg) ;
35
32
} ,
@@ -50,16 +47,18 @@ impl MinimalSubscriber {
50
47
}
51
48
52
49
fn main ( ) -> Result < ( ) , Error > {
53
- let publisher_context = rclrs :: Context :: new ( env :: args ( ) ) ? ;
54
- let publisher_node = rclrs :: create_node ( & publisher_context , "minimal_publisher" ) ?;
50
+ let mut executor = Context :: default_from_env ( ) ? . create_basic_executor ( ) ;
51
+ let publisher_node = executor . create_node ( "minimal_publisher" ) ?;
55
52
56
- let subscriber_node_one = MinimalSubscriber :: new ( "minimal_subscriber_one" , "topic" ) ?;
57
- let subscriber_node_two = MinimalSubscriber :: new ( "minimal_subscriber_two" , "topic" ) ?;
53
+ let _subscriber_node_one =
54
+ MinimalSubscriber :: new ( & executor, "minimal_subscriber_one" , "topic" ) ?;
55
+ let _subscriber_node_two =
56
+ MinimalSubscriber :: new ( & executor, "minimal_subscriber_two" , "topic" ) ?;
58
57
59
- let publisher = publisher_node
60
- . create_publisher :: < std_msgs:: msg:: String > ( "topic" , rclrs :: QOS_PROFILE_DEFAULT ) ?;
58
+ let publisher =
59
+ publisher_node . create_publisher :: < std_msgs:: msg:: String > ( "topic" , QOS_PROFILE_DEFAULT ) ?;
61
60
62
- std:: thread:: spawn ( move || -> Result < ( ) , rclrs :: RclrsError > {
61
+ std:: thread:: spawn ( move || -> Result < ( ) , RclrsError > {
63
62
let mut message = std_msgs:: msg:: String :: default ( ) ;
64
63
let mut publish_count: u32 = 1 ;
65
64
loop {
@@ -71,11 +70,8 @@ fn main() -> Result<(), Error> {
71
70
}
72
71
} ) ;
73
72
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 ( ) )
73
+ executor
74
+ . spin ( SpinOptions :: default ( ) )
75
+ . first_error ( )
76
+ . map_err ( |err| err. into ( ) )
81
77
}
0 commit comments