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.

interpolate_replay_to_lcr.py 2.4 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. """TODO: Add docstring."""
  2. import argparse
  3. import json
  4. import os
  5. from dora import Node
  6. from pwm_position_control.load import load_control_table_from_json_conversion_tables
  7. from pwm_position_control.transform import logical_to_pwm_with_offset_arrow
  8. def main():
  9. """TODO: Add docstring."""
  10. parser = argparse.ArgumentParser(
  11. description="Interpolation LCR Node: This Dora node is used to calculates appropriate goal positions for the "
  12. "LCR followers knowing a Leader position and Follower position.",
  13. )
  14. parser.add_argument(
  15. "--name",
  16. type=str,
  17. required=False,
  18. help="The name of the node in the dataflow.",
  19. default="replay-to-lcr",
  20. )
  21. parser.add_argument(
  22. "--follower-control",
  23. type=str,
  24. help="The configuration file for controlling the follower.",
  25. default=None,
  26. )
  27. args = parser.parse_args()
  28. if not os.environ.get("FOLLOWER_CONTROL") and args.follower_control is None:
  29. raise ValueError(
  30. "The follower control is not set. Please set the configuration of the follower in the environment "
  31. "variables or as an argument.",
  32. )
  33. with open(
  34. os.environ.get("FOLLOWER_CONTROL")
  35. if args.follower_control is None
  36. else args.follower_control,
  37. ) as file:
  38. follower_control = json.load(file)
  39. load_control_table_from_json_conversion_tables(
  40. follower_control, follower_control,
  41. )
  42. node = Node(args.name)
  43. follower_initialized = False
  44. follower_position = None
  45. for event in node:
  46. event_type = event["type"]
  47. if event_type == "INPUT":
  48. event_id = event["id"]
  49. if event_id == "leader_position":
  50. leader_position = event["value"]
  51. if not follower_initialized:
  52. continue
  53. physical_goal = logical_to_pwm_with_offset_arrow(
  54. follower_position, leader_position, follower_control,
  55. )
  56. node.send_output("follower_goal", physical_goal, event["metadata"])
  57. elif event_id == "follower_position":
  58. follower_position = event["value"]
  59. follower_initialized = True
  60. elif event_type == "ERROR":
  61. print("[replay-to-lcr] error: ", event["error"])
  62. break
  63. if __name__ == "__main__":
  64. main()