LingxinMeng 10 месяцев назад
Родитель
Сommit
265e46cb35
1 измененных файлов с 1510 добавлено и 1506 удалено
  1. 1510 1506
      aarch64/pjisuv/master/service/produce_window.go

+ 1510 - 1506
aarch64/pjisuv/master/service/produce_window.go

@@ -56,1748 +56,1752 @@ func PrepareTimeWindowProducerQueue() {
 	subscribersTimeMutexes := make([]sync.Mutex, len(commonConfig.SubscribeTopics))
 	subscribersMutexes := make([]sync.Mutex, len(commonConfig.SubscribeTopics))
 	for i, topic := range commonConfig.SubscribeTopics {
-		// 增加了可扩展性
-		if topic == masterConfig.TopicOfCicvExtend {
-			go func() {
-				for {
-					time.Sleep(time.Duration(3500) * time.Millisecond)
-					for _, f := range masterConfig.RuleOfCicvExtend {
-						label := f(pjisuvParam)
-						if label != "" {
-							saveTimeWindow(label, util.GetNowTimeCustom(), commonEntity.GetLastTimeWindow())
-							subscribersTimes[i] = time.Now()
-							break
+		for {
+			// 增加了可扩展性
+			if topic == masterConfig.TopicOfCicvExtend {
+				go func() {
+					for {
+						time.Sleep(time.Duration(3500) * time.Millisecond)
+						for _, f := range masterConfig.RuleOfCicvExtend {
+							label := f(pjisuvParam)
+							if label != "" {
+								saveTimeWindow(label, util.GetNowTimeCustom(), commonEntity.GetLastTimeWindow())
+								subscribersTimes[i] = time.Now()
+								break
+							}
 						}
 					}
-				}
-			}()
-		}
+				}()
+			}
 
-		// 其他常规监听器
-		c_log.GlobalLogger.Info("创建订阅者订阅话题:" + topic)
-
-		// 1
-		if topic == masterConfig.TopicOfAmrPose && (len(masterConfig.RuleOfAmrPose1) > 0 || len(masterConfig.RuleOfAmrPose2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *visualization_msgs.MarkerArray) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfAmrPose1) > 0 {
-							for _, f := range masterConfig.RuleOfAmrPose1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 其他常规监听器
+			c_log.GlobalLogger.Info("创建订阅者订阅话题:" + topic)
+
+			// 1
+			if topic == masterConfig.TopicOfAmrPose && (len(masterConfig.RuleOfAmrPose1) > 0 || len(masterConfig.RuleOfAmrPose2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *visualization_msgs.MarkerArray) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfAmrPose1) > 0 {
+								for _, f := range masterConfig.RuleOfAmrPose1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfAmrPose2) > 0 {
+								for _, f := range masterConfig.RuleOfAmrPose2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfAmrPose2) > 0 {
-							for _, f := range masterConfig.RuleOfAmrPose2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 2
+			if topic == masterConfig.TopicOfBoundingBoxesFast && (len(masterConfig.RuleOfBoundingBoxesFast1) > 0 || len(masterConfig.RuleOfBoundingBoxesFast2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.BoundingBoxArray) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfBoundingBoxesFast1) > 0 {
+								for _, f := range masterConfig.RuleOfBoundingBoxesFast1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfBoundingBoxesFast2) > 0 {
+								for _, f := range masterConfig.RuleOfBoundingBoxesFast2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 3
+			if topic == masterConfig.TopicOfCameraFault && (len(masterConfig.RuleOfCameraFault1) > 0 || len(masterConfig.RuleOfCameraFault2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.FaultVec) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCameraFault1) > 0 {
+								for _, f := range masterConfig.RuleOfCameraFault1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCameraFault2) > 0 {
+								for _, f := range masterConfig.RuleOfCameraFault2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 2
-		if topic == masterConfig.TopicOfBoundingBoxesFast && (len(masterConfig.RuleOfBoundingBoxesFast1) > 0 || len(masterConfig.RuleOfBoundingBoxesFast2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.BoundingBoxArray) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfBoundingBoxesFast1) > 0 {
-							for _, f := range masterConfig.RuleOfBoundingBoxesFast1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 4
+			if topic == masterConfig.TopicOfCanData && (len(masterConfig.RuleOfCanData1) > 0 || len(masterConfig.RuleOfCanData2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.Frame) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCanData1) > 0 {
+								for _, f := range masterConfig.RuleOfCanData1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCanData2) > 0 {
+								for _, f := range masterConfig.RuleOfCanData2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfBoundingBoxesFast2) > 0 {
-							for _, f := range masterConfig.RuleOfBoundingBoxesFast2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 5
+			if topic == masterConfig.TopicOfCh128x1LslidarPointCloud && (len(masterConfig.RuleOfCh128x1LslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh128x1LslidarPointCloud2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCh128x1LslidarPointCloud1) > 0 {
+								for _, f := range masterConfig.RuleOfCh128x1LslidarPointCloud1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCh128x1LslidarPointCloud2) > 0 {
+								for _, f := range masterConfig.RuleOfCh128x1LslidarPointCloud2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 6
+			if topic == masterConfig.TopicOfCh64wLLslidarPointCloud && (len(masterConfig.RuleOfCh64wLLslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh64wLLslidarPointCloud2) > 1) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCh64wLLslidarPointCloud1) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wLLslidarPointCloud1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCh64wLLslidarPointCloud2) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wLLslidarPointCloud2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 3
-		if topic == masterConfig.TopicOfCameraFault && (len(masterConfig.RuleOfCameraFault1) > 0 || len(masterConfig.RuleOfCameraFault2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.FaultVec) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCameraFault1) > 0 {
-							for _, f := range masterConfig.RuleOfCameraFault1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 7
+			if topic == masterConfig.TopicOfCh64wLScan && (len(masterConfig.RuleOfCh64wLScan1) > 0 || len(masterConfig.RuleOfCh64wLScan2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.LaserScan) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCh64wLScan1) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wLScan1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCh64wLScan2) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wLScan2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfCameraFault2) > 0 {
-							for _, f := range masterConfig.RuleOfCameraFault2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 8
+			if topic == masterConfig.TopicOfCh64wRLslidarPointCloud && (len(masterConfig.RuleOfCh64wRLslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh64wRLslidarPointCloud2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCh64wRLslidarPointCloud1) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wRLslidarPointCloud1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCh64wRLslidarPointCloud2) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wRLslidarPointCloud2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 9
+			if topic == masterConfig.TopicOfCh64wRScan && (len(masterConfig.RuleOfCh64wRScan1) > 0 || len(masterConfig.RuleOfCh64wRScan2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.LaserScan) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCh64wRScan1) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wRScan1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCh64wRScan2) > 0 {
+								for _, f := range masterConfig.RuleOfCh64wRScan2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 4
-		if topic == masterConfig.TopicOfCanData && (len(masterConfig.RuleOfCanData1) > 0 || len(masterConfig.RuleOfCanData2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.Frame) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCanData1) > 0 {
-							for _, f := range masterConfig.RuleOfCanData1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 10
+			if topic == masterConfig.TopicOfCicvLidarclusterMovingObjects && (len(masterConfig.RuleOfCicvLidarclusterMovingObjects1) > 0 || len(masterConfig.RuleOfCicvLidarclusterMovingObjects2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.PerceptionCicvMovingObjects) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCicvLidarclusterMovingObjects1) > 0 {
+								for _, f := range masterConfig.RuleOfCicvLidarclusterMovingObjects1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCicvLidarclusterMovingObjects2) > 0 {
+								for _, f := range masterConfig.RuleOfCicvLidarclusterMovingObjects2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfCanData2) > 0 {
-							for _, f := range masterConfig.RuleOfCanData2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 11
+			if topic == masterConfig.TopicOfCicvAmrTrajectory && (len(masterConfig.RuleOfCicvAmrTrajectory1) > 0 || len(masterConfig.RuleOfCicvAmrTrajectory2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.Trajectory) {
+
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCicvAmrTrajectory1) > 0 {
+								for _, f := range masterConfig.RuleOfCicvAmrTrajectory1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCicvAmrTrajectory2) > 0 {
+								for _, f := range masterConfig.RuleOfCicvAmrTrajectory2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+
+						// 触发后更新共享变量
+						mutexOfCicvAmrTrajectory.RLock()
+						{
+							var currentCurvateres []float64
+							for _, point := range data.Trajectoryinfo.Trajectorypoints {
+								currentCurvateres = append(currentCurvateres, math.Abs(float64(point.Curvature)))
+							}
+							pjisuvParam.LastCurvaturesOfCicvAmrTrajectory = currentCurvateres
+						}
+						mutexOfCicvAmrTrajectory.RUnlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 12
+			if topic == masterConfig.TopicOfCicvLocation && (len(masterConfig.RuleOfCicvLocation1) > 0 || len(masterConfig.RuleOfCicvLocation2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.PerceptionLocalization) {
+						// 更新共享变量
+						mutexOfCicvLocation.RLock()
+						{
+							pjisuvParam.VelocityXOfCicvLocation = data.VelocityX
+							pjisuvParam.VelocityYOfCicvLocation = data.VelocityY
+							pjisuvParam.VelocityZOfCicvLocation = data.VelocityZ
+							pjisuvParam.YawOfCicvLocation = data.Yaw
+							pjisuvParam.AngularVelocityZOfCicvLocation = data.AngularVelocityZ
+							pjisuvParam.PositionXOfCicvLocation = data.PositionX
+							pjisuvParam.PositionYOfCicvLocation = data.PositionY
+						}
+						mutexOfCicvLocation.RUnlock()
+
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCicvLocation1) > 0 {
+								for _, f := range masterConfig.RuleOfCicvLocation1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfCicvLocation2) > 0 {
+								for _, f := range masterConfig.RuleOfCicvLocation2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 5
-		if topic == masterConfig.TopicOfCh128x1LslidarPointCloud && (len(masterConfig.RuleOfCh128x1LslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh128x1LslidarPointCloud2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCh128x1LslidarPointCloud1) > 0 {
-							for _, f := range masterConfig.RuleOfCh128x1LslidarPointCloud1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 13
+			if topic == masterConfig.TopicOfCloudClusters && (len(masterConfig.RuleOfCloudClusters1) > 0 || len(masterConfig.RuleOfCloudClusters2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.AutowareCloudClusterArray) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCloudClusters1) > 0 {
+								for _, f := range masterConfig.RuleOfCloudClusters1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-						if len(masterConfig.RuleOfCh128x1LslidarPointCloud2) > 0 {
-							for _, f := range masterConfig.RuleOfCh128x1LslidarPointCloud2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfCloudClusters2) > 0 {
+								for _, f := range masterConfig.RuleOfCloudClusters2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 6
-		if topic == masterConfig.TopicOfCh64wLLslidarPointCloud && (len(masterConfig.RuleOfCh64wLLslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh64wLLslidarPointCloud2) > 1) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCh64wLLslidarPointCloud1) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wLLslidarPointCloud1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCh64wLLslidarPointCloud2) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wLLslidarPointCloud2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 14
+			if topic == masterConfig.TopicOfHeartbeatInfo && (len(masterConfig.RuleOfHeartbeatInfo1) > 0 || len(masterConfig.RuleOfHeartbeatInfo2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.HeartBeatInfo) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfHeartbeatInfo1) > 0 {
+								for _, f := range masterConfig.RuleOfHeartbeatInfo1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfHeartbeatInfo2) > 0 {
+								for _, f := range masterConfig.RuleOfHeartbeatInfo2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 7
-		if topic == masterConfig.TopicOfCh64wLScan && (len(masterConfig.RuleOfCh64wLScan1) > 0 || len(masterConfig.RuleOfCh64wLScan2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.LaserScan) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCh64wLScan1) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wLScan1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 15
+			if topic == masterConfig.TopicOfLidarPretreatmentCost && (len(masterConfig.RuleOfLidarPretreatmentCost1) > 0 || len(masterConfig.RuleOfLidarPretreatmentCost2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *geometry_msgs.Vector3Stamped) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfLidarPretreatmentCost1) > 0 {
+								for _, f := range masterConfig.RuleOfLidarPretreatmentCost1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-						if len(masterConfig.RuleOfCh64wLScan2) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wLScan2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfLidarPretreatmentCost2) > 0 {
+								for _, f := range masterConfig.RuleOfLidarPretreatmentCost2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 8
-		if topic == masterConfig.TopicOfCh64wRLslidarPointCloud && (len(masterConfig.RuleOfCh64wRLslidarPointCloud1) > 0 || len(masterConfig.RuleOfCh64wRLslidarPointCloud2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCh64wRLslidarPointCloud1) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wRLslidarPointCloud1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCh64wRLslidarPointCloud2) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wRLslidarPointCloud2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 16
+			if topic == masterConfig.TopicOfLidarPretreatmentOdometry && (len(masterConfig.RuleOfLidarPretreatmentOdometry1) > 0 || len(masterConfig.RuleOfLidarPretreatmentOdometry2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Odometry) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfLidarPretreatmentOdometry1) > 0 {
+								for _, f := range masterConfig.RuleOfLidarPretreatmentOdometry1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 9
-		if topic == masterConfig.TopicOfCh64wRScan && (len(masterConfig.RuleOfCh64wRScan1) > 0 || len(masterConfig.RuleOfCh64wRScan2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.LaserScan) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCh64wRScan1) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wRScan1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCh64wRScan2) > 0 {
-							for _, f := range masterConfig.RuleOfCh64wRScan2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+							if len(masterConfig.RuleOfLidarPretreatmentOdometry2) > 0 {
+								for _, f := range masterConfig.RuleOfLidarPretreatmentOdometry2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-
-		// 10
-		if topic == masterConfig.TopicOfCicvLidarclusterMovingObjects && (len(masterConfig.RuleOfCicvLidarclusterMovingObjects1) > 0 || len(masterConfig.RuleOfCicvLidarclusterMovingObjects2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.PerceptionCicvMovingObjects) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCicvLidarclusterMovingObjects1) > 0 {
-							for _, f := range masterConfig.RuleOfCicvLidarclusterMovingObjects1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCicvLidarclusterMovingObjects2) > 0 {
-							for _, f := range masterConfig.RuleOfCicvLidarclusterMovingObjects2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 17
+			if topic == masterConfig.TopicOfLidarRoi && (len(masterConfig.RuleOfLidarRoi1) > 0 || len(masterConfig.RuleOfLidarRoi2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *geometry_msgs.PolygonStamped) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfLidarRoi1) > 0 {
+								for _, f := range masterConfig.RuleOfLidarRoi1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 11
-		if topic == masterConfig.TopicOfCicvAmrTrajectory && (len(masterConfig.RuleOfCicvAmrTrajectory1) > 0 || len(masterConfig.RuleOfCicvAmrTrajectory2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.Trajectory) {
-
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCicvAmrTrajectory1) > 0 {
-							for _, f := range masterConfig.RuleOfCicvAmrTrajectory1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCicvAmrTrajectory2) > 0 {
-							for _, f := range masterConfig.RuleOfCicvAmrTrajectory2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+							if len(masterConfig.RuleOfLidarRoi2) > 0 {
+								for _, f := range masterConfig.RuleOfLidarRoi2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-
-					// 触发后更新共享变量
-					mutexOfCicvAmrTrajectory.RLock()
-					{
-						var currentCurvateres []float64
-						for _, point := range data.Trajectoryinfo.Trajectorypoints {
-							currentCurvateres = append(currentCurvateres, math.Abs(float64(point.Curvature)))
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
-						pjisuvParam.LastCurvaturesOfCicvAmrTrajectory = currentCurvateres
-					}
-					mutexOfCicvAmrTrajectory.RUnlock()
-				},
-			})
-		}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-		// 12
-		if topic == masterConfig.TopicOfCicvLocation && (len(masterConfig.RuleOfCicvLocation1) > 0 || len(masterConfig.RuleOfCicvLocation2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.PerceptionLocalization) {
-					// 更新共享变量
-					mutexOfCicvLocation.RLock()
-					{
-						pjisuvParam.VelocityXOfCicvLocation = data.VelocityX
-						pjisuvParam.VelocityYOfCicvLocation = data.VelocityY
-						pjisuvParam.VelocityZOfCicvLocation = data.VelocityZ
-						pjisuvParam.YawOfCicvLocation = data.Yaw
-						pjisuvParam.AngularVelocityZOfCicvLocation = data.AngularVelocityZ
-						pjisuvParam.PositionXOfCicvLocation = data.PositionX
-						pjisuvParam.PositionYOfCicvLocation = data.PositionY
-					}
-					mutexOfCicvLocation.RUnlock()
-
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCicvLocation1) > 0 {
-							for _, f := range masterConfig.RuleOfCicvLocation1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 18
+			if topic == masterConfig.TopicOfLine1 && (len(masterConfig.RuleOfLine11) > 0 || len(masterConfig.RuleOfLine12) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Path) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfLine11) > 0 {
+								for _, f := range masterConfig.RuleOfLine11 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-						if len(masterConfig.RuleOfCicvLocation2) > 0 {
-							for _, f := range masterConfig.RuleOfCicvLocation2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfLine12) > 0 {
+								for _, f := range masterConfig.RuleOfLine12 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 13
-		if topic == masterConfig.TopicOfCloudClusters && (len(masterConfig.RuleOfCloudClusters1) > 0 || len(masterConfig.RuleOfCloudClusters2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.AutowareCloudClusterArray) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCloudClusters1) > 0 {
-							for _, f := range masterConfig.RuleOfCloudClusters1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfCloudClusters2) > 0 {
-							for _, f := range masterConfig.RuleOfCloudClusters2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 19
+			if topic == masterConfig.TopicOfLine2 && (len(masterConfig.RuleOfLine21) > 0 || len(masterConfig.RuleOfLine22) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Path) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfLine21) > 0 {
+								for _, f := range masterConfig.RuleOfLine21 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfLine22) > 0 {
+								for _, f := range masterConfig.RuleOfLine22 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 14
-		if topic == masterConfig.TopicOfHeartbeatInfo && (len(masterConfig.RuleOfHeartbeatInfo1) > 0 || len(masterConfig.RuleOfHeartbeatInfo2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.HeartBeatInfo) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfHeartbeatInfo1) > 0 {
-							for _, f := range masterConfig.RuleOfHeartbeatInfo1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfHeartbeatInfo2) > 0 {
-							for _, f := range masterConfig.RuleOfHeartbeatInfo2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 20
+			if topic == masterConfig.TopicOfMapPolygon && (len(masterConfig.RuleOfMapPolygon1) > 0 || len(masterConfig.RuleOfMapPolygon2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.PolygonStamped) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfMapPolygon1) > 0 {
+								for _, f := range masterConfig.RuleOfMapPolygon1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 15
-		if topic == masterConfig.TopicOfLidarPretreatmentCost && (len(masterConfig.RuleOfLidarPretreatmentCost1) > 0 || len(masterConfig.RuleOfLidarPretreatmentCost2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *geometry_msgs.Vector3Stamped) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfLidarPretreatmentCost1) > 0 {
-							for _, f := range masterConfig.RuleOfLidarPretreatmentCost1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfLidarPretreatmentCost2) > 0 {
-							for _, f := range masterConfig.RuleOfLidarPretreatmentCost2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfMapPolygon2) > 0 {
+								for _, f := range masterConfig.RuleOfMapPolygon2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
 
-		// 16
-		if topic == masterConfig.TopicOfLidarPretreatmentOdometry && (len(masterConfig.RuleOfLidarPretreatmentOdometry1) > 0 || len(masterConfig.RuleOfLidarPretreatmentOdometry2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Odometry) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfLidarPretreatmentOdometry1) > 0 {
-							for _, f := range masterConfig.RuleOfLidarPretreatmentOdometry1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfLidarPretreatmentOdometry2) > 0 {
-							for _, f := range masterConfig.RuleOfLidarPretreatmentOdometry2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 21
+			if topic == masterConfig.TopicOfObstacleDisplay && (len(masterConfig.RuleOfObstacleDisplay1) > 0 || len(masterConfig.RuleOfObstacleDisplay2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *visualization_msgs.MarkerArray) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfObstacleDisplay1) > 0 {
+								for _, f := range masterConfig.RuleOfObstacleDisplay1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfObstacleDisplay2) > 0 {
+								for _, f := range masterConfig.RuleOfObstacleDisplay2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 17
-		if topic == masterConfig.TopicOfLidarRoi && (len(masterConfig.RuleOfLidarRoi1) > 0 || len(masterConfig.RuleOfLidarRoi2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *geometry_msgs.PolygonStamped) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfLidarRoi1) > 0 {
-							for _, f := range masterConfig.RuleOfLidarRoi1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfLidarRoi2) > 0 {
-							for _, f := range masterConfig.RuleOfLidarRoi2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-
-		// 18
-		if topic == masterConfig.TopicOfLine1 && (len(masterConfig.RuleOfLine11) > 0 || len(masterConfig.RuleOfLine12) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Path) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfLine11) > 0 {
-							for _, f := range masterConfig.RuleOfLine11 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
+			// 22
+			if topic == masterConfig.TopicOfPjControlPub && (len(masterConfig.RuleOfPjControlPub1) > 0 || len(masterConfig.RuleOfPjControlPub2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.CommonVehicleCmd) {
+						// 更新共享变量
+						mutexOfPjControlPub.RLock()
+						{
+							pjisuvParam.NumCountPjiControlCommandOfPjControlPub++
+							if pjisuvParam.NumCountPjiControlCommandOfPjControlPub == 10 {
+								pjisuvParam.EgoSteeringCmdOfPjControlPub = append(pjisuvParam.EgoSteeringCmdOfPjControlPub, data.ICPVCmdStrAngle)
+								pjisuvParam.EgoThrottleCmdOfPjControlPub = append(pjisuvParam.EgoThrottleCmdOfPjControlPub, data.ICPVCmdAccPelPosAct)
+								pjisuvParam.NumCountPjiControlCommandOfPjControlPub = 0
+							}
+						}
+						mutexOfPjControlPub.RUnlock()
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfPjControlPub1) > 0 {
+								for _, f := range masterConfig.RuleOfPjControlPub1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfPjControlPub2) > 0 {
+								for _, f := range masterConfig.RuleOfPjControlPub2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfLine12) > 0 {
-							for _, f := range masterConfig.RuleOfLine12 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 23
+			if topic == masterConfig.TopicOfPointsCluster && (len(masterConfig.RuleOfPointsCluster1) > 0 || len(masterConfig.RuleOfPointsCluster2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfPointsCluster1) > 0 {
+								for _, f := range masterConfig.RuleOfPointsCluster1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfPointsCluster2) > 0 {
+								for _, f := range masterConfig.RuleOfPointsCluster2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 19
-		if topic == masterConfig.TopicOfLine2 && (len(masterConfig.RuleOfLine21) > 0 || len(masterConfig.RuleOfLine22) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Path) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfLine21) > 0 {
-							for _, f := range masterConfig.RuleOfLine21 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfLine22) > 0 {
-							for _, f := range masterConfig.RuleOfLine22 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 24
+			if topic == masterConfig.TopicOfPointsConcat && (len(masterConfig.RuleOfPointsConcat1) > 0 || len(masterConfig.RuleOfPointsConcat2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfPointsConcat1) > 0 {
+								for _, f := range masterConfig.RuleOfPointsConcat1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 20
-		if topic == masterConfig.TopicOfMapPolygon && (len(masterConfig.RuleOfMapPolygon1) > 0 || len(masterConfig.RuleOfMapPolygon2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.PolygonStamped) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfMapPolygon1) > 0 {
-							for _, f := range masterConfig.RuleOfMapPolygon1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfMapPolygon2) > 0 {
-							for _, f := range masterConfig.RuleOfMapPolygon2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfPointsConcat2) > 0 {
+								for _, f := range masterConfig.RuleOfPointsConcat2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
 
-		// 21
-		if topic == masterConfig.TopicOfObstacleDisplay && (len(masterConfig.RuleOfObstacleDisplay1) > 0 || len(masterConfig.RuleOfObstacleDisplay2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *visualization_msgs.MarkerArray) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfObstacleDisplay1) > 0 {
-							for _, f := range masterConfig.RuleOfObstacleDisplay1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfObstacleDisplay2) > 0 {
-							for _, f := range masterConfig.RuleOfObstacleDisplay2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 25
+			if topic == masterConfig.TopicOfReferenceDisplay && (len(masterConfig.RuleOfReferenceDisplay1) > 0 || len(masterConfig.RuleOfReferenceDisplay2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Path) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfReferenceDisplay1) > 0 {
+								for _, f := range masterConfig.RuleOfReferenceDisplay1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfReferenceDisplay2) > 0 {
+								for _, f := range masterConfig.RuleOfReferenceDisplay2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 22
-		if topic == masterConfig.TopicOfPjControlPub && (len(masterConfig.RuleOfPjControlPub1) > 0 || len(masterConfig.RuleOfPjControlPub2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.CommonVehicleCmd) {
-					// 更新共享变量
-					mutexOfPjControlPub.RLock()
-					{
-						pjisuvParam.NumCountPjiControlCommandOfPjControlPub++
-						if pjisuvParam.NumCountPjiControlCommandOfPjControlPub == 10 {
-							pjisuvParam.EgoSteeringCmdOfPjControlPub = append(pjisuvParam.EgoSteeringCmdOfPjControlPub, data.ICPVCmdStrAngle)
-							pjisuvParam.EgoThrottleCmdOfPjControlPub = append(pjisuvParam.EgoThrottleCmdOfPjControlPub, data.ICPVCmdAccPelPosAct)
-							pjisuvParam.NumCountPjiControlCommandOfPjControlPub = 0
-						}
-					}
-					mutexOfPjControlPub.RUnlock()
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfPjControlPub1) > 0 {
-							for _, f := range masterConfig.RuleOfPjControlPub1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-						if len(masterConfig.RuleOfPjControlPub2) > 0 {
-							for _, f := range masterConfig.RuleOfPjControlPub2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 26
+			if topic == masterConfig.TopicOfReferenceTrajectory && (len(masterConfig.RuleOfReferenceTrajectory1) > 0 || len(masterConfig.RuleOfReferenceTrajectory2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.Trajectory) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfReferenceTrajectory1) > 0 {
+								for _, f := range masterConfig.RuleOfReferenceTrajectory1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 23
-		if topic == masterConfig.TopicOfPointsCluster && (len(masterConfig.RuleOfPointsCluster1) > 0 || len(masterConfig.RuleOfPointsCluster2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfPointsCluster1) > 0 {
-							for _, f := range masterConfig.RuleOfPointsCluster1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfPointsCluster2) > 0 {
-							for _, f := range masterConfig.RuleOfPointsCluster2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfReferenceTrajectory2) > 0 {
+								for _, f := range masterConfig.RuleOfReferenceTrajectory2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
 
-		// 24
-		if topic == masterConfig.TopicOfPointsConcat && (len(masterConfig.RuleOfPointsConcat1) > 0 || len(masterConfig.RuleOfPointsConcat2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfPointsConcat1) > 0 {
-							for _, f := range masterConfig.RuleOfPointsConcat1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfPointsConcat2) > 0 {
-							for _, f := range masterConfig.RuleOfPointsConcat2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 27
+			if topic == masterConfig.TopicOfRoiPoints && (len(masterConfig.RuleOfRoiPoints1) > 0 || len(masterConfig.RuleOfRoiPoints2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfRoiPoints1) > 0 {
+								for _, f := range masterConfig.RuleOfRoiPoints1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfRoiPoints2) > 0 {
+								for _, f := range masterConfig.RuleOfRoiPoints2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 25
-		if topic == masterConfig.TopicOfReferenceDisplay && (len(masterConfig.RuleOfReferenceDisplay1) > 0 || len(masterConfig.RuleOfReferenceDisplay2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Path) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfReferenceDisplay1) > 0 {
-							for _, f := range masterConfig.RuleOfReferenceDisplay1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfReferenceDisplay2) > 0 {
-							for _, f := range masterConfig.RuleOfReferenceDisplay2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 28
+			if topic == masterConfig.TopicOfRoiPolygon && (len(masterConfig.RuleOfRoiPolygon1) > 0 || len(masterConfig.RuleOfRoiPolygon2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Path) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfRoiPolygon1) > 0 {
+								for _, f := range masterConfig.RuleOfRoiPolygon1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 26
-		if topic == masterConfig.TopicOfReferenceTrajectory && (len(masterConfig.RuleOfReferenceTrajectory1) > 0 || len(masterConfig.RuleOfReferenceTrajectory2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.Trajectory) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfReferenceTrajectory1) > 0 {
-							for _, f := range masterConfig.RuleOfReferenceTrajectory1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfReferenceTrajectory2) > 0 {
-							for _, f := range masterConfig.RuleOfReferenceTrajectory2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfRoiPolygon2) > 0 {
+								for _, f := range masterConfig.RuleOfRoiPolygon2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-
-		// 27
-		if topic == masterConfig.TopicOfRoiPoints && (len(masterConfig.RuleOfRoiPoints1) > 0 || len(masterConfig.RuleOfRoiPoints2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfRoiPoints1) > 0 {
-							for _, f := range masterConfig.RuleOfRoiPoints1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfRoiPoints2) > 0 {
-							for _, f := range masterConfig.RuleOfRoiPoints2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 29
+			if topic == masterConfig.TopicOfTf && (len(masterConfig.RuleOfTf1) > 0 || len(masterConfig.RuleOfTf2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *tf2_msgs.TFMessage) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfTf1) > 0 {
+								for _, f := range masterConfig.RuleOfTf1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfTf2) > 0 {
+								for _, f := range masterConfig.RuleOfTf2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 28
-		if topic == masterConfig.TopicOfRoiPolygon && (len(masterConfig.RuleOfRoiPolygon1) > 0 || len(masterConfig.RuleOfRoiPolygon2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Path) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfRoiPolygon1) > 0 {
-							for _, f := range masterConfig.RuleOfRoiPolygon1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfRoiPolygon2) > 0 {
-							for _, f := range masterConfig.RuleOfRoiPolygon2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-
-		// 29
-		if topic == masterConfig.TopicOfTf && (len(masterConfig.RuleOfTf1) > 0 || len(masterConfig.RuleOfTf2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *tf2_msgs.TFMessage) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfTf1) > 0 {
-							for _, f := range masterConfig.RuleOfTf1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+			// 30
+			if topic == masterConfig.TopicOfTpperception && (len(masterConfig.RuleOfTpperception1) > 0 || len(masterConfig.RuleOfTpperception2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.PerceptionObjects) {
+						// 更新共享变量
+						mutexOfTpperception.RLock()
+						{
+							for _, obj := range data.Objs {
+								if obj.X <= 5 || math.Abs(float64(obj.Y)) >= 10 {
+									continue
 								}
-							}
-						}
-
-						if len(masterConfig.RuleOfTf2) > 0 {
-							for _, f := range masterConfig.RuleOfTf2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+								// 检查 ObjDicOfTpperception 是否为 nil,如果是,则初始化它
+								if pjisuvParam.ObjDicOfTpperception == nil {
+									pjisuvParam.ObjDicOfTpperception = make(map[uint32][]float32)
 								}
+								if _, ok := pjisuvParam.ObjDicOfTpperception[obj.Id]; !ok {
+									pjisuvParam.ObjDicOfTpperception[obj.Id] = []float32{}
+								}
+								pjisuvParam.ObjDicOfTpperception[obj.Id] = append(pjisuvParam.ObjDicOfTpperception[obj.Id], obj.Y)
 							}
 						}
+						mutexOfTpperception.RUnlock()
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfTpperception1) > 0 {
+								for _, f := range masterConfig.RuleOfTpperception1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-
-		// 30
-		if topic == masterConfig.TopicOfTpperception && (len(masterConfig.RuleOfTpperception1) > 0 || len(masterConfig.RuleOfTpperception2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.PerceptionObjects) {
-					// 更新共享变量
-					mutexOfTpperception.RLock()
-					{
-						for _, obj := range data.Objs {
-							if obj.X <= 5 || math.Abs(float64(obj.Y)) >= 10 {
-								continue
-							}
-							// 检查 ObjDicOfTpperception 是否为 nil,如果是,则初始化它
-							if pjisuvParam.ObjDicOfTpperception == nil {
-								pjisuvParam.ObjDicOfTpperception = make(map[uint32][]float32)
-							}
-							if _, ok := pjisuvParam.ObjDicOfTpperception[obj.Id]; !ok {
-								pjisuvParam.ObjDicOfTpperception[obj.Id] = []float32{}
-							}
-							pjisuvParam.ObjDicOfTpperception[obj.Id] = append(pjisuvParam.ObjDicOfTpperception[obj.Id], obj.Y)
-						}
-					}
-					mutexOfTpperception.RUnlock()
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfTpperception1) > 0 {
-							for _, f := range masterConfig.RuleOfTpperception1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfTpperception2) > 0 {
-							for _, f := range masterConfig.RuleOfTpperception2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfTpperception2) > 0 {
+								for _, f := range masterConfig.RuleOfTpperception2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-					// -------- 触发后更新共享变量
-					mutexOfTpperception.RLock()
-					{
-						for _, obj := range data.Objs {
-							pjisuvParam.ObjTypeDicOfTpperception[obj.Id] = obj.Type
-							pjisuvParam.ObjSpeedDicOfTpperception[obj.Id] = math.Pow(math.Pow(float64(obj.Vxabs), 2)+math.Pow(float64(obj.Vyabs), 2), 0.5)
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
-					}
-					mutexOfTpperception.RUnlock()
-				},
-			})
-		}
-
-		// 31
-		if topic == masterConfig.TopicOfTpperceptionVis && (len(masterConfig.RuleOfTpperceptionVis1) > 0 || len(masterConfig.RuleOfTpperceptionVis2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *visualization_msgs.MarkerArray) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfTpperceptionVis1) > 0 {
-							for _, f := range masterConfig.RuleOfTpperceptionVis1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
+						subscribersTimeMutexes[i].Unlock()
+						// -------- 触发后更新共享变量
+						mutexOfTpperception.RLock()
+						{
+							for _, obj := range data.Objs {
+								pjisuvParam.ObjTypeDicOfTpperception[obj.Id] = obj.Type
+								pjisuvParam.ObjSpeedDicOfTpperception[obj.Id] = math.Pow(math.Pow(float64(obj.Vxabs), 2)+math.Pow(float64(obj.Vyabs), 2), 0.5)
 							}
 						}
+						mutexOfTpperception.RUnlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfTpperceptionVis2) > 0 {
-							for _, f := range masterConfig.RuleOfTpperceptionVis2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 31
+			if topic == masterConfig.TopicOfTpperceptionVis && (len(masterConfig.RuleOfTpperceptionVis1) > 0 || len(masterConfig.RuleOfTpperceptionVis2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *visualization_msgs.MarkerArray) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfTpperceptionVis1) > 0 {
+								for _, f := range masterConfig.RuleOfTpperceptionVis1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+							if len(masterConfig.RuleOfTpperceptionVis2) > 0 {
+								for _, f := range masterConfig.RuleOfTpperceptionVis2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 32
-		if topic == masterConfig.TopicOfTprouteplan && (len(masterConfig.RuleOfTprouteplan1) > 0 || len(masterConfig.RuleOfTprouteplan2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.RoutePlan) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfTprouteplan1) > 0 {
-							for _, f := range masterConfig.RuleOfTprouteplan1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-						if len(masterConfig.RuleOfTprouteplan2) > 0 {
-							for _, f := range masterConfig.RuleOfTprouteplan2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 32
+			if topic == masterConfig.TopicOfTprouteplan && (len(masterConfig.RuleOfTprouteplan1) > 0 || len(masterConfig.RuleOfTprouteplan2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.RoutePlan) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfTprouteplan1) > 0 {
+								for _, f := range masterConfig.RuleOfTprouteplan1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 33
-		if topic == masterConfig.TopicOfTrajectoryDisplay && (len(masterConfig.RuleOfTrajectoryDisplay1) > 0 || len(masterConfig.RuleOfTrajectoryDisplay2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *nav_msgs.Path) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfTrajectoryDisplay1) > 0 {
-							for _, f := range masterConfig.RuleOfTrajectoryDisplay1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfTrajectoryDisplay2) > 0 {
-							for _, f := range masterConfig.RuleOfTrajectoryDisplay2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfTprouteplan2) > 0 {
+								for _, f := range masterConfig.RuleOfTprouteplan2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 33
+			if topic == masterConfig.TopicOfTrajectoryDisplay && (len(masterConfig.RuleOfTrajectoryDisplay1) > 0 || len(masterConfig.RuleOfTrajectoryDisplay2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *nav_msgs.Path) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfTrajectoryDisplay1) > 0 {
+								for _, f := range masterConfig.RuleOfTrajectoryDisplay1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 34
-		if topic == masterConfig.TopicOfUngroundCloudpoints && (len(masterConfig.RuleOfUngroundCloudpoints1) > 0 || len(masterConfig.RuleOfUngroundCloudpoints2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.PointCloud2) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfUngroundCloudpoints1) > 0 {
-							for _, f := range masterConfig.RuleOfUngroundCloudpoints1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfUngroundCloudpoints2) > 0 {
-							for _, f := range masterConfig.RuleOfUngroundCloudpoints2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfTrajectoryDisplay2) > 0 {
+								for _, f := range masterConfig.RuleOfTrajectoryDisplay2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 34
+			if topic == masterConfig.TopicOfUngroundCloudpoints && (len(masterConfig.RuleOfUngroundCloudpoints1) > 0 || len(masterConfig.RuleOfUngroundCloudpoints2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.PointCloud2) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfUngroundCloudpoints1) > 0 {
+								for _, f := range masterConfig.RuleOfUngroundCloudpoints1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 35
-		if topic == masterConfig.TopicOfCameraImage && (len(masterConfig.RuleOfCameraImage1) > 0 || len(masterConfig.RuleOfCameraImage2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *sensor_msgs.Image) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfCameraImage1) > 0 {
-							for _, f := range masterConfig.RuleOfCameraImage1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfCameraImage2) > 0 {
-							for _, f := range masterConfig.RuleOfCameraImage2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfUngroundCloudpoints2) > 0 {
+								for _, f := range masterConfig.RuleOfUngroundCloudpoints2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-		// 36
-		if topic == masterConfig.TopicOfDataRead && (len(masterConfig.RuleOfDataRead1) > 0 || len(masterConfig.RuleOfDataRead2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.Retrieval) {
-					// 更新共享变量
-					mutexOfDataRead.RLock()
-					{
-						pjisuvParam.NumCountDataReadOfDataRead++
-						if pjisuvParam.NumCountDataReadOfDataRead == 10 {
-							pjisuvParam.EgoSteeringRealOfDataRead = append(pjisuvParam.EgoSteeringRealOfDataRead, data.ActStrWhAng)
-							pjisuvParam.EgoThrottleRealOfDataRead = append(pjisuvParam.EgoThrottleRealOfDataRead, data.AccPed2)
-							pjisuvParam.NumCountDataReadOfDataRead = 0
-						}
-						pjisuvParam.StrgAngleRealValueOfDataRead = data.ActStrWhAng
-					}
-					mutexOfDataRead.RUnlock()
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfDataRead1) > 0 {
-							for _, f := range masterConfig.RuleOfDataRead1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-						if len(masterConfig.RuleOfDataRead2) > 0 {
-							for _, f := range masterConfig.RuleOfDataRead2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+			// 35
+			if topic == masterConfig.TopicOfCameraImage && (len(masterConfig.RuleOfCameraImage1) > 0 || len(masterConfig.RuleOfCameraImage2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *sensor_msgs.Image) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfCameraImage1) > 0 {
+								for _, f := range masterConfig.RuleOfCameraImage1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
-		// 37
-		if topic == masterConfig.TopicOfPjiGps && (len(masterConfig.RuleOfPjiGps1) > 0 || len(masterConfig.RuleOfPjiGps2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.PerceptionLocalization) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfPjiGps1) > 0 {
-							for _, f := range masterConfig.RuleOfPjiGps1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
-								}
-							}
-						}
-
-						if len(masterConfig.RuleOfPjiGps2) > 0 {
-							for _, f := range masterConfig.RuleOfPjiGps2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfCameraImage2) > 0 {
+								for _, f := range masterConfig.RuleOfCameraImage2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
 						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
+			// 36
+			if topic == masterConfig.TopicOfDataRead && (len(masterConfig.RuleOfDataRead1) > 0 || len(masterConfig.RuleOfDataRead2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.Retrieval) {
+						// 更新共享变量
+						mutexOfDataRead.RLock()
+						{
+							pjisuvParam.NumCountDataReadOfDataRead++
+							if pjisuvParam.NumCountDataReadOfDataRead == 10 {
+								pjisuvParam.EgoSteeringRealOfDataRead = append(pjisuvParam.EgoSteeringRealOfDataRead, data.ActStrWhAng)
+								pjisuvParam.EgoThrottleRealOfDataRead = append(pjisuvParam.EgoThrottleRealOfDataRead, data.AccPed2)
+								pjisuvParam.NumCountDataReadOfDataRead = 0
+							}
+							pjisuvParam.StrgAngleRealValueOfDataRead = data.ActStrWhAng
+						}
+						mutexOfDataRead.RUnlock()
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfDataRead1) > 0 {
+								for _, f := range masterConfig.RuleOfDataRead1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfDataRead2) > 0 {
+								for _, f := range masterConfig.RuleOfDataRead2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
+			// 37
+			if topic == masterConfig.TopicOfPjiGps && (len(masterConfig.RuleOfPjiGps1) > 0 || len(masterConfig.RuleOfPjiGps2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.PerceptionLocalization) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfPjiGps1) > 0 {
+								for _, f := range masterConfig.RuleOfPjiGps1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+							if len(masterConfig.RuleOfPjiGps2) > 0 {
+								for _, f := range masterConfig.RuleOfPjiGps2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
+								}
+							}
+
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
 
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
+			// 39
+			if topic == masterConfig.TopicOfPjVehicleFdbPub && (len(masterConfig.RuleOfPjVehicleFdbPub1) > 0 || len(masterConfig.RuleOfPjVehicleFdbPub2) > 0) {
+				subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
+					Node:  commonConfig.RosNode,
+					Topic: topic,
+					Callback: func(data *pjisuv_msgs.VehicleFdb) {
+						subscribersTimeMutexes[i].Lock()
+						if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
+							subscribersMutexes[i].Lock()
+							faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+							lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
+							faultLabel := ""
+							if len(masterConfig.RuleOfPjVehicleFdbPub1) > 0 {
+								for _, f := range masterConfig.RuleOfPjVehicleFdbPub1 {
+									faultLabel = f(data)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-		// 39
-		if topic == masterConfig.TopicOfPjVehicleFdbPub && (len(masterConfig.RuleOfPjVehicleFdbPub1) > 0 || len(masterConfig.RuleOfPjVehicleFdbPub2) > 0) {
-			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
-				Node:  commonConfig.RosNode,
-				Topic: topic,
-				Callback: func(data *pjisuv_msgs.VehicleFdb) {
-					subscribersTimeMutexes[i].Lock()
-					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
-						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
-						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
-						faultLabel := ""
-						if len(masterConfig.RuleOfPjVehicleFdbPub1) > 0 {
-							for _, f := range masterConfig.RuleOfPjVehicleFdbPub1 {
-								faultLabel = f(data)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
 
-						if len(masterConfig.RuleOfPjVehicleFdbPub2) > 0 {
-							for _, f := range masterConfig.RuleOfPjVehicleFdbPub2 {
-								faultLabel = f(data, &pjisuvParam)
-								if faultLabel != "" {
-									saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
+							if len(masterConfig.RuleOfPjVehicleFdbPub2) > 0 {
+								for _, f := range masterConfig.RuleOfPjVehicleFdbPub2 {
+									faultLabel = f(data, &pjisuvParam)
+									if faultLabel != "" {
+										saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 
-									subscribersTimes[i] = time.Now()
-									goto TriggerSuccess
+										subscribersTimes[i] = time.Now()
+										goto TriggerSuccess
+									}
 								}
 							}
-						}
-
-					TriggerSuccess:
-						subscribersMutexes[i].Unlock()
-					}
-					subscribersTimeMutexes[i].Unlock()
-				},
-			})
-		}
 
-		if err != nil {
-			c_log.GlobalLogger.Info("创建订阅者报错:", err)
-			continue
+						TriggerSuccess:
+							subscribersMutexes[i].Unlock()
+						}
+						subscribersTimeMutexes[i].Unlock()
+					},
+				})
+			}
+			if err != nil {
+				c_log.GlobalLogger.Info("创建订阅者报错,可能由于节点未启动,再次尝试:", err)
+				time.Sleep(time.Duration(2) * time.Second)
+				continue
+			} else {
+				break
+			}
 		}
 	}