|
@@ -5,7 +5,7 @@ import (
|
|
|
"cicv-data-closedloop/aarch64/pjisuv/common/service"
|
|
|
masterConfig "cicv-data-closedloop/aarch64/pjisuv/master/config"
|
|
|
"cicv-data-closedloop/common/config/c_log"
|
|
|
- "cicv-data-closedloop/common/entity"
|
|
|
+ commonEntity "cicv-data-closedloop/common/entity"
|
|
|
"cicv-data-closedloop/common/util"
|
|
|
"cicv-data-closedloop/pjisuv_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2"
|
|
@@ -14,15 +14,21 @@ import (
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/sensor_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/tf2_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/visualization_msgs"
|
|
|
+ "math"
|
|
|
"sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+// 所有共享变量
|
|
|
+// todo 如果触发器订阅了多个topic,需要定制化缓存指定字段;也可以将所有topic的所有字段值实时缓存,工作量太大,暂时搁置
|
|
|
var (
|
|
|
- m sync.RWMutex
|
|
|
- velocityX float64
|
|
|
- velocityY float64
|
|
|
- yaw float64
|
|
|
+ extendParam commonEntity.ExtendParam
|
|
|
+ // /cicv_location
|
|
|
+ mutexOfCicvLocation sync.RWMutex
|
|
|
+ // /tpperception
|
|
|
+ mutexOfTpperception sync.RWMutex
|
|
|
+ // /pj_control_pub
|
|
|
+ mutexOfPjControlPub sync.RWMutex
|
|
|
)
|
|
|
|
|
|
// PrepareTimeWindowProducerQueue 负责监听所有主题并修改时间窗口
|
|
@@ -35,6 +41,21 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes := make([]sync.Mutex, len(commonConfig.SubscribeTopics))
|
|
|
subscribersMutexes := make([]sync.Mutex, len(commonConfig.SubscribeTopics))
|
|
|
for i, topic := range commonConfig.SubscribeTopics {
|
|
|
+ // !!!扩展的定时任务监听,牛逼的设计!!!扩展性拉满啦
|
|
|
+ if topic == masterConfig.TopicOfCicvExtend {
|
|
|
+ for {
|
|
|
+ time.Sleep(time.Duration(3500) * time.Millisecond)
|
|
|
+ for _, f := range masterConfig.RuleOfCicvExtend {
|
|
|
+ label := f(extendParam)
|
|
|
+ if label != "" {
|
|
|
+ saveTimeWindow(label, util.GetNowTimeCustom(), commonEntity.GetLastTimeWindow())
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 其他常规监听器
|
|
|
c_log.GlobalLogger.Info("创建订阅者订阅话题:" + topic)
|
|
|
|
|
|
// 1
|
|
@@ -46,8 +67,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfAmrPose {
|
|
|
faultLabel = f(data)
|
|
@@ -73,8 +94,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfBoundingBoxesFast {
|
|
|
faultLabel = f(data)
|
|
@@ -100,8 +121,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCameraFault {
|
|
|
faultLabel = f(data)
|
|
@@ -127,8 +148,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCanData {
|
|
|
faultLabel = f(data)
|
|
@@ -154,8 +175,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCh128x1LslidarPointCloud {
|
|
|
faultLabel = f(data)
|
|
@@ -181,8 +202,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCh64wLLslidarPointCloud {
|
|
|
faultLabel = f(data)
|
|
@@ -208,8 +229,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCh64wLScan {
|
|
|
faultLabel = f(data)
|
|
@@ -235,8 +256,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCh64wRLslidarPointCloud {
|
|
|
faultLabel = f(data)
|
|
@@ -262,8 +283,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCh64wRScan {
|
|
|
faultLabel = f(data)
|
|
@@ -289,8 +310,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCicvLidarclusterMovingObjects {
|
|
|
faultLabel = f(data)
|
|
@@ -316,8 +337,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCicvAmrTrajectory {
|
|
|
faultLabel = f(data)
|
|
@@ -341,17 +362,20 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.PerceptionLocalization) {
|
|
|
// 更新共享变量
|
|
|
- m.RLock()
|
|
|
- velocityX = data.VelocityX
|
|
|
- velocityY = data.VelocityY
|
|
|
- yaw = data.Yaw
|
|
|
- m.RUnlock()
|
|
|
+ mutexOfCicvLocation.RLock()
|
|
|
+ {
|
|
|
+ extendParam.VelocityYOfCicvLocation = data.VelocityX
|
|
|
+ extendParam.VelocityYOfCicvLocation = data.VelocityY
|
|
|
+ extendParam.YawOfCicvLocation = data.Yaw
|
|
|
+ extendParam.AngularVelocityZOfCicvLocation = data.AngularVelocityZ
|
|
|
+ }
|
|
|
+ mutexOfCicvLocation.RUnlock()
|
|
|
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCicvLocation {
|
|
|
faultLabel = f(data)
|
|
@@ -376,8 +400,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCloudClusters {
|
|
|
faultLabel = f(data)
|
|
@@ -403,8 +427,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfHeartbeatInfo {
|
|
|
faultLabel = f(data)
|
|
@@ -430,8 +454,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfLidarPretreatmentCost {
|
|
|
faultLabel = f(data)
|
|
@@ -457,8 +481,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfLidarPretreatmentOdometry {
|
|
|
faultLabel = f(data)
|
|
@@ -484,8 +508,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfLidarRoi {
|
|
|
faultLabel = f(data)
|
|
@@ -511,8 +535,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfLine1 {
|
|
|
faultLabel = f(data)
|
|
@@ -538,8 +562,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfLine2 {
|
|
|
faultLabel = f(data)
|
|
@@ -565,8 +589,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfMapPolygon {
|
|
|
faultLabel = f(data)
|
|
@@ -592,8 +616,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfObstacleDisplay {
|
|
|
faultLabel = f(data)
|
|
@@ -616,11 +640,22 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.CommonVehicleCmd) {
|
|
|
+ // 更新共享变量
|
|
|
+ mutexOfPjControlPub.RLock()
|
|
|
+ {
|
|
|
+ extendParam.NumCountPjiControlCommandOfPjControlPub++
|
|
|
+ if extendParam.NumCountPjiControlCommandOfPjControlPub == 10 {
|
|
|
+ extendParam.EgoSteeringCmdOfPjControlPub = append(extendParam.EgoSteeringCmdOfPjControlPub, data.ICPVCmdStrAngle)
|
|
|
+ extendParam.EgoThrottleCmdOfPjControlPub = append(extendParam.EgoThrottleCmdOfPjControlPub, data.ICPVCmdAccPelPosAct)
|
|
|
+ extendParam.NumCountPjiControlCommandOfPjControlPub = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mutexOfPjControlPub.RUnlock()
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfPjControlPub {
|
|
|
faultLabel = f(data)
|
|
@@ -646,8 +681,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfPointsCluster {
|
|
|
faultLabel = f(data)
|
|
@@ -673,8 +708,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfPointsConcat {
|
|
|
faultLabel = f(data)
|
|
@@ -700,8 +735,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfReferenceDisplay {
|
|
|
faultLabel = f(data)
|
|
@@ -727,8 +762,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfReferenceTrajectory {
|
|
|
faultLabel = f(data)
|
|
@@ -754,8 +789,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfRoiPoints {
|
|
|
faultLabel = f(data)
|
|
@@ -781,8 +816,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfRoiPolygon {
|
|
|
faultLabel = f(data)
|
|
@@ -808,8 +843,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfTf {
|
|
|
faultLabel = f(data)
|
|
@@ -832,14 +867,28 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.PerceptionObjects) {
|
|
|
+ // 更新共享变量
|
|
|
+ mutexOfTpperception.RLock()
|
|
|
+ {
|
|
|
+ for _, obj := range data.Objs {
|
|
|
+ if obj.X <= 5 || math.Abs(float64(obj.Y)) >= 10 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if _, ok := extendParam.ObjDicOfTpperception[obj.Id]; !ok {
|
|
|
+ extendParam.ObjDicOfTpperception[obj.Id] = []float32{}
|
|
|
+ }
|
|
|
+ extendParam.ObjDicOfTpperception[obj.Id] = append(extendParam.ObjDicOfTpperception[obj.Id], obj.Y)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mutexOfTpperception.RUnlock()
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfTpperception {
|
|
|
- faultLabel = f(data, velocityX, velocityY, yaw)
|
|
|
+ faultLabel = f(data, extendParam)
|
|
|
if faultLabel != "" {
|
|
|
saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
break
|
|
@@ -861,8 +910,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfTpperceptionVis {
|
|
|
faultLabel = f(data)
|
|
@@ -888,8 +937,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfTprouteplan {
|
|
|
faultLabel = f(data)
|
|
@@ -915,8 +964,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfTrajectoryDisplay {
|
|
|
faultLabel = f(data)
|
|
@@ -942,8 +991,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfUngroundCloudpoints {
|
|
|
faultLabel = f(data)
|
|
@@ -969,8 +1018,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfCameraImage {
|
|
|
faultLabel = f(data)
|
|
@@ -992,11 +1041,23 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.Retrieval) {
|
|
|
+ // 更新共享变量
|
|
|
+ mutexOfPjControlPub.RLock()
|
|
|
+ {
|
|
|
+ extendParam.NumCountDataReadOfDataRead++
|
|
|
+ if extendParam.NumCountDataReadOfDataRead == 10 {
|
|
|
+ extendParam.EgoSteeringRealOfDataRead = append(extendParam.EgoSteeringRealOfDataRead, data.ActStrWhAng)
|
|
|
+ extendParam.EgoThrottleRealOfDataRead = append(extendParam.EgoThrottleRealOfDataRead, data.AccPed2)
|
|
|
+ extendParam.NumCountDataReadOfDataRead = 0
|
|
|
+ }
|
|
|
+ extendParam.StrgAngleRealValueOfDataRead = data.ActStrWhAng
|
|
|
+ }
|
|
|
+ mutexOfPjControlPub.RUnlock()
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfDataRead {
|
|
|
faultLabel = f(data)
|
|
@@ -1021,8 +1082,8 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
|
- faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
- lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
var faultLabel string
|
|
|
for _, f := range masterConfig.RuleOfPjiGps {
|
|
|
faultLabel = f(data)
|
|
@@ -1056,11 +1117,11 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *entity.TimeWindow) {
|
|
|
+func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *commonEntity.TimeWindow) {
|
|
|
masterTopics, slaveTopics := getTopicsOfNode(faultLabel)
|
|
|
if lastTimeWindow == nil || util.TimeCustom1GreaterTimeCustom2(faultHappenTime, lastTimeWindow.TimeWindowEnd) {
|
|
|
// 2-1 如果是不在旧故障窗口内,添加一个新窗口
|
|
|
- newTimeWindow := entity.TimeWindow{
|
|
|
+ newTimeWindow := commonEntity.TimeWindow{
|
|
|
FaultTime: faultHappenTime,
|
|
|
TimeWindowBegin: util.TimeCustomChange(faultHappenTime, -commonConfig.PlatformConfig.TaskBeforeTime),
|
|
|
TimeWindowEnd: util.TimeCustomChange(faultHappenTime, commonConfig.PlatformConfig.TaskAfterTime),
|
|
@@ -1071,11 +1132,11 @@ func saveTimeWindow(faultLabel string, faultHappenTime string, lastTimeWindow *e
|
|
|
}
|
|
|
c_log.GlobalLogger.Infof("不在旧故障窗口内,向生产者队列添加一个新窗口,【Lable】=%v,【FaultTime】=%v,【Length】=%v", newTimeWindow.Labels, newTimeWindow.FaultTime, newTimeWindow.Length)
|
|
|
|
|
|
- entity.AddTimeWindowToTimeWindowProducerQueue(newTimeWindow)
|
|
|
+ commonEntity.AddTimeWindowToTimeWindowProducerQueue(newTimeWindow)
|
|
|
} else {
|
|
|
// 2-2 如果在旧故障窗口内
|
|
|
- entity.TimeWindowProducerQueueMutex.RLock()
|
|
|
- defer entity.TimeWindowProducerQueueMutex.RUnlock()
|
|
|
+ commonEntity.TimeWindowProducerQueueMutex.RLock()
|
|
|
+ defer commonEntity.TimeWindowProducerQueueMutex.RUnlock()
|
|
|
// 2-2-1 更新故障窗口end时间
|
|
|
maxEnd := util.TimeCustomChange(lastTimeWindow.TimeWindowBegin, commonConfig.PlatformConfig.TaskMaxTime)
|
|
|
expectEnd := util.TimeCustomChange(faultHappenTime, commonConfig.PlatformConfig.TaskAfterTime)
|