RearVehicleFollowingTooCloseHigh.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package main
  2. import (
  3. "cicv-data-closedloop/pjisuv_msgs"
  4. "fmt"
  5. "math"
  6. "sync"
  7. "time"
  8. )
  9. var (
  10. StartTime int64
  11. count1 int64
  12. )
  13. func Topic() string {
  14. return "/cicv_location"
  15. }
  16. // 禁止存在下划线_
  17. func Label() string {
  18. return "RearVehicleFollowingTooCloseHigh"
  19. }
  20. func IfObstaclesNearby(shareVars *sync.Map) bool {
  21. ObjDicOfTpperception, ok1 := shareVars.Load("objDicOfTpperception")
  22. ObjDic := ObjDicOfTpperception.(map[uint32][][]float32)
  23. if ok1 {
  24. for _, obj := range ObjDic {
  25. if obj[0][len(obj[0])-1] >= -12 && obj[0][len(obj[0])-1] <= -1 && (math.Abs(float64(obj[1][len(obj[1])-1]))) <= 2.0 {
  26. return true
  27. }
  28. }
  29. }
  30. return false
  31. }
  32. func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionLocalization) string {
  33. defer func() {
  34. if r := recover(); r != nil {
  35. fmt.Println("Recovered from panic:", r)
  36. }
  37. }()
  38. if count1%20 == 0 {
  39. OutsideWorkshopFlag, _ := shareVars.Load("OutsideWorkshopFlag")
  40. OutsideWorkshopFlag = OutsideWorkshopFlag.(bool)
  41. if OutsideWorkshopFlag == true {
  42. AbsSpeed, _ := shareVars.Load("AbsSpeed")
  43. flag := IfObstaclesNearby(shareVars)
  44. if AbsSpeed.(float64) >= 4 && flag {
  45. // 如果之前没有记录开始时间,记录当前时间
  46. if StartTime == 0 {
  47. StartTime = time.Now().Unix()
  48. }
  49. // 判断是否持续超过 50s
  50. if time.Now().Unix()-StartTime > 3 {
  51. count1 = 1
  52. return Label()
  53. }
  54. } else {
  55. // 如果速度大于 0.1,重置开始时间和停止标志
  56. StartTime = 0
  57. }
  58. } else {
  59. StartTime = 0
  60. }
  61. }
  62. count1++
  63. return ""
  64. }