LingxinMeng 1 год назад
Родитель
Сommit
7918de0054

+ 28 - 14
aarch64/kinglong/master/package/config/master_trigger_cfg.go

@@ -3,6 +3,7 @@ package config
 import (
 	"cicv-data-closedloop/aarch64/kinglong/common/config"
 	"cicv-data-closedloop/common/config/c_log"
+	"cicv-data-closedloop/common/entity"
 	"cicv-data-closedloop/common/util"
 	"cicv-data-closedloop/kinglong_msgs"
 	"plugin"
@@ -10,17 +11,23 @@ import (
 )
 
 var (
-	TopicOfNodeFaultInfo = "/nodefault_info"
-	TopicOfCicvLocation  = "/cicv_location"
-	TopicOfTpperception  = "/tpperception"
-	TopicOfFaultInfo     = "/fault_info"
-	TopicOfDataRead      = "/data_read"
-	RuleOfNodefaultInfo  []func(data *kinglong_msgs.FaultInfo) string
-	RuleOfCicvLocation   []func(data *kinglong_msgs.PerceptionLocalization) string
-	RuleOfTpperception   []func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string
-	RuleOfFaultInfo      []func(data *kinglong_msgs.FaultVec) string
-	RuleOfDataRead       []func(data *kinglong_msgs.Retrieval) string
-	LabelMapTriggerId    = make(map[string]string)
+	TopicOfCicvExtend = "/cicv_extend"
+	RuleOfCicvExtend  []func(param entity.KinglongParam) string
+
+	TopicOfJinlongControlPub = "/jinlong_control_pub"
+	RuleOfJinlongControlPub  []func(data *kinglong_msgs.JinlongControlCommand) string
+	TopicOfNodeFaultInfo     = "/nodefault_info"
+	RuleOfNodefaultInfo      []func(data *kinglong_msgs.FaultInfo) string
+	TopicOfCicvLocation      = "/cicv_location"
+	RuleOfCicvLocation       []func(data *kinglong_msgs.PerceptionLocalization) string
+	TopicOfTpperception      = "/tpperception"
+	RuleOfTpperception       []func(data *kinglong_msgs.PerceptionObjects, param entity.KinglongParam) string
+	TopicOfFaultInfo         = "/fault_info"
+	RuleOfFaultInfo          []func(data *kinglong_msgs.FaultVec) string
+	TopicOfDataRead          = "/data_read"
+	RuleOfDataRead           []func(data *kinglong_msgs.Retrieval) string
+
+	LabelMapTriggerId = make(map[string]string)
 )
 
 func InitTriggerConfig() {
@@ -59,7 +66,14 @@ func InitTriggerConfig() {
 			c_log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Rule方法失败。", err)
 			continue
 		}
-		if TopicOfNodeFaultInfo == topic2 {
+		if TopicOfCicvExtend == topic2 { // 自定义扩展
+			f, ok := rule.(func(param entity.KinglongParam) string)
+			if ok != true {
+				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(param entity.ExtendParam):", err)
+				continue
+			}
+			RuleOfCicvExtend = append(RuleOfCicvExtend, f)
+		} else if TopicOfNodeFaultInfo == topic2 {
 			f, ok := rule.(func(data *kinglong_msgs.FaultInfo) string)
 			if ok != true {
 				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.FaultInfo) string):", err)
@@ -74,9 +88,9 @@ func InitTriggerConfig() {
 			}
 			RuleOfCicvLocation = append(RuleOfCicvLocation, f)
 		} else if TopicOfTpperception == topic2 {
-			f, ok := rule.(func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string)
+			f, ok := rule.(func(data *kinglong_msgs.PerceptionObjects, param entity.KinglongParam) string)
 			if ok != true {
-				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string):", err)
+				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.PerceptionObjects, param entity.KinglongParam) string):", err)
 				continue
 			}
 			RuleOfTpperception = append(RuleOfTpperception, f)

+ 68 - 48
aarch64/kinglong/master/package/service/produce_window.go

@@ -5,7 +5,7 @@ import (
 	"cicv-data-closedloop/aarch64/kinglong/common/service"
 	masterConfig "cicv-data-closedloop/aarch64/kinglong/master/package/config"
 	"cicv-data-closedloop/common/config/c_log"
-	"cicv-data-closedloop/common/entity"
+	commonEntity "cicv-data-closedloop/common/entity"
 	"cicv-data-closedloop/common/util"
 	"cicv-data-closedloop/kinglong_msgs"
 	"github.com/bluenviron/goroslib/v2"
@@ -14,10 +14,13 @@ import (
 )
 
 var (
-	m         sync.RWMutex
-	velocityX float64
-	velocityY float64
-	yaw       float64
+	extendParam commonEntity.KinglongParam
+	// /cicv_location
+	mutexOfCicvLocation sync.RWMutex
+	// /tpperception
+	mutexOfTpperception sync.RWMutex
+	// /pj_control_pub
+	mutexOfPjControlPub sync.RWMutex
 )
 
 // PrepareTimeWindowProducerQueue 负责监听所有主题并修改时间窗口
@@ -30,6 +33,20 @@ 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 {
+			for {
+				time.Sleep(time.Duration(3500) * time.Millisecond)
+				for _, f := range masterConfig.RuleOfCicvExtend {
+					label := f(extendParam)
+					if label != "" {
+						saveTimeWindow(label, util.GetNowTimeCustom(), commonEntity.GetLastTimeWindow())
+						break
+					}
+				}
+			}
+		}
+
 		c_log.GlobalLogger.Info("创建订阅者订阅话题:" + topic)
 		if topic == masterConfig.TopicOfCicvLocation && len(masterConfig.RuleOfCicvLocation) > 0 {
 			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
@@ -37,17 +54,20 @@ func PrepareTimeWindowProducerQueue() {
 				Topic: topic,
 				Callback: func(data *kinglong_msgs.PerceptionLocalization) {
 					// 更新共享变量
-					m.RLock()
-					velocityX = data.VelocityX
-					velocityY = data.VelocityY
-					yaw = data.Yaw
-					m.RUnlock()
+					mutexOfCicvLocation.RLock()
+					{
+						extendParam.VelocityYOfCicvLocation = data.VelocityX
+						extendParam.VelocityYOfCicvLocation = data.VelocityY
+						extendParam.YawOfCicvLocation = data.Yaw
+						extendParam.AngularVelocityZOfCicvLocation = data.AngularVelocityZ
+					}
+					mutexOfCicvLocation.RUnlock()
 
 					subscribersTimeMutexes[i].Lock()
 					if time.Since(subscribersTimes[i]).Seconds() > 1 {
 						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-						lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 						var faultLabel string
 						for _, f := range masterConfig.RuleOfCicvLocation {
 							faultLabel = f(data)
@@ -71,11 +91,11 @@ func PrepareTimeWindowProducerQueue() {
 					subscribersTimeMutexes[i].Lock()
 					if time.Since(subscribersTimes[i]).Seconds() > 1 {
 						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-						lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 						var faultLabel string
 						for _, f := range masterConfig.RuleOfTpperception {
-							faultLabel = f(data, velocityX, velocityY, yaw)
+							faultLabel = f(data, extendParam)
 							if faultLabel != "" {
 								saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
 								break
@@ -96,8 +116,8 @@ func PrepareTimeWindowProducerQueue() {
 					subscribersTimeMutexes[i].Lock()
 					if time.Since(subscribersTimes[i]).Seconds() > 1 {
 						subscribersMutexes[i].Lock()
-						faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-						lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+						faultHappenTime := util.GetNowTimeCustom()         // 获取当前故障发生时间
+						lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 						var faultLabel string
 						for _, f := range masterConfig.RuleOfDataRead {
 							faultLabel = f(data)
@@ -131,24 +151,24 @@ func PrepareTimeWindowProducerQueue() {
 	//			//c_log.GlobalLogger.Info("话题 nodefault_info没有触发器")
 	//			return
 	//		}
-	//		entity.Subscriber0TimeMutex.Lock()
-	//		if time.Since(entity.Subscriber0Time).Seconds() > 1 {
-	//			entity.Subscriber0TimeMutex.Unlock()
+	//		commonEntity.Subscriber0TimeMutex.Lock()
+	//		if time.Since(commonEntity.Subscriber0Time).Seconds() > 1 {
+	//			commonEntity.Subscriber0TimeMutex.Unlock()
 	//			subscriber0Mutex.Lock()
 	//			faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-	//			lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+	//			lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 	//			var faultLabel string
 	//			for _, f := range masterConfig.RuleOfNodefaultInfo {
 	//				faultLabel = f(data)
 	//				if faultLabel != "" {
 	//					saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-	//					entity.Subscriber0Time = time.Now()
+	//					commonEntity.Subscriber0Time = time.Now()
 	//					break
 	//				}
 	//			}
 	//			subscriber0Mutex.Unlock()
 	//		}
-	//		entity.Subscriber0TimeMutex.Unlock()
+	//		commonEntity.Subscriber0TimeMutex.Unlock()
 	//	}})
 	//if err != nil {
 	//	c_log.GlobalLogger.Info("创建订阅者发生故障:", err)
@@ -170,24 +190,24 @@ func PrepareTimeWindowProducerQueue() {
 	//			c_log.GlobalLogger.Info("话题 cicv_location 没有触发器")
 	//			return
 	//		}
-	//		entity.Subscriber1TimeMutex.Lock()
-	//		if time.Since(entity.Subscriber1Time).Seconds() > 1 {
+	//		commonEntity.Subscriber1TimeMutex.Lock()
+	//		if time.Since(commonEntity.Subscriber1Time).Seconds() > 1 {
 	//			subscriber1Mutex.Lock()
 	//			faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-	//			lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+	//			lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 	//			// 更新共享变量
 	//			var faultLabel string
 	//			for _, f := range masterConfig.RuleOfCicvLocation {
 	//				faultLabel = f(data)
 	//				if faultLabel != "" {
 	//					saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-	//					entity.Subscriber1Time = time.Now()
+	//					commonEntity.Subscriber1Time = time.Now()
 	//					break
 	//				}
 	//			}
 	//			subscriber1Mutex.Unlock()
 	//		}
-	//		entity.Subscriber1TimeMutex.Unlock()
+	//		commonEntity.Subscriber1TimeMutex.Unlock()
 	//	},
 	//})
 	//if err != nil {
@@ -203,26 +223,26 @@ func PrepareTimeWindowProducerQueue() {
 	//			c_log.GlobalLogger.Info("话题 tpperception 没有触发器")
 	//			return
 	//		}
-	//		entity.Subscriber2TimeMutex.Lock()
+	//		commonEntity.Subscriber2TimeMutex.Lock()
 	//		// 判断是否是连续故障码
-	//		if time.Since(entity.Subscriber2Time).Seconds() > 1 {
+	//		if time.Since(commonEntity.Subscriber2Time).Seconds() > 1 {
 	//			// 2 不是连续故障码
 	//			subscriber2Mutex.Lock()
 	//			faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-	//			lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+	//			lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 	//			var faultLabel string
 	//			//c_log.GlobalLogger.Infof("TTC数据为:【velocityX】=%v,【velocityY】=%v", velocityX, velocityY)
 	//			for _, f := range masterConfig.RuleOfTpperception {
 	//				faultLabel = f(data, velocityX, velocityY, yaw)
 	//				if faultLabel != "" {
 	//					saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-	//					entity.Subscriber2Time = time.Now()
+	//					commonEntity.Subscriber2Time = time.Now()
 	//					break
 	//				}
 	//			}
 	//			subscriber2Mutex.Unlock()
 	//		}
-	//		entity.Subscriber2TimeMutex.Unlock()
+	//		commonEntity.Subscriber2TimeMutex.Unlock()
 	//	}})
 	//if err != nil {
 	//	c_log.GlobalLogger.Info("创建订阅者2发生故障:", err)
@@ -238,24 +258,24 @@ func PrepareTimeWindowProducerQueue() {
 	//			c_log.GlobalLogger.Info("话题 fault_info 没有触发器")
 	//			return
 	//		}
-	//		entity.Subscriber3TimeMutex.Lock()
-	//		if time.Since(entity.Subscriber3Time).Seconds() > 1 {
+	//		commonEntity.Subscriber3TimeMutex.Lock()
+	//		if time.Since(commonEntity.Subscriber3Time).Seconds() > 1 {
 	//			// 2 不是连续故障码
 	//			subscriber3Mutex.Lock()
 	//			faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-	//			lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+	//			lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 	//			var faultLabel string
 	//			for _, f := range masterConfig.RuleOfFaultInfo {
 	//				faultLabel = f(data)
 	//				if faultLabel != "" {
 	//					saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-	//					entity.Subscriber3Time = time.Now()
+	//					commonEntity.Subscriber3Time = time.Now()
 	//					break
 	//				}
 	//			}
 	//			subscriber3Mutex.Unlock()
 	//		}
-	//		entity.Subscriber3TimeMutex.Unlock()
+	//		commonEntity.Subscriber3TimeMutex.Unlock()
 	//	}})
 	//if err != nil {
 	//	c_log.GlobalLogger.Info("创建订阅者3发生故障:", err)
@@ -272,23 +292,23 @@ func PrepareTimeWindowProducerQueue() {
 	//			//c_log.GlobalLogger.Info("话题 data_read 没有触发器")
 	//			return
 	//		}
-	//		entity.Subscriber4TimeMutex.Lock()
-	//		if time.Since(entity.Subscriber4Time).Seconds() > 1 {
+	//		commonEntity.Subscriber4TimeMutex.Lock()
+	//		if time.Since(commonEntity.Subscriber4Time).Seconds() > 1 {
 	//			subscriber4Mutex.Lock()
 	//			faultHappenTime := util.GetNowTimeCustom()   // 获取当前故障发生时间
-	//			lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
+	//			lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
 	//			var faultLabel string
 	//			for _, f := range masterConfig.RuleOfDataRead {
 	//				faultLabel = f(data)
 	//				if faultLabel != "" {
 	//					saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
-	//					entity.Subscriber4Time = time.Now()
+	//					commonEntity.Subscriber4Time = time.Now()
 	//					break
 	//				}
 	//			}
 	//			subscriber4Mutex.Unlock()
 	//		}
-	//		entity.Subscriber4TimeMutex.Unlock()
+	//		commonEntity.Subscriber4TimeMutex.Unlock()
 	//	},
 	//})
 	//if err != nil {
@@ -305,11 +325,11 @@ func PrepareTimeWindowProducerQueue() {
 	}
 }
 
-func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *entity.TimeWindow) {
+func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *commonEntity.TimeWindow) {
 	masterTopics, slaveTopics := getTopicsOfNode(faultLabel)
 	if lastTimeWindow == nil || util.TimeCustom1GreaterTimeCustom2(faultHappenTime, lastTimeWindow.TimeWindowEnd) {
 		// 2-1 如果是不在旧故障窗口内,添加一个新窗口
-		newTimeWindow := entity.TimeWindow{
+		newTimeWindow := commonEntity.TimeWindow{
 			FaultTime:       faultHappenTime,
 			TimeWindowBegin: util.TimeCustomChange(faultHappenTime, -commonConfig.PlatformConfig.TaskBeforeTime),
 			TimeWindowEnd:   util.TimeCustomChange(faultHappenTime, commonConfig.PlatformConfig.TaskAfterTime),
@@ -319,11 +339,11 @@ func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *e
 			SlaveTopics:     slaveTopics,
 		}
 		c_log.GlobalLogger.Infof("不在旧故障窗口内,向生产者队列添加一个新窗口,【Lable】=%v,【FaultTime】=%v,【Length】=%v", newTimeWindow.Labels, newTimeWindow.FaultTime, newTimeWindow.Length)
-		entity.AddTimeWindowToTimeWindowProducerQueue(newTimeWindow)
+		commonEntity.AddTimeWindowToTimeWindowProducerQueue(newTimeWindow)
 	} else {
 		// 2-2 如果在旧故障窗口内
-		entity.TimeWindowProducerQueueMutex.RLock()
-		defer entity.TimeWindowProducerQueueMutex.RUnlock()
+		commonEntity.TimeWindowProducerQueueMutex.RLock()
+		defer commonEntity.TimeWindowProducerQueueMutex.RUnlock()
 		// 2-2-1 更新故障窗口end时间
 		maxEnd := util.TimeCustomChange(lastTimeWindow.TimeWindowBegin, commonConfig.PlatformConfig.TaskMaxTime)
 		expectEnd := util.TimeCustomChange(faultHappenTime, commonConfig.PlatformConfig.TaskAfterTime)

+ 4 - 4
aarch64/pjisuv/master/config/master_trigger_config.go

@@ -19,7 +19,7 @@ import (
 var (
 	// 扩展
 	TopicOfCicvExtend = "/cicv_extend"
-	RuleOfCicvExtend  []func(param entity.ExtendParam) string
+	RuleOfCicvExtend  []func(param entity.PjisuvParam) string
 
 	//1
 	TopicOfAmrPose = "/amr_pose"
@@ -139,7 +139,7 @@ var (
 
 	//30
 	TopicOfTpperception = "/tpperception"
-	RuleOfTpperception  []func(data *pjisuv_msgs.PerceptionObjects, extendParam entity.ExtendParam) string
+	RuleOfTpperception  []func(data *pjisuv_msgs.PerceptionObjects, extendParam entity.PjisuvParam) string
 
 	//31
 	TopicOfTpperceptionVis = "/tpperception/vis"
@@ -210,7 +210,7 @@ func InitTriggerConfig() {
 		}
 
 		if TopicOfCicvExtend == topic2 { // 自定义扩展
-			f, ok := rule.(func(param entity.ExtendParam) string)
+			f, ok := rule.(func(param entity.PjisuvParam) string)
 			if ok != true {
 				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(param entity.ExtendParam):", err)
 				continue
@@ -420,7 +420,7 @@ func InitTriggerConfig() {
 			}
 			RuleOfTf = append(RuleOfTf, f)
 		} else if TopicOfTpperception == topic2 { //30
-			f, ok := rule.(func(data *pjisuv_msgs.PerceptionObjects, param entity.ExtendParam) string)
+			f, ok := rule.(func(data *pjisuv_msgs.PerceptionObjects, param entity.PjisuvParam) string)
 			if ok != true {
 				c_log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *pjisuv_msgs.PerceptionObjects, param entity.ExtendParam) string):", err)
 				continue

+ 2 - 2
aarch64/pjisuv/master/service/produce_window.go

@@ -22,7 +22,7 @@ import (
 // 所有共享变量
 // todo 如果触发器订阅了多个topic,需要定制化缓存指定字段;也可以将所有topic的所有字段值实时缓存,工作量太大,暂时搁置
 var (
-	extendParam commonEntity.ExtendParam
+	extendParam commonEntity.PjisuvParam
 	// /cicv_location
 	mutexOfCicvLocation sync.RWMutex
 	// /tpperception
@@ -871,7 +871,7 @@ func PrepareTimeWindowProducerQueue() {
 					mutexOfTpperception.RLock()
 					{
 						for _, obj := range data.Objs {
-							if obj.X <= 5 || math.Abs(float64(obj.Y)) >= 10 {
+							if (obj.Type != 1 && obj.Type != 0) || obj.X <= 5 || math.Abs(float64(obj.Y)) >= 10 {
 								continue
 							}
 							if _, ok := extendParam.ObjDicOfTpperception[obj.Id]; !ok {

+ 22 - 1
common/entity/extend_param.go

@@ -1,6 +1,27 @@
 package entity
 
-type ExtendParam struct {
+type PjisuvParam struct {
+	// /cicv_location
+	VelocityXOfCicvLocation        float64
+	VelocityYOfCicvLocation        float64
+	YawOfCicvLocation              float64
+	AngularVelocityZOfCicvLocation float64
+
+	// /tpperception
+	ObjDicOfTpperception map[uint32][]float32
+
+	// /pji_control_pub
+	NumCountPjiControlCommandOfPjControlPub int
+	EgoSteeringCmdOfPjControlPub            []float64
+	EgoThrottleCmdOfPjControlPub            []float64
+	// /data_read
+	NumCountDataReadOfDataRead   int
+	EgoSteeringRealOfDataRead    []float64
+	EgoThrottleRealOfDataRead    []float64
+	StrgAngleRealValueOfDataRead float64
+}
+
+type KinglongParam struct {
 	// /cicv_location
 	VelocityXOfCicvLocation        float64
 	VelocityYOfCicvLocation        float64

+ 3 - 3
trigger/pjisuv/cicv_extend/cutin_difference/main/cutin_difference.go

@@ -15,7 +15,7 @@ func Label() string {
 	return "brake"
 }
 
-func Rule(param entity.ExtendParam) string {
+func Rule(param entity.PjisuvParam) string {
 	for _, objValue := range param.ObjDicOfTpperception {
 		if len(objValue) <= 5 || !isCuttingIn(objValue, param) || !isDifference(param) {
 			continue
@@ -25,7 +25,7 @@ func Rule(param entity.ExtendParam) string {
 	return ""
 }
 
-func isCuttingIn(objYList []float32, param entity.ExtendParam) bool {
+func isCuttingIn(objYList []float32, param entity.PjisuvParam) bool {
 	for i, objY := range objYList {
 		if math.Abs(float64(objY)) >= 1.1 && math.Abs(param.AngularVelocityZOfCicvLocation) <= 0.6 {
 			for j := 0; j < len(objYList)-i-1; j++ {
@@ -39,7 +39,7 @@ func isCuttingIn(objYList []float32, param entity.ExtendParam) bool {
 }
 
 // 利用曼惠特尼U检验的方式判断车端数据和驾驶员控制数据是否存在显著差异
-func isDifference(param entity.ExtendParam) bool {
+func isDifference(param entity.PjisuvParam) bool {
 	_, pValueSteering := mannWhitneyUTest(param.EgoSteeringRealOfDataRead, param.EgoSteeringCmdOfPjControlPub)
 	_, pValueThrottle := mannWhitneyUTest(param.EgoThrottleRealOfDataRead, param.EgoThrottleCmdOfPjControlPub)
 	if pValueSteering < 0.05 || pValueThrottle < 0.05 {

+ 3 - 3
trigger/pjisuv/cicv_extend/cutout_difference/main/cutout_difference.go

@@ -15,7 +15,7 @@ func Label() string {
 	return "cutout_difference"
 }
 
-func Rule(param entity.ExtendParam) string {
+func Rule(param entity.PjisuvParam) string {
 	for _, objValue := range param.ObjDicOfTpperception {
 		if len(objValue) <= 5 || !isCuttingOut(objValue, param) || !isDifference(param) {
 			continue
@@ -25,7 +25,7 @@ func Rule(param entity.ExtendParam) string {
 	return ""
 }
 
-func isCuttingOut(objYList []float32, param entity.ExtendParam) bool {
+func isCuttingOut(objYList []float32, param entity.PjisuvParam) bool {
 	for i, objY := range objYList {
 		if math.Abs(float64(objY)) <= 0.6 && math.Abs(param.AngularVelocityZOfCicvLocation) <= 0.6 {
 			for j := 0; j < len(objYList)-i-1; j++ {
@@ -39,7 +39,7 @@ func isCuttingOut(objYList []float32, param entity.ExtendParam) bool {
 }
 
 // 利用曼惠特尼U检验的方式判断车端数据和驾驶员控制数据是否存在显著差异
-func isDifference(param entity.ExtendParam) bool {
+func isDifference(param entity.PjisuvParam) bool {
 	_, pValueSteering := mannWhitneyUTest(param.EgoSteeringRealOfDataRead, param.EgoSteeringCmdOfPjControlPub)
 	_, pValueThrottle := mannWhitneyUTest(param.EgoThrottleRealOfDataRead, param.EgoThrottleCmdOfPjControlPub)
 	if pValueSteering < 0.05 || pValueThrottle < 0.05 {