master_trigger_cfg.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package cfg
  2. import (
  3. "cicv-data-closedloop/kinglong/common/cfg"
  4. "cicv-data-closedloop/kinglong/common/cutil"
  5. "cicv-data-closedloop/kinglong/common/log"
  6. "cicv-data-closedloop/kinglong_msgs"
  7. "plugin"
  8. "strconv"
  9. "strings"
  10. )
  11. var (
  12. TopicOfNodeFaultInfo = "/nodefault_info"
  13. TopicOfCicvLocation = "/cicv_location"
  14. TopicOfTpperception = "/tpperception"
  15. TopicOfFaultInfo = "/fault_info"
  16. TopicOfDataRead = "/data_read"
  17. RuleOfNodefaultInfo []func(data *kinglong_msgs.FaultInfo) string
  18. RuleOfCicvLocation []func(data *kinglong_msgs.PerceptionLocalization) string
  19. RuleOfTpperception []func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string
  20. RuleOfFaultInfo []func(data *kinglong_msgs.FaultVec) string
  21. RuleOfDataRead []func(data *kinglong_msgs.Retrieval) string
  22. LabelMapTriggerId = make(map[string]string)
  23. )
  24. //func InitTriggerConfig() {
  25. // log.GlobalLogger.Info("主节点加载触发器插件 - 开始。")
  26. // LabelMapTriggerId["rapidaccel"] = strconv.Itoa(1744178491185696770)
  27. // LabelMapTriggerId["brake"] = strconv.Itoa(1744178775815360514)
  28. // LabelMapTriggerId["EmergencyStop"] = strconv.Itoa(1744178920674037761)
  29. // LabelMapTriggerId["AutoDLimit"] = strconv.Itoa(1744177451715530754)
  30. // LabelMapTriggerId["lanechange"] = strconv.Itoa(1744180284594589697)
  31. // LabelMapTriggerId["brakefault"] = strconv.Itoa(1744180401267544065)
  32. // LabelMapTriggerId["takeover"] = strconv.Itoa(1744180567135490049)
  33. // LabelMapTriggerId["TTC"] = strconv.Itoa(1744180835122155522)
  34. // log.GlobalLogger.Info("触发器label对应id为:", LabelMapTriggerId)
  35. // RuleOfCicvLocation = append(RuleOfCicvLocation,
  36. // func(data *masterEntity.PerceptionLocalization) string {
  37. // if data.AccelX*9.8 > 2.0 {
  38. // log.GlobalLogger.Info("rapidaccel 触发")
  39. // return "rapidaccel"
  40. // } else {
  41. // //log.GlobalLogger.Info("rapidaccel 未触发")
  42. // return ""
  43. // }
  44. // },
  45. // func(data *masterEntity.PerceptionLocalization) string {
  46. // if data.AccelX*9.8 < -2.5 {
  47. // log.GlobalLogger.Info("brake 触发")
  48. // return "brake"
  49. // } else {
  50. // //log.GlobalLogger.Info("brake 未触发")
  51. // return ""
  52. // }
  53. // },
  54. // )
  55. // //RuleOfDataRead = append(RuleOfDataRead,
  56. // // func(data *masterEnt.Retrieval) string {
  57. // // log.GlobalLogger.Info("/data 数据为:")
  58. // // // 紧急停车激活
  59. // // if data.EmergencyStopReason != 0 {
  60. // // log.GlobalLogger.Info("EmergencyStop 触发")
  61. // // return "EmergencyStop"
  62. // // }
  63. // // //log.GlobalLogger.Info("EmergencyStop 未触发")
  64. // // return ""
  65. // // },
  66. // // func(data *masterEnt.Retrieval) string {
  67. // // log.GlobalLogger.Info("/data 数据为:")
  68. // // // 限制进入自动驾驶
  69. // // if data.AutoDLimitInReason != 0 {
  70. // // log.GlobalLogger.Info("AutoDLimit 触发")
  71. // // return "AutoDLimit"
  72. // // }
  73. // // //log.GlobalLogger.Info("AutoDLimit 未触发")
  74. // // return ""
  75. // // },
  76. // // func(data *masterEnt.Retrieval) string {
  77. // // log.GlobalLogger.Info("/data 数据为:")
  78. // // // 车辆紧急换道
  79. // // if math.Abs(data.StrgAngleRealValue) > 10 && data.StrgAngleSpdValue >= 25 && data.StrgAngleSpdValue <= 45 {
  80. // // log.GlobalLogger.Info("lanechange 触发")
  81. // // return "lanechange"
  82. // // }
  83. // // //log.GlobalLogger.Info("lanechange 未触发")
  84. // // return ""
  85. // // },
  86. // // func(data *masterEnt.Retrieval) string {
  87. // // log.GlobalLogger.Info("/data 数据为:")
  88. // // // 制动系统故障
  89. // // if data.BrakeSysFaultSt != 0 {
  90. // // log.GlobalLogger.Info("brakefault 触发")
  91. // // return "brakefault"
  92. // // }
  93. // // //log.GlobalLogger.Info("brakefault 未触发")
  94. // // return ""
  95. // // },
  96. // // func(data *masterEnt.Retrieval) string {
  97. // // log.GlobalLogger.Info("/data 数据为:")
  98. // // // 驾驶员接管
  99. // // if data.AsDriverTakeoverReq == 1 || data.VcuDriverTakeoverReq == 1 {
  100. // // log.GlobalLogger.Info("takeover 触发")
  101. // // return "takeover"
  102. // // }
  103. // // //log.GlobalLogger.Info("takeover 未触发")
  104. // // return ""
  105. // // },
  106. // //)
  107. // RuleOfTpperception = append(RuleOfTpperception,
  108. // func(data *masterEntity.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string {
  109. // //log.GlobalLogger.Info("TTC 触发")
  110. // //return "TTC"
  111. // //log.GlobalLogger.Info("/tpperception 物体个数为:", len(data.Objs))
  112. // for _, obj := range data.Objs {
  113. // //log.GlobalLogger.Info("【obj.X】=", obj.X)
  114. // //log.GlobalLogger.Info("【obj.Y】=", obj.Y)
  115. // if obj.X >= 8 && math.Abs(float64(obj.Y)) <= 2 {
  116. // theta := util.DegreesToRadians(yaw)
  117. // //log.GlobalLogger.Info("【theta】=", theta)
  118. // vxrel := (float64(obj.Vxabs)-velocityX)*math.Cos(theta) + (float64(obj.Vyabs)-velocityY)*math.Sin(theta)
  119. // //log.GlobalLogger.Info("【vxrel】=", vxrel)
  120. // ttc := -((float64(obj.X) - 5.2) / (vxrel + 0.001))
  121. // //log.GlobalLogger.Info("【ttc】=", ttc)
  122. // //if ttc >= 0 && ttc <= 3 {
  123. // if ttc >= 0 && ttc <= 5 {
  124. // log.GlobalLogger.Info("TTC 触发,值为:", ttc)
  125. // return "TTC"
  126. // }
  127. // }
  128. // }
  129. // log.GlobalLogger.Info("TTC 未触发")
  130. // return ""
  131. // },
  132. // )
  133. // log.GlobalLogger.Info("主节点加载触发器插件 - 成功。长度分别为:", len(RuleOfNodefaultInfo), len(RuleOfCicvLocation), len(RuleOfTpperception), len(RuleOfFaultInfo), len(RuleOfDataRead))
  134. //}
  135. func InitTriggerConfig() {
  136. log.GlobalLogger.Info("主节点加载触发器插件 - 开始。")
  137. // 下载所有触发器的文件
  138. for _, trigger := range cfg.PlatformConfig.TaskTriggers {
  139. // 获取文件名
  140. pathSplit := strings.Split(trigger.TriggerScriptPath, "/")
  141. fileName := pathSplit[len(pathSplit)-1]
  142. // 下载
  143. triggerLocalPath := cfg.CloudConfig.TriggersDir + fileName
  144. cutil.CreateParentDir(triggerLocalPath)
  145. log.GlobalLogger.Info("下载触发器插件从", trigger.TriggerScriptPath, "到", triggerLocalPath)
  146. err := cfg.OssBucket.GetObjectToFile(trigger.TriggerScriptPath, triggerLocalPath)
  147. if err != nil {
  148. log.GlobalLogger.Error("下载oss上的触发器插件失败:", err)
  149. continue
  150. }
  151. // 载入插件到数组
  152. open, err := plugin.Open(triggerLocalPath)
  153. if err != nil {
  154. log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "失败。", err)
  155. continue
  156. }
  157. topic0, err := open.Lookup("Topic")
  158. if err != nil {
  159. log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Topic方法失败。", err)
  160. continue
  161. }
  162. topic1, ok := topic0.(func() string)
  163. if ok != true {
  164. log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func() string):", err)
  165. continue
  166. }
  167. topic2 := topic1()
  168. rule, err := open.Lookup("Rule")
  169. if err != nil {
  170. log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Rule方法失败。", err)
  171. continue
  172. }
  173. if TopicOfNodeFaultInfo == topic2 {
  174. f := rule.(func(data *kinglong_msgs.FaultInfo) string)
  175. RuleOfNodefaultInfo = append(RuleOfNodefaultInfo, f)
  176. } else if TopicOfCicvLocation == topic2 {
  177. f := rule.(func(data *kinglong_msgs.PerceptionLocalization) string)
  178. RuleOfCicvLocation = append(RuleOfCicvLocation, f)
  179. } else if TopicOfTpperception == topic2 {
  180. f := rule.(func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string)
  181. RuleOfTpperception = append(RuleOfTpperception, f)
  182. } else if TopicOfFaultInfo == topic2 {
  183. f := rule.(func(data *kinglong_msgs.FaultVec) string)
  184. RuleOfFaultInfo = append(RuleOfFaultInfo, f)
  185. } else if TopicOfDataRead == topic2 {
  186. f := rule.(func(data *kinglong_msgs.Retrieval) string)
  187. RuleOfDataRead = append(RuleOfDataRead, f)
  188. } else {
  189. log.GlobalLogger.Error("未知的topic:", topic2)
  190. continue
  191. }
  192. label, err := open.Lookup("Label")
  193. if err != nil {
  194. log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Label方法失败。", err)
  195. continue
  196. }
  197. labelFunc := label.(func() string)
  198. labelString := labelFunc()
  199. LabelMapTriggerId[labelString] = strconv.Itoa(trigger.TriggerId)
  200. log.GlobalLogger.Info("主节点加载触发器插件:【ros topic】=", topic2, ",【触发器label】=", labelString, "【触发器ID】=", trigger.TriggerId, "【label和id映射关系】=", LabelMapTriggerId)
  201. }
  202. log.GlobalLogger.Info("主节点加载触发器插件 - 成功。")
  203. }