hw_bridge.py
Go to the documentation of this file.
1 #!/usr/bin/env python2
2 from hw_controller import *
3 import rospy
4 import argparse
5 import std_msgs.msg
6 import jason_msgs.msg
7 import signal
8 
9 def arg_parser():
10  parser = argparse.ArgumentParser(description="HardwareBridge node")
11 
12  parser.add_argument("-a","--action", help="Action manifest path", nargs=1, type=str)
13  parser.add_argument("-p","--perception", help="Perception manifest path", nargs=1, type=str)
14  parser.add_argument("-r","--param", help="Rosparam .yaml", nargs=1, type=str)
15 
16  args, unknown = parser.parse_known_args()
17  return vars(args)
18 
19 def act(msg, args):
20  action_controller = args[0]
21  pub = args[1]
22 
23  action_status = jason_msgs.msg.ActionStatus()
24  action_status.id = msg.header.seq
25 
26  action_status.result = action_controller.perform_action(msg.action_name, msg.parameters)
27 
28  pub.publish(action_status)
29 
30 
31 def main():
32  print("Starting HwBridge node.")
33  rospy.init_node('HwBridge')
34 
35  args = arg_parser()
36  if args["param"] != None:
37  import yaml
38  import rosparam
39  with open(args["param"][0], 'r') as stream:
40  try:
41  yaml_file = yaml.safe_load(stream)
42  rosparam.upload_params("/", yaml_file)
43  except yaml.YAMLError as exc:
44  print(exc)
45 
46  action_controller = ActionController()
47  if args["action"] != None:
48  action_controller.read_manifest(args["action"][0])
49  else:
50  action_controller.read_manifest()
51 
52  node_namespace = rospy.get_namespace()
53  jason_actions_status_pub = rospy.Publisher(
54  node_namespace+ 'jason/actions_status',
55  jason_msgs.msg.ActionStatus,
56  queue_size=1,
57  latch=False)
58 
59  jason_action_sub = rospy.Subscriber(
60  node_namespace + 'jason/actions',
61  jason_msgs.msg.Action,
62  act, (action_controller,jason_actions_status_pub))
63 
64 
65  perception_controller = PerceptionController()
66  if args["perception"] != None:
67  perception_controller.read_manifest(args["perception"][0])
68  else:
69  perception_controller.read_manifest()
70 
71  perception_controller.start_perceiving()
72 
73  jason_percepts_pub = rospy.Publisher(
74  node_namespace + 'jason/percepts',
75  jason_msgs.msg.Perception,
76  queue_size=(2*perception_controller.comm_len),
77  latch=False)
78 
79  signal.signal(signal.SIGINT, signal.SIG_DFL)
80  rate = rospy.Rate(perception_controller.rate)
81  while not rospy.is_shutdown():
82  perception_controller.p_lock.acquire()
83  for p in perception_controller.perceptions.items():
84  if p[1] != None:
85  jason_percepts_pub.publish(p[1])
86  perception_controller.perceptions[p[0]] = None
87  perception_controller.p_lock.release()
88  perception_controller.p_event.wait()
89  perception_controller.p_event.clear()
90  rate.sleep()
91  rospy.spin()
92 
93 if __name__ == '__main__':
94  main()
def act(msg, args)
Definition: hw_bridge.py:19
def main()
Definition: hw_bridge.py:31
def arg_parser()
Definition: hw_bridge.py:9


jason_hw_bridge
Author(s): Gustavo R. Silva , Leandro B. Becker , Jomi F. Hubner
autogenerated on Tue Apr 14 2020 03:41:10