You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

random_turtle.py 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import time
  4. import random
  5. import dora
  6. from dora import Node
  7. import pyarrow as pa
  8. CHECK_TICK = 50
  9. ros2_context = dora.experimental.ros2_bridge.Ros2Context()
  10. ros2_node = ros2_context.new_node(
  11. "turtle_teleop",
  12. "/ros2_demo",
  13. dora.experimental.ros2_bridge.Ros2NodeOptions(rosout=True),
  14. )
  15. topic_qos = dora.experimental.ros2_bridge.Ros2QosPolicies(
  16. reliable=True, max_blocking_time=0.1
  17. )
  18. turtle_twist_topic = ros2_node.create_topic(
  19. "/turtle1/cmd_vel", "geometry_msgs::Twist", topic_qos
  20. )
  21. twist_writer = ros2_node.create_publisher(turtle_twist_topic)
  22. turtle_pose_topic = ros2_node.create_topic(
  23. "/turtle1/pose", "turtlesim::Pose", topic_qos
  24. )
  25. pose_reader = ros2_node.create_subscription(turtle_pose_topic)
  26. dora_node = Node()
  27. dora_node.merge_external_events(pose_reader)
  28. print("looping", flush=True)
  29. for i in range(500):
  30. event = dora_node.next()
  31. if event is None:
  32. break
  33. match event["kind"]:
  34. case "dora":
  35. match event["type"]:
  36. case "INPUT":
  37. match event["id"]:
  38. case "direction":
  39. twist_writer.publish(event["value"])
  40. case "external":
  41. pose = event.inner()[0].as_py()
  42. if i == CHECK_TICK:
  43. assert (
  44. pose["x"] != 5.544444561004639
  45. ), "turtle should not be at initial x axis"
  46. dora_node.send_output("turtle_pose", event.inner())

DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed datafl