Skip to content

Commit 1b00ac3

Browse files
authored
Add service example (#12)
* Add two ints example * Updates
1 parent 5913f87 commit 1b00ac3

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include <micro_ros_arduino.h>
2+
#include <example_interfaces/srv/add_two_ints.h>
3+
#include <stdio.h>
4+
#include <rcl/error_handling.h>
5+
#include <rclc/rclc.h>
6+
#include <rclc/executor.h>
7+
#include <std_msgs/msg/int64.h>
8+
9+
rcl_init_options_t options;
10+
rcl_node_options_t node_ops;
11+
rcl_node_t node;
12+
rclc_support_t support;
13+
rcl_allocator_t allocator;
14+
rclc_executor_t executor;
15+
16+
rcl_service_options_t service_options;
17+
rcl_service_t serv;
18+
const rosidl_service_type_support_t * service_type_support;
19+
rcl_wait_set_t wait_set;
20+
rmw_request_id_t req_id;
21+
example_interfaces__srv__AddTwoInts_Response res;
22+
example_interfaces__srv__AddTwoInts_Request req;
23+
24+
const char * service_name = "/add_two_ints";
25+
26+
void setup() {
27+
delay(1000);
28+
29+
allocator = rcl_get_default_allocator();
30+
31+
options = rcl_get_zero_initialized_init_options();
32+
rcl_init_options_init(&options, rcl_get_default_allocator());
33+
34+
rclc_support_init(&support, 0, NULL, &allocator);
35+
36+
node_ops = rcl_node_get_default_options();
37+
node = rcl_get_zero_initialized_node();
38+
rclc_node_init_default(&node, "micro_ros_service_server_node", "", &support);
39+
40+
// init server
41+
service_options = rcl_service_get_default_options();
42+
serv = rcl_get_zero_initialized_service();
43+
service_type_support = ROSIDL_GET_SRV_TYPE_SUPPORT(example_interfaces, srv, AddTwoInts);
44+
rcl_service_init(&serv, &node, service_type_support, service_name, &service_options);
45+
wait_set = rcl_get_zero_initialized_wait_set();
46+
rcl_wait_set_init(&wait_set, 0, 0, 0, 1, 1, 0, &support.context, rcl_get_default_allocator());
47+
48+
executor = rclc_executor_get_zero_initialized_executor();
49+
rclc_executor_init(&executor, &support.context, 1, &allocator);
50+
}
51+
52+
53+
void loop() {
54+
delay(100);
55+
rcl_wait_set_clear(&wait_set);
56+
57+
size_t index;
58+
rcl_wait_set_add_service(&wait_set, &serv, &index);
59+
60+
rcl_wait(&wait_set, RCL_MS_TO_NS(100));
61+
for (size_t i = 0; i < wait_set.size_of_services; i++) {
62+
if (wait_set.services[i]) {
63+
example_interfaces__srv__AddTwoInts_Request__init(&req);
64+
65+
rcl_take_request(&serv, &req_id, &req);
66+
67+
example_interfaces__srv__AddTwoInts_Response__init(&res);
68+
69+
res.sum = req.a + req.b;
70+
rcl_send_response(&serv, &req_id, &res);
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)