EgoReversing.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "cicv-data-closedloop/pjisuv_msgs"
  4. "fmt"
  5. "math"
  6. "sync"
  7. )
  8. var (
  9. count1 int = 0
  10. )
  11. func Topic() string {
  12. return "/cicv_location"
  13. }
  14. // 禁止存在下划线_
  15. func Label() string {
  16. return "EgoReversing"
  17. }
  18. func calculateDirectionAngle(speedX, speedY float64) float64 {
  19. // 使用反正切函数计算方向角
  20. angle := math.Atan2(speedY, speedX)
  21. // 将角度转换为度数
  22. angleDegree := angle * (180 / math.Pi)
  23. // 将角度限定在 0~360 范围内
  24. if angleDegree < 0 {
  25. angleDegree += 360
  26. } else if angleDegree > 360 {
  27. angleDegree -= 360
  28. }
  29. return angleDegree
  30. }
  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%200 == 0 {
  39. OutsideWorkshopFlag, ok3 := shareVars.Load("OutsideWorkshopFlag")
  40. if ok3 {
  41. directionAngle := calculateDirectionAngle(data.VelocityX, data.VelocityY)
  42. AbsSpeed, _ := shareVars.Load("AbsSpeed")
  43. diffAngle := math.Abs(float64(directionAngle - data.Yaw))
  44. //fmt.Println(diffAngle)
  45. if AbsSpeed.(float64) >= 1 && diffAngle >= 160 && diffAngle <= 200 && OutsideWorkshopFlag.(bool) {
  46. eventLabel := "EgoReversing"
  47. fmt.Println(eventLabel)
  48. count1 = 1
  49. return Label()
  50. }
  51. }
  52. }
  53. count1++
  54. return ""
  55. }