[docs]defexecute_test_case(self,test_case:database.TestCase):rospy.loginfo(f'[ParameterStudyWorker] Spawning SLAM debug for "{self.parameter_study_name}" study with {test_case.index} test_case')uuid=roslaunch.rlutil.get_or_generate_uuid(None,False)roslaunch.configure_logging(uuid)rospack=rospkg.RosPack()cli_args=[f"{rospack.get_path('slam')}/launch/slam_debug.launch",'input_rosbag:=/workspace/as_ros/rosbags/run_373_migrated.bag',f'slam_config:=../param_study/{self.parameter_study_name}/configs/test_case_{test_case.index}.yaml',f'output_rosbag:=/workspace/as_ros/src/slam/param_study/{self.parameter_study_name}/{test_case.index}/']self.test_case_process=roslaunch.parent.ROSLaunchParent(uuid,[(roslaunch.rlutil.resolve_launch_arguments(cli_args)[0],cli_args[1:])])self.test_case_process.start()
[docs]defwait_for_test_case_to_finish(self):rospy.loginfo(f'[ParameterStudyWorker] Waiting for test case to finish')whileself.killer.kill_nowisFalseandself.test_case_process.pm.is_alive()isTrue:time.sleep(0.1)rospy.loginfo(f'[ParameterStudyWorker] Test case finished. Next....')
[docs]defrun_next_test_case(self)->bool:test_case=database.TestCase.find_next_unstarted_for_study(session=self.session,parameter_study_name=self.parameter_study_name)iftest_caseisNone:returnFalsetest_case.started=Trueself.session.commit()self.execute_test_case(test_case=test_case)self.wait_for_test_case_to_finish()rospy.loginfo(f'[ParameterStudyWorker] Marking test case {test_case.index} as finished.')test_case.finished=Trueself.session.commit()returnTrue