package main import ( "cicv-data-closedloop/pjisuv_msgs" "fmt" "math" "sync" ) func Topic() string { return "/tpperception" } // 禁止存在下划线_ func Label() string { return "CloseTargetDisappears" } func IsDisappears(PreCloseTargetSlice []uint32, perceptionslice []uint32) bool { flag := false if len(PreCloseTargetSlice) > 0 { lable1: for i := 0; i <= len(PreCloseTargetSlice)-1; i++ { PreID := PreCloseTargetSlice[i] for _, perceptionID := range perceptionslice { if PreID == perceptionID { continue lable1 } } //fmt.Println("CloseTargetDisappears") return true } } return flag } func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionObjects) string { defer func() { if r := recover(); r != nil { fmt.Println("Recovered from panic:", r) } }() PreCloseTargetSlice, ok := shareVars.Load("PreCloseTargetSlice") OutsideWorkshopFlag, ok3 := shareVars.Load("OutsideWorkshopFlag") if ok && ok3 && OutsideWorkshopFlag.(bool) { NowCloseTargetSlice := []uint32{} perceptionslice := []uint32{} for _, obj := range data.Objs { perceptionslice = append(perceptionslice, obj.Id) if math.Abs(float64(obj.X)) <= 20 && math.Abs(float64(obj.Y)) <= 10 { NowCloseTargetSlice = append(NowCloseTargetSlice, obj.Id) } } if IsDisappears(PreCloseTargetSlice.([]uint32), perceptionslice) { eventLabel := "CloseTargetDisappears" fmt.Println(eventLabel) PreCloseTargetSlice = NowCloseTargetSlice shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice) return Label() } PreCloseTargetSlice = NowCloseTargetSlice shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice) } return "" }