Skip to content

Commit 59e1080

Browse files
committed
Added support for clients and services (#146)
* Added support for clients and services
1 parent 0600696 commit 59e1080

File tree

6 files changed

+141
-2
lines changed

6 files changed

+141
-2
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
[package]
2+
name = "examples_rclrs_minimal_client_service"
3+
version = "0.2.0"
4+
authors = ["Esteve Fernandez <esteve@apache.org>"]
5+
edition = "2021"
6+
7+
[[bin]]
8+
name = "minimal_client"
9+
path = "src/minimal_client.rs"
10+
11+
[[bin]]
12+
name = "minimal_client_async"
13+
path = "src/minimal_client_async.rs"
14+
15+
[[bin]]
16+
name = "minimal_service"
17+
path = "src/minimal_service.rs"
18+
19+
[dependencies]
20+
anyhow = {version = "1", features = ["backtrace"]}
21+
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread", "time"] }
22+
23+
[dependencies.rclrs]
24+
version = "*"
25+
26+
[dependencies.rosidl_runtime_rs]
27+
version = "*"
28+
29+
[dependencies.example_interfaces]
30+
version = "*"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<?xml-model
3+
href="http://download.ros.org/schema/package_format3.xsd"
4+
schematypens="http://www.w3.org/2001/XMLSchema"?>
5+
<package format="3">
6+
<name>examples_rclrs_minimal_client_service</name>
7+
<version>0.2.0</version>
8+
<description>Package containing an example of the client-service mechanism in rclrs.</description>
9+
<maintainer email="esteve@apache.org">Esteve Fernandez</maintainer>
10+
<license>Apache License 2.0</license>
11+
12+
<build_depend>example_interfaces</build_depend>
13+
<build_depend>rclrs</build_depend>
14+
<build_depend>rosidl_runtime_rs</build_depend>
15+
16+
<exec_depend>example_interfaces</exec_depend>
17+
<exec_depend>rclrs</exec_depend>
18+
<exec_depend>rosidl_runtime_rs</exec_depend>
19+
20+
<export>
21+
<build_type>ament_cargo</build_type>
22+
</export>
23+
</package>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use anyhow::{Error, Result};
2+
use std::env;
3+
4+
fn main() -> Result<(), Error> {
5+
let context = rclrs::Context::new(env::args())?;
6+
7+
let mut node = context.create_node("minimal_client")?;
8+
9+
let client = node.create_client::<example_interfaces::srv::AddTwoInts>("add_two_ints")?;
10+
11+
let request = example_interfaces::srv::AddTwoInts_Request { a: 41, b: 1 };
12+
13+
println!("Starting client");
14+
15+
std::thread::sleep(std::time::Duration::from_millis(500));
16+
17+
client.async_send_request_with_callback(
18+
&request,
19+
move |response: example_interfaces::srv::AddTwoInts_Response| {
20+
println!(
21+
"Result of {} + {} is: {}",
22+
request.a, request.b, response.sum
23+
);
24+
},
25+
)?;
26+
27+
std::thread::sleep(std::time::Duration::from_millis(500));
28+
29+
println!("Waiting for response");
30+
rclrs::spin(&node).map_err(|err| err.into())
31+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use anyhow::{Error, Result};
2+
use std::env;
3+
4+
#[tokio::main]
5+
async fn main() -> Result<(), Error> {
6+
let context = rclrs::Context::new(env::args())?;
7+
8+
let mut node = context.create_node("minimal_client")?;
9+
10+
let client = node.create_client::<example_interfaces::srv::AddTwoInts>("add_two_ints")?;
11+
12+
println!("Starting client");
13+
14+
std::thread::sleep(std::time::Duration::from_millis(500));
15+
16+
let request = example_interfaces::srv::AddTwoInts_Request { a: 41, b: 1 };
17+
18+
let future = client.call_async(&request);
19+
20+
println!("Waiting for response");
21+
22+
let rclrs_spin = tokio::task::spawn_blocking(move || rclrs::spin(&node));
23+
24+
let response = future.await?;
25+
println!(
26+
"Result of {} + {} is: {}",
27+
request.a, request.b, response.sum
28+
);
29+
30+
rclrs_spin.await.ok();
31+
Ok(())
32+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use anyhow::{Error, Result};
2+
use std::env;
3+
4+
fn handle_service(
5+
_request_header: &rclrs::rmw_request_id_t,
6+
request: example_interfaces::srv::AddTwoInts_Request,
7+
) -> example_interfaces::srv::AddTwoInts_Response {
8+
println!("request: {} + {}", request.a, request.b);
9+
example_interfaces::srv::AddTwoInts_Response {
10+
sum: request.a + request.b,
11+
}
12+
}
13+
14+
fn main() -> Result<(), Error> {
15+
let context = rclrs::Context::new(env::args())?;
16+
17+
let mut node = context.create_node("minimal_service")?;
18+
19+
let _server = node
20+
.create_service::<example_interfaces::srv::AddTwoInts, _>("add_two_ints", handle_service)?;
21+
22+
println!("Starting server");
23+
rclrs::spin(&node).map_err(|err| err.into())
24+
}

rclrs/minimal_pub_sub/src/minimal_subscriber.rs

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

54
fn main() -> Result<(), Error> {
65
let context = rclrs::Context::new(env::args())?;

0 commit comments

Comments
 (0)