forked from eclipse-zenoh/zenoh-plugin-ros2dds
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtalker.py
More file actions
63 lines (54 loc) · 1.81 KB
/
Copy pathtalker.py
File metadata and controls
63 lines (54 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#
# Copyright (c) 2024 ZettaScale Technology
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# ZettaScale Zenoh Team, <zenoh@zettascale.tech>
#
import time
import argparse
import zenoh
# pycdr2 is the serializer of data in CDR format (required by ROS2)
from pycdr2 import IdlStruct
from dataclasses import dataclass
# Equivalent to std_msgs.msg.String class, but serializable by pycdr2
@dataclass
class String(IdlStruct, typename="String"):
data: str
def main():
parser = argparse.ArgumentParser(
prog='talker',
description='Zenoh/ROS2 talker example')
parser.add_argument('--config', '-c', dest='config',
metavar='FILE',
type=str,
help='A configuration file.')
args = parser.parse_args()
# Create Zenoh Config from file if provoded, or a default one otherwise
conf = zenoh.Config.from_file(args.config) if args.config is not None else zenoh.Config()
# Open Zenoh Session
session = zenoh.open(conf)
# Declare a publisher (optional but allows Zenoh to perform some optimizations)
pub = session.declare_publisher('chatter')
try:
i = 0
while True:
i += 1
msg = String(data='Hello World: {0}'.format(i))
print('Publishing: "{0}"'.format(msg.data))
# Publish the serialized message
pub.put(msg.serialize())
time.sleep(1)
except (KeyboardInterrupt):
pass
finally:
pub.undeclare()
session.close()
if __name__ == '__main__':
main()