优化主程序异常处理,添加资源清理逻辑;在图像处理器中引入多线程支持,改进图像订阅的运行机制。
This commit is contained in:
		
							parent
							
								
									9f57cfc479
								
							
						
					
					
						commit
						33bd61ddb9
					
				
							
								
								
									
										14
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								main.py
									
									
									
									
									
								
							@ -37,11 +37,15 @@ def main():
 | 
			
		||||
        time.sleep(100)
 | 
			
		||||
 | 
			
		||||
    except KeyboardInterrupt:
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    Ctrl.quit()
 | 
			
		||||
    image_processor.destroy()
 | 
			
		||||
    sys.exit()
 | 
			
		||||
        print("\n程序被用户中断")
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(f"发生错误: {e}")
 | 
			
		||||
    finally:
 | 
			
		||||
        print("正在清理资源...")
 | 
			
		||||
        Ctrl.quit()
 | 
			
		||||
        image_processor.destroy()
 | 
			
		||||
        print("程序已退出")
 | 
			
		||||
        sys.exit()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Robot_Ctrl(object):
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ from cv_bridge import CvBridge
 | 
			
		||||
import cv2
 | 
			
		||||
from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy
 | 
			
		||||
from qreader import QReader
 | 
			
		||||
from threading import Thread
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ImageSubscriber(Node):
 | 
			
		||||
@ -43,14 +44,24 @@ class ImageProcessor:
 | 
			
		||||
        rclpy.init()
 | 
			
		||||
        self.image_subscriber = ImageSubscriber()
 | 
			
		||||
        self.qreader = QReader()
 | 
			
		||||
        self.spin_thread = None
 | 
			
		||||
        self.running = True
 | 
			
		||||
    
 | 
			
		||||
    def run(self):
 | 
			
		||||
        self.spin_thread = Thread(target=self._spin)
 | 
			
		||||
        self.spin_thread.start()
 | 
			
		||||
    
 | 
			
		||||
    def _spin(self):
 | 
			
		||||
        try:
 | 
			
		||||
            rclpy.spin(self.image_subscriber)
 | 
			
		||||
        except KeyboardInterrupt:
 | 
			
		||||
            pass
 | 
			
		||||
            while self.running:
 | 
			
		||||
                rclpy.spin_once(self.image_subscriber, timeout_sec=0.1)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(f"Spin thread error: {e}")
 | 
			
		||||
    
 | 
			
		||||
    def destroy(self):
 | 
			
		||||
        self.running = False
 | 
			
		||||
        if self.spin_thread:
 | 
			
		||||
            self.spin_thread.join()
 | 
			
		||||
        self.image_subscriber.destroy_node()
 | 
			
		||||
        rclpy.shutdown()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user