TTC.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "cicv-data-closedloop/pjisuv_msgs"
  4. "fmt"
  5. "math"
  6. "sync"
  7. )
  8. /*
  9. def callback_tpperception(data):
  10. global obj_dic
  11. obj_list=data.objs
  12. for obj in obj_list:
  13. if obj.x>=5 and abs(obj.y)<=10: # 根据这个条件过滤一遍目标物 , 用于前车切入切出判别
  14. if obj.id not in obj_dic:
  15. obj_dic[obj.id]=[]
  16. obj_dic[obj.id].append(obj.y)
  17. if abs(obj.y)<=2 and obj.x>=6: # 根据这个条件过滤一遍目标物 , 用于计算TTC
  18. TTC=-(obj.x-4)/(obj.vxrel+0.0001)
  19. if 0<=TTC<=3:
  20. event_label='TTC'
  21. print(event_label)
  22. break
  23. */
  24. func Topic() string {
  25. return "/tpperception"
  26. }
  27. // 禁止存在下划线_
  28. func Label() string {
  29. return "TTC"
  30. }
  31. func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionObjects) string {
  32. defer func() {
  33. if r := recover(); r != nil {
  34. fmt.Println("Recovered from panic:", r)
  35. }
  36. }()
  37. velocityXOfCicvLocation, ok := shareVars.Load("VelocityXOfCicvLocation")
  38. if ok {
  39. value := velocityXOfCicvLocation.(float64)
  40. for _, obj := range data.Objs {
  41. if math.Abs(float64(obj.Y)) <= 2 && obj.X >= 6 && value > 0.5 {
  42. ttc := -((float64(obj.X) - 4) / (float64(obj.Vxrel) + 0.001))
  43. if ttc >= 0 && ttc <= 3 {
  44. return Label()
  45. }
  46. }
  47. }
  48. }
  49. return ""
  50. }