CPTA_f.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package main
  2. import (
  3. "awesomeProject/entity"
  4. "awesomeProject/pjisuv_msgs"
  5. "fmt"
  6. "github.com/bluenviron/goroslib/v2"
  7. "math"
  8. "os"
  9. "os/signal"
  10. )
  11. var (
  12. LeftCurveFlag = false
  13. RightCurveFlag = false
  14. param entity.PjisuvParam
  15. )
  16. func main() {
  17. go listener()
  18. for {
  19. select {}
  20. }
  21. }
  22. func CallbackTpperception(data *pjisuv_msgs.PerceptionObjects) {
  23. if LeftCurveFlag == true {
  24. for _, obj := range data.Objs {
  25. //if obj.Type == 1 { //理论条件
  26. if obj.Type != 100 { //简化条件
  27. Distance := math.Sqrt(math.Pow(param.PositionXOfCicvLocation-obj.Xabs, 2) + math.Pow(param.PositionYOfCicvLocation-obj.Yabs, 2))
  28. Objspeed := math.Sqrt(math.Pow(float64(obj.Vxabs), 2) + math.Pow(float64(obj.Vyabs), 2))
  29. //fmt.Println("Distance:", Distance)
  30. if obj.X >= 2.0 && obj.X <= 30.0 && Distance <= 25.0 && Objspeed >= 0.7 {
  31. event_lable := "CPTA_f"
  32. fmt.Println(event_lable)
  33. break
  34. }
  35. }
  36. }
  37. }
  38. }
  39. func CallbackTrajectory(data *pjisuv_msgs.Trajectory) {
  40. Trajectorypoints := data.Trajectoryinfo.Trajectorypoints
  41. if len(Trajectorypoints) > 2 {
  42. StartHeading := Trajectorypoints[0].Heading
  43. EndHeading := Trajectorypoints[len(Trajectorypoints)-1].Heading
  44. diffHeading := StartHeading - EndHeading
  45. //fmt.Println(diffHeading)
  46. if diffHeading < -1.0 && diffHeading > -3.0 {
  47. LeftCurveFlag = true
  48. //fmt.Println(diffHeading)
  49. } else {
  50. LeftCurveFlag = false
  51. }
  52. if diffHeading > 1.0 && diffHeading < 3.0 {
  53. RightCurveFlag = true
  54. //fmt.Println(diffHeading)
  55. } else {
  56. RightCurveFlag = false
  57. }
  58. } else {
  59. LeftCurveFlag = false
  60. RightCurveFlag = false
  61. }
  62. }
  63. func CallbackCicvLocation(data *pjisuv_msgs.PerceptionLocalization) {
  64. param.PositionXOfCicvLocation = data.PositionX
  65. param.PositionYOfCicvLocation = data.PositionY
  66. }
  67. func listener() {
  68. // create a node and connect to the master
  69. n, err := goroslib.NewNode(goroslib.NodeConf{
  70. Name: "goroslib_sub",
  71. MasterAddress: "127.0.0.1:11311",
  72. })
  73. if err != nil {
  74. panic(err)
  75. }
  76. defer n.Close()
  77. // create a subscriber
  78. subCicvLocation, err := goroslib.NewSubscriber(goroslib.SubscriberConf{
  79. Node: n,
  80. Topic: "/cicv_location",
  81. Callback: CallbackCicvLocation,
  82. })
  83. if err != nil {
  84. panic(err)
  85. }
  86. defer subCicvLocation.Close()
  87. // create a subscriber
  88. subTpperception, err := goroslib.NewSubscriber(goroslib.SubscriberConf{
  89. Node: n,
  90. Topic: "tpperception",
  91. Callback: CallbackTpperception,
  92. })
  93. if err != nil {
  94. panic(err)
  95. }
  96. defer subTpperception.Close()
  97. // create a subscriber
  98. subTrajectory, err := goroslib.NewSubscriber(goroslib.SubscriberConf{
  99. Node: n,
  100. Topic: "/cicv_amr_trajectory",
  101. Callback: CallbackTrajectory,
  102. })
  103. if err != nil {
  104. panic(err)
  105. }
  106. defer subTrajectory.Close()
  107. // wait for CTRL-C
  108. c := make(chan os.Signal, 1)
  109. signal.Notify(c, os.Interrupt)
  110. <-c
  111. }