CarFollowingTooCloseAtNight.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 "CarFollowingTooCloseAtNight"
  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] <= 15 && obj[0][len(obj[0])-1] >= 3 && (math.Abs(float64(obj[1][len(obj[1])-1]))) <= 2.0 {
  26. return true
  27. }
  28. }
  29. }
  30. return false
  31. }
  32. func Ifatnight() bool {
  33. // 获取当前时间
  34. now := time.Now()
  35. later := now.Add(0 * time.Hour)
  36. // 获取当前小时
  37. hour := later.Hour()
  38. // 判断当前时间是白天还是夜晚
  39. if hour >= 0 && hour < 5 || hour >= 20 && hour <= 23 {
  40. return true
  41. } else {
  42. return false
  43. }
  44. }
  45. func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionLocalization) string {
  46. defer func() {
  47. if r := recover(); r != nil {
  48. fmt.Println("Recovered from panic:", r)
  49. }
  50. }()
  51. if count1%20 == 0 && Ifatnight() {
  52. OutsideWorkshopFlag, _ := shareVars.Load("OutsideWorkshopFlag")
  53. OutsideWorkshopFlag = OutsideWorkshopFlag.(bool)
  54. if OutsideWorkshopFlag == true {
  55. AbsSpeed, _ := shareVars.Load("AbsSpeed")
  56. flag := IfObstaclesNearby(shareVars)
  57. if AbsSpeed.(float64) > 1 && flag {
  58. // 如果之前没有记录开始时间,记录当前时间
  59. if StartTime == 0 {
  60. StartTime = time.Now().Unix()
  61. }
  62. // 判断是否持续超过 50s
  63. if time.Now().Unix()-StartTime > 3 {
  64. count1 = 1
  65. return Label()
  66. }
  67. } else {
  68. // 如果速度大于 0.1,重置开始时间和停止标志
  69. StartTime = 0
  70. }
  71. } else {
  72. StartTime = 0
  73. }
  74. }
  75. count1++
  76. return ""
  77. }