5555 Load ,
5656)
5757from ur_msgs .msg import IOStates
58+ from controller_manager_msgs .srv import ListControllers
5859
5960
6061ROBOT_IP = "192.168.56.101"
@@ -156,27 +157,28 @@ def init_robot(self):
156157
157158 # Connect to all other expected services
158159 dashboard_interfaces = {
159- "power_off" : Trigger ,
160- "brake_release" : Trigger ,
161- "unlock_protective_stop" : Trigger ,
162- "restart_safety" : Trigger ,
163- "get_robot_mode" : GetRobotMode ,
164- "load_installation" : Load ,
165- "load_program" : Load ,
166- "close_popup" : Trigger ,
167- "get_loaded_program" : GetLoadedProgram ,
168- "program_state" : GetProgramState ,
169- "program_running" : IsProgramRunning ,
170- "play" : Trigger ,
171- "stop" : Trigger ,
160+ "/dashboard_client/power_off" : Trigger ,
161+ "/dashboard_client/brake_release" : Trigger ,
162+ "/dashboard_client/unlock_protective_stop" : Trigger ,
163+ "/dashboard_client/restart_safety" : Trigger ,
164+ "/dashboard_client/get_robot_mode" : GetRobotMode ,
165+ "/dashboard_client/load_installation" : Load ,
166+ "/dashboard_client/load_program" : Load ,
167+ "/dashboard_client/close_popup" : Trigger ,
168+ "/dashboard_client/get_loaded_program" : GetLoadedProgram ,
169+ "/dashboard_client/program_state" : GetProgramState ,
170+ "/dashboard_client/program_running" : IsProgramRunning ,
171+ "/dashboard_client/play" : Trigger ,
172+ "/dashboard_client/stop" : Trigger ,
173+ "/controller_manager/list_controllers" : ListControllers ,
172174 }
173- self .dashboard_clients = {
174- srv_name : waitForService (self .node , f"/dashboard_client/ { srv_name } " , srv_type )
175+ self .service_clients = {
176+ srv_name : waitForService (self .node , f"{ srv_name } " , srv_type )
175177 for (srv_name , srv_type ) in dashboard_interfaces .items ()
176178 }
177179
178180 # Add first client to dict
179- self .dashboard_clients [ " power_on" ] = power_on_client
181+ self .service_clients [ "/dashboard_client/ power_on" ] = power_on_client
180182
181183 self .urscript_pub = self .node .create_publisher (
182184 StringMsg , "/urscript_interface/script_command" , 1
@@ -185,8 +187,19 @@ def init_robot(self):
185187 def setUp (self ):
186188 # Start robot
187189 empty_req = Trigger .Request ()
188- self .dashboard_call ("power_on" , empty_req )
189- self .dashboard_call ("brake_release" , empty_req )
190+ self .call_service ("/dashboard_client/power_on" , empty_req )
191+ self .call_service ("/dashboard_client/brake_release" , empty_req )
192+
193+ io_controller_running = False
194+
195+ while not io_controller_running :
196+ time .sleep (1 )
197+ response = self .call_service (
198+ "/controller_manager/list_controllers" , ListControllers .Request ()
199+ )
200+ for controller in response .controller :
201+ if controller .name == "io_and_status_controller" :
202+ io_controller_running = controller .state == "active"
190203
191204 def test_set_io (self ):
192205 """Test setting an IO using a direct program call."""
@@ -242,11 +255,12 @@ def check_pin_states(self, pins, states):
242255 if self .io_msg is not None :
243256 for i , pin_id in enumerate (pins ):
244257 pin_states [i ] = self .io_msg .digital_out_states [pin_id ].state
258+ self .assertIsNotNone (self .io_msg , "Did not receive an IO state in requested time." )
245259 self .assertEqual (pin_states , states )
246260
247- def dashboard_call (self , srv_name , request ):
261+ def call_service (self , srv_name , request ):
248262 self .node .get_logger ().info (f"Calling service '{ srv_name } ' with request { request } " )
249- future = self .dashboard_clients [srv_name ].call_async (request )
263+ future = self .service_clients [srv_name ].call_async (request )
250264 rclpy .spin_until_future_complete (self .node , future )
251265 if future .result () is not None :
252266 self .node .get_logger ().info (f"Received result { future .result ()} " )
0 commit comments