CloseTargetDisappears.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "cicv-data-closedloop/pjisuv_msgs"
  4. "fmt"
  5. "math"
  6. "sync"
  7. )
  8. func Topic() string {
  9. return "/tpperception"
  10. }
  11. // 禁止存在下划线_
  12. func Label() string {
  13. return "CloseTargetDisappears"
  14. }
  15. func IsDisappears(PreCloseTargetSlice []uint32, perceptionslice []uint32) bool {
  16. flag := false
  17. if len(PreCloseTargetSlice) > 0 {
  18. lable1:
  19. for i := 0; i <= len(PreCloseTargetSlice)-1; i++ {
  20. PreID := PreCloseTargetSlice[i]
  21. for _, perceptionID := range perceptionslice {
  22. if PreID == perceptionID {
  23. continue lable1
  24. }
  25. }
  26. //fmt.Println("CloseTargetDisappears")
  27. return true
  28. }
  29. }
  30. return flag
  31. }
  32. func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionObjects) string {
  33. defer func() {
  34. if r := recover(); r != nil {
  35. fmt.Println("Recovered from panic:", r)
  36. }
  37. }()
  38. PreCloseTargetSlice, ok := shareVars.Load("PreCloseTargetSlice")
  39. OutsideWorkshopFlag, ok3 := shareVars.Load("OutsideWorkshopFlag")
  40. if ok && ok3 && OutsideWorkshopFlag.(bool) {
  41. NowCloseTargetSlice := []uint32{}
  42. perceptionslice := []uint32{}
  43. for _, obj := range data.Objs {
  44. perceptionslice = append(perceptionslice, obj.Id)
  45. if math.Abs(float64(obj.X)) <= 20 && math.Abs(float64(obj.Y)) <= 10 {
  46. NowCloseTargetSlice = append(NowCloseTargetSlice, obj.Id)
  47. }
  48. }
  49. if IsDisappears(PreCloseTargetSlice.([]uint32), perceptionslice) {
  50. eventLabel := "CloseTargetDisappears"
  51. fmt.Println(eventLabel)
  52. PreCloseTargetSlice = NowCloseTargetSlice
  53. shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice)
  54. return Label()
  55. }
  56. PreCloseTargetSlice = NowCloseTargetSlice
  57. shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice)
  58. }
  59. return ""
  60. }