diff --git a/http_server.py b/http_server.py index f5a7878..cf7ec4d 100644 --- a/http_server.py +++ b/http_server.py @@ -95,7 +95,7 @@ class GazeboSimHttpServer(HttpRPCServer): # 启动roscore self.roscore_proc = subprocess.Popen( ['roscore'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - time.sleep(2) + time.sleep(5) rospy.init_node('gazebo_world_manager', anonymous=True) # 添加接口 @@ -259,6 +259,22 @@ class GazeboSimHttpServer(HttpRPCServer): print('Server remove model done.') return jsonify(ret) + def shutdown(self): + """ + 关闭所有资源。 + """ + # 1. 关闭场景(如果正在运行) + if self.scene_mgr.running_scene: + self.shut_scene() + # 2. 关闭 HeartbeatServer + self.heartbeat_server.stop() + # 3. 关闭 roscore 进程 + if self.roscore_proc: + self.roscore_proc.terminate() + self.roscore_proc.wait() + # 4. 关闭 Flask HTTP 服务器 + super().stop() + print("GazeboSimHttpServer stopped.") if __name__ == '__main__': server = GazeboSimHttpServer() diff --git a/main.py b/main.py index c9304d4..5b98c91 100755 --- a/main.py +++ b/main.py @@ -6,8 +6,7 @@ from http_server import GazeboSimHttpServer server = GazeboSimHttpServer() def signal_handler(sig, frame): - print('Exiting...') - server.stop() + server.shutdown() sys.exit(0) signal.signal(signal.SIGINT, signal_handler)