From fa0539d80549cbb351e99d7c0689055ed35658a0 Mon Sep 17 00:00:00 2001 From: haixuanTao Date: Mon, 4 Nov 2024 09:27:50 +0100 Subject: [PATCH] initial commit --- .../dora_ros2_jointstate/main.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 node-hub/dora-ros2-jointstate/dora_ros2_jointstate/main.py diff --git a/node-hub/dora-ros2-jointstate/dora_ros2_jointstate/main.py b/node-hub/dora-ros2-jointstate/dora_ros2_jointstate/main.py new file mode 100644 index 00000000..e1acdfd4 --- /dev/null +++ b/node-hub/dora-ros2-jointstate/dora_ros2_jointstate/main.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import dora +from dora import Node + +ros2_context = dora.Ros2Context() +ros2_node = ros2_context.new_node( + "dora", # name + "/piper", # namespace + dora.Ros2NodeOptions(rosout=True), +) + +# Define a ROS2 QOS +topic_qos = dora.Ros2QosPolicies(reliable=True, max_blocking_time=0.1) + +# Create a listener to pose topic +turtle_pose_topic = ros2_node.create_topic( + "/puppet/joint_left", "sensor_msgs/JointState", topic_qos +) +pose_reader = ros2_node.create_subscription(turtle_pose_topic) + +# Create a dora node +dora_node = Node() + +# Listen for both stream on the same loop as Python does not handle well multiprocessing +dora_node.merge_external_events(pose_reader) + +while True: + event = dora_node.next() + if event is None: + break + match event["kind"]: + + # In this case ROS2 event + case "external": + pose = event["value"][0].as_py() + dora_node.send_output("/puppet/joint_left", event["value"])