@@ -48,7 +48,7 @@ def main():
4848 parser .add_argument (
4949 '--wait-time' , '-t' , type = float , default = 5.0 ,
5050 help = 'Listen to the /tf topic for this many seconds before rendering the frame tree' )
51- parser .add_argument ('-o' ,'--output' , help = 'Output filename' )
51+ parser .add_argument ('-o' , '--output' , help = 'Output filename' )
5252 parsed_args = parser .parse_args (args = args_without_ros [1 :])
5353
5454 node = rclpy .create_node ('view_frames' )
@@ -60,7 +60,8 @@ def main():
6060 executor .add_node (node )
6161
6262 # listen to tf for 5 seconds
63- node .get_logger ().info (f'Listening to tf data for { parsed_args .wait_time } seconds...' )
63+ node .get_logger ().info (
64+ f'Listening to tf data for { parsed_args .wait_time } seconds...' )
6465 start_time = time .time ()
6566 while (time .time () - start_time ) < parsed_args .wait_time :
6667 rclpy .spin_once (node , timeout_sec = 0.1 )
@@ -73,7 +74,7 @@ def main():
7374 node .get_logger ().info ('service not available, waiting again...' )
7475
7576 future = cli .call_async (req )
76- rclpy .spin_until_future_complete (node , future )
77+ rclpy .spin_until_complete (node , future )
7778
7879 ret = 1
7980 try :
@@ -83,20 +84,21 @@ def main():
8384 node .get_logger ().error ('Service call failed %r' % (e ,))
8485 else :
8586 node .get_logger ().info (
86- 'Result:' + str (result ) )
87+ 'Result:' + str (result ))
8788 data = yaml .safe_load (result .frame_yaml )
88-
89+
8990 if parsed_args .output is not None :
9091 frames_gv = '{:s}.gv' .format (parsed_args .output )
9192 frames_pdf = '{:s}.pdf' .format (parsed_args .output )
9293 else :
9394 datetime = time .strftime ('%Y-%m-%d_%H.%M.%S' )
9495 frames_gv = 'frames_{:s}.gv' .format (datetime )
9596 frames_pdf = 'frames_{:s}.pdf' .format (datetime )
96-
97+
9798 with open (frames_gv , 'w' ) as f :
98- f .write (generate_dot (data , node .get_clock ().now ().seconds_nanoseconds ()))
99-
99+ f .write (generate_dot (
100+ data , node .get_clock ().now ().seconds_nanoseconds ()))
101+
100102 cmd = ['dot' , '-Tpdf' , frames_gv , '-o' , frames_pdf ]
101103 subprocess .Popen (cmd ).communicate ()
102104 finally :
@@ -105,6 +107,7 @@ def main():
105107 rclpy .shutdown ()
106108 return ret
107109
110+
108111def generate_dot (data , recorded_time ):
109112 if len (data ) == 0 :
110113 return 'digraph G { "No tf data received" }'
@@ -117,14 +120,16 @@ def generate_dot(data, recorded_time):
117120 dot += 'Broadcaster: ' + map ['broadcaster' ]+ '\\ n'
118121 dot += 'Average rate: ' + str (map ['rate' ])+ '\\ n'
119122 dot += 'Buffer length: ' + str (map ['buffer_length' ])+ '\\ n'
120- dot += 'Most recent transform: ' + str (map ['most_recent_transform' ])+ '\\ n'
123+ dot += 'Most recent transform: ' + \
124+ str (map ['most_recent_transform' ])+ '\\ n'
121125 dot += 'Oldest transform: ' + str (map ['oldest_transform' ])+ '\\ n'
122126 dot += '"];\n '
123127 if not map ['parent' ] in data :
124128 root = map ['parent' ]
125129 dot += 'edge [style=invis];\n '
126130 dot += ' subgraph cluster_legend { style=bold; color=black; label ="view_frames Result";\n '
127- dot += '"Recorded at time: ' + str (recorded_time [0 ]+ recorded_time [1 ]/ 1e9 )+ '"[ shape=plaintext ] ;\n '
131+ dot += '"Recorded at time: ' + \
132+ str (recorded_time [0 ]+ recorded_time [1 ]/ 1e9 )+ '"[ shape=plaintext ] ;\n '
128133 dot += '}->"' + root + '";\n }'
129134 return dot
130135
0 commit comments