|
@@ -12,6 +12,7 @@ import (
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/geometry_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/nav_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/sensor_msgs"
|
|
|
+ "github.com/bluenviron/goroslib/v2/pkg/msgs/std_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/tf2_msgs"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msgs/visualization_msgs"
|
|
|
"sync"
|
|
@@ -43,10 +44,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *visualization_msgs.MarkerArray) {
|
|
|
- if len(masterConfig.TopicOfAmrPose) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -74,10 +71,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.BoundingBoxArray) {
|
|
|
- if len(masterConfig.TopicOfBoundingBoxesFast) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -105,10 +98,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.FaultVec) {
|
|
|
- if len(masterConfig.TopicOfCameraFault) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -136,10 +125,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.Frame) {
|
|
|
- if len(masterConfig.TopicOfCanData) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -167,10 +152,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfCh128x1LslidarPointCloud) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -198,10 +179,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfCh64wLLslidarPointCloud) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -229,10 +206,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.LaserScan) {
|
|
|
- if len(masterConfig.TopicOfCh64wLScan) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -260,10 +233,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfCh64wRLslidarPointCloud) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -291,10 +260,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.LaserScan) {
|
|
|
- if len(masterConfig.TopicOfCh64wRScan) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -322,10 +287,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.PerceptionCicvMovingObjects) {
|
|
|
- if len(masterConfig.TopicOfCicvLidarclusterMovingObjects) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -353,10 +314,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.Trajectory) {
|
|
|
- if len(masterConfig.TopicOfCicvAmrTrajectory) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -391,10 +348,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
yaw = data.Yaw
|
|
|
m.RUnlock()
|
|
|
|
|
|
- if len(masterConfig.TopicOfCicvLocation) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -421,10 +374,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.AutowareCloudClusterArray) {
|
|
|
- if len(masterConfig.TopicOfCloudClusters) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -452,10 +401,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.HeartBeatInfo) {
|
|
|
- if len(masterConfig.TopicOfHeartbeatInfo) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -483,10 +428,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *geometry_msgs.Vector3Stamped) {
|
|
|
- if len(masterConfig.TopicOfLidarPretreatmentCost) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -514,10 +455,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Odometry) {
|
|
|
- if len(masterConfig.TopicOfLidarPretreatmentOdometry) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -545,10 +482,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *geometry_msgs.PolygonStamped) {
|
|
|
- if len(masterConfig.TopicOfLidarRoi) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -576,10 +509,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Path) {
|
|
|
- if len(masterConfig.TopicOfLine1) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -607,10 +536,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Path) {
|
|
|
- if len(masterConfig.TopicOfLine2) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -638,10 +563,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.PolygonStamped) {
|
|
|
- if len(masterConfig.TopicOfMapPolygon) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -669,10 +590,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *visualization_msgs.MarkerArray) {
|
|
|
- if len(masterConfig.TopicOfObstacleDisplay) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -700,10 +617,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.CommonVehicleCmd) {
|
|
|
- if len(masterConfig.TopicOfPjControlPub) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -731,10 +644,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfPointsCluster) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -762,10 +671,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfPointsConcat) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -793,10 +698,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Path) {
|
|
|
- if len(masterConfig.TopicOfReferenceDisplay) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -824,10 +725,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.Trajectory) {
|
|
|
- if len(masterConfig.TopicOfReferenceTrajectory) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -855,10 +752,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfRoiPoints) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -886,10 +779,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Path) {
|
|
|
- if len(masterConfig.TopicOfRoiPolygon) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -917,10 +806,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *tf2_msgs.TFMessage) {
|
|
|
- if len(masterConfig.TopicOfTf) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -948,10 +833,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.PerceptionObjects) {
|
|
|
- if len(masterConfig.TopicOfTpperception) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -978,10 +859,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *visualization_msgs.MarkerArray) {
|
|
|
- if len(masterConfig.TopicOfTpperceptionVis) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -1009,10 +886,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.RoutePlan) {
|
|
|
- if len(masterConfig.TopicOfTprouteplan) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -1040,10 +913,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *nav_msgs.Path) {
|
|
|
- if len(masterConfig.TopicOfTrajectoryDisplay) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -1071,10 +940,6 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *sensor_msgs.PointCloud2) {
|
|
|
- if len(masterConfig.TopicOfUngroundCloudpoints) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|
|
@@ -1097,15 +962,246 @@ func PrepareTimeWindowProducerQueue() {
|
|
|
}
|
|
|
|
|
|
// 35
|
|
|
+ if topic == masterConfig.TopicOfCameraImage && len(masterConfig.RuleOfCameraImage) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *sensor_msgs.Image) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfCameraImage {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 36
|
|
|
+ if topic == masterConfig.TopicOfCameraObstacles && len(masterConfig.RuleOfCameraObstacles) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *pjisuv_msgs.CameraObjectList) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfCameraObstacles {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 37
|
|
|
+ if topic == masterConfig.TopicOfCamRes && len(masterConfig.RuleOfCamRes) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *sensor_msgs.Image) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfCamRes {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 38
|
|
|
+ if topic == masterConfig.TopicOfCamObjects && len(masterConfig.RuleOfCamObjects) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *pjisuv_msgs.CameraObjectList) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfCamObjects {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 39
|
|
|
+ if topic == masterConfig.TopicOfTftrafficlight && len(masterConfig.RuleOfTftrafficlight) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *pjisuv_msgs.TrafficLightDetection) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfTftrafficlight {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 40
|
|
|
+ if topic == masterConfig.TopicOfStationStatus && len(masterConfig.RuleOfStationStatus) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *std_msgs.Bool) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfStationStatus {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 41
|
|
|
+ if topic == masterConfig.TopicOfDestinationPose && len(masterConfig.RuleOfDestinationPose) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *visualization_msgs.MarkerArray) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfDestinationPose {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 42
|
|
|
+ if topic == masterConfig.TopicOfMapDisplay && len(masterConfig.RuleOfMapDisplay) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *nav_msgs.Path) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfMapDisplay {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 43
|
|
|
+ if topic == masterConfig.TopicOfRoutingRviz && len(masterConfig.RuleOfRoutingRviz) > 0 {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *nav_msgs.Path) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ var faultLabel string
|
|
|
+ for _, f := range masterConfig.RuleOfRoutingRviz {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ // 44
|
|
|
if topic == masterConfig.TopicOfDataRead && len(masterConfig.RuleOfDataRead) > 0 {
|
|
|
subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
Node: commonConfig.RosNode,
|
|
|
Topic: topic,
|
|
|
Callback: func(data *pjisuv_msgs.Retrieval) {
|
|
|
- if len(masterConfig.TopicOfDataRead) == 0 {
|
|
|
- c_log.GlobalLogger.Infof("话题 %v 没有触发器", topic)
|
|
|
- return
|
|
|
- }
|
|
|
subscribersTimeMutexes[i].Lock()
|
|
|
if time.Since(subscribersTimes[i]).Seconds() > 1 {
|
|
|
subscribersMutexes[i].Lock()
|