FrontCarSideBySide.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. "time"
  11. )
  12. var (
  13. countSideBySide = 0
  14. param entity.PjisuvParam
  15. )
  16. func main() {
  17. ticker := time.NewTicker(3 * time.Second)
  18. defer ticker.Stop()
  19. go listener()
  20. for {
  21. select {
  22. case <-ticker.C:
  23. FinalCallback()
  24. }
  25. }
  26. }
  27. func FinalCallback() {
  28. if countSideBySide >= 60 {
  29. event_lable := "FrontCarSideBySide"
  30. fmt.Println(event_lable)
  31. }
  32. countSideBySide = 0
  33. }
  34. func CallbackCicvLocation(data *pjisuv_msgs.PerceptionLocalization) {
  35. param.AbsSpeed = math.Sqrt(math.Pow(data.VelocityX, 2) + math.Pow(data.VelocityY, 2))
  36. }
  37. func CallbackTpperception(data *pjisuv_msgs.PerceptionObjects) {
  38. lable1:
  39. for _, obj := range data.Objs {
  40. //if !(obj.Type != 2 || obj.Type != 3 || obj.Type != 4 || !(obj.X >= 3 && obj.X <= 17) || math.Abs(float64(obj.Y)) > 10)
  41. if !(!(obj.X >= 3 && obj.X <= 17) || math.Abs(float64(obj.Y)) > 10) {
  42. //fmt.Println("here")
  43. obj1ID := obj.Id
  44. obj1x := obj.X
  45. obj1y := obj.Y
  46. //fmt.Println(obj1ID, obj1x, obj1y)
  47. for _, obj1 := range data.Objs {
  48. //if !(obj1.Type != 2 || obj1.Type != 3 || obj1.Type != 4 || !(obj1.X >= 3 && obj1.X <= 17) || math.Abs(float64(obj1.Y)) > 10)
  49. if !(!(obj1.X >= 3 && obj1.X <= 17) || math.Abs(float64(obj1.Y)) > 10) {
  50. obj2ID := obj1.Id
  51. obj2x := obj1.X
  52. obj2y := obj1.Y
  53. if obj2ID != obj1ID && math.Abs(float64(obj2x-obj1x)) <= 2.2 && math.Abs(float64(obj2y-obj1y)) >= 2 && math.Abs(float64(obj2y-obj1y)) <= 4.0 && param.AbsSpeed > 2 {
  54. countSideBySide++
  55. break lable1
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. func listener() {
  63. // create a node and connect to the master
  64. n, err := goroslib.NewNode(goroslib.NodeConf{
  65. Name: "goroslib_sub",
  66. MasterAddress: "127.0.0.1:11311",
  67. })
  68. if err != nil {
  69. panic(err)
  70. }
  71. defer n.Close()
  72. // create a subscriber
  73. subCicvLocation, err := goroslib.NewSubscriber(goroslib.SubscriberConf{
  74. Node: n,
  75. Topic: "/cicv_location",
  76. Callback: CallbackCicvLocation,
  77. })
  78. if err != nil {
  79. panic(err)
  80. }
  81. defer subCicvLocation.Close()
  82. // create a subscriber
  83. subTpperception, err := goroslib.NewSubscriber(goroslib.SubscriberConf{
  84. Node: n,
  85. Topic: "tpperception",
  86. Callback: CallbackTpperception,
  87. })
  88. if err != nil {
  89. panic(err)
  90. }
  91. defer subTpperception.Close()
  92. // wait for CTRL-C
  93. c := make(chan os.Signal, 1)
  94. signal.Notify(c, os.Interrupt)
  95. <-c
  96. }