LingxinMeng 11 mēneši atpakaļ
vecāks
revīzija
fc3bdcfe3b

+ 2 - 1
aarch64/pjisuv/common/config/c_local.go

@@ -10,6 +10,7 @@ var (
 	LocalConfig     localConfig
 	localConfigPath = "/mnt/media/sda1/cicv-data-closedloop/config/local-config.yaml"
 	//localConfigPath = "/userdata/cicv-data-closedloop/config/local-config.yaml"
+	OssEquBasePrefix string
 )
 
 type node struct {
@@ -51,5 +52,5 @@ func InitLocalConfig() {
 	}
 
 	c_log.GlobalLogger.Info("初始化本地配置文件 - 成功:", LocalConfig)
-
+	OssEquBasePrefix = LocalConfig.OssBasePrefix + LocalConfig.EquipmentNo + "/"
 }

+ 6 - 3
aarch64/pjisuv/common/config/yaml/pjisuv-003-cloud-config.yaml

@@ -9,7 +9,11 @@ bag-number: 120
 config-refresh-interval: 60
 disk:
   name: /dev/vdb # 磁盘名称
-  used: 800000000000 # 磁盘占用阈值,单位bytes
+  used: 900000000000 # 磁盘占用阈值,单位bytes
+#bag-data-dir: /userdata/cicv-data-closedloop/data/
+#bag-copy-dir: /userdata/cicv-data-closedloop/copy/
+#time-to-label-json-path: /userdata/cicv-data-closedloop/timeToLabel.json
+#triggers-dir: /userdata/cicv-data-closedloop/triggers/
 bag-data-dir: /mnt/media/sda1/cicv-data-closedloop/data/
 bag-copy-dir: /mnt/media/sda1/cicv-data-closedloop/copy/
 time-to-label-json-path: /mnt/media/sda1/cicv-data-closedloop/timeToLabel.json
@@ -24,7 +28,6 @@ ros:
     - /ins
     - /lidar_pretreatment
     - /sensorfusion
-    - /planner_s4
     - /control
 hosts:
   - name: node1
@@ -51,7 +54,7 @@ hosts:
         - "ROS_DISTRO=melodic"
     topics:
       - /camera_image # /camera_output
-      - /cicv_amr_trajectory #  /planner_s4
+      - /cicv_amr_trajectory # /planner_s4 换成了 /planner_s4_gd
       - /pj_control_pub # /control
       - /data_read
   - name: node2

+ 0 - 132
aarch64/pjisuv/common/config/yaml/pjisuv8-cloud-config.yaml

@@ -1,132 +0,0 @@
----
-monitor:
-  url: http://36.110.106.142:12341/web_server/monitor/insert
-platform:
-  url-device-auth: http://1.202.169.139:8081/device/auth
-  url-task-poll: http://1.202.169.139:8081/device/task/poll
-  url-task: http://1.202.169.139:8081/device/task
-full-collect: true
-bag-number: 120
-config-refresh-interval: 60
-disk:
-  name: /dev/vdb # 磁盘名称
-  used: 800000000000 # 磁盘占用阈值,单位bytes
-bag-data-dir: /mnt/media/sda1/cicv-data-closedloop/data/
-bag-copy-dir: /mnt/media/sda1/cicv-data-closedloop/copy/
-time-to-label-json-path: /mnt/media/sda1/cicv-data-closedloop/timeToLabel.json
-triggers-dir: /mnt/media/sda1/cicv-data-closedloop/triggers/
-time-window-send-gap: 6
-tcp-port: 12340
-rpc-port: 12341
-ros:
-  master-address: 192.168.1.102:11311
-  nodes:
-    - /camera_output
-    - /ins
-    - /lidar_pretreatment
-    - /sensorfusion
-    - /planner_s4
-    - /control
-hosts:
-  - name: node1
-    ip: 192.168.1.102
-    rosbag:
-      path: "/opt/ros/melodic/bin/rosbag"
-      envs:
-        - "LD_LIBRARY_PATH=/opt/ros/melodic/lib:/usr/lib::/usr/lib:/userdata/third_lib/libaicc"
-        - "ROS_ETC_DIR=/opt/ros/melodic/etc/ros"
-        - "USER=root"
-        - "ROS_OS_OVERRIDE=openembedded"
-        - "PWD=/mnt/media/sda1/cicv-data-closedloop"
-        - "HOME=/home/root"
-        - "CMAKE_PREFIX_PATH=/opt/ros/melodic:/usr"
-        - "ROS_ROOT=/opt/ros/melodic/share/ros"
-        - "ROS_MASTER_URI=http://192.168.1.102:11311"
-        - "ROS_VERSION=1"
-        - "ROS_PYTHON_VERSION=2"
-        - "ROS_IP=192.168.1.102"
-        - "PYTHONPATH=/opt/ros/melodic/lib/python2.7/site-packages:/usr/lib/python2.7/site-packages"
-        - "ROS_PACKAGE_PATH=/opt/ros/melodic/share"
-        - "PATH=/opt/ros/melodic/bin:/usr/bin/cyber/tools/cyber_service:/usr/bin/cyber/tools/cyber_node:/usr/bin/cyber/tools/cyber_channel:/usr/bin/cyber/tools/cyber_launch:/usr/bin/cyber/tools/cyber_monitor:/usr/bin/cyber/tools/cyber_recorder:/apollo/bazel-bin/cyber:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
-        - "PKG_CONFIG_PATH=/usr/lib/pkgconfig"
-        - "ROS_DISTRO=melodic"
-    topics:
-      - /camera_image # /camera_output
-      - /cicv_amr_trajectory #  /planner_s4
-      - /pj_control_pub # /control
-      - /data_read
-  - name: node2
-    ip: 192.168.1.103
-    rosbag:
-      path: "/opt/ros/melodic/bin/rosbag"
-      envs:
-        - "LD_LIBRARY_PATH=/opt/ros/melodic/lib:/usr/lib::/usr/lib:/userdata/third_lib"
-        - "ROS_ETC_DIR=/opt/ros/melodic/etc/ros"
-        - "USER=root"
-        - "ROS_OS_OVERRIDE=openembedded"
-        - "PWD=/mnt/media/sda1/cicv-data-closedloop"
-        - "HOME=/home/root"
-        - "CMAKE_PREFIX_PATH=/opt/ros/melodic:/usr"
-        - "ROS_ROOT=/opt/ros/melodic/share/ros"
-        - "ROS_MASTER_URI=http://192.168.1.102:11311"
-        - "ROS_VERSION=1"
-        - "ROS_PYTHON_VERSION=2"
-        - "ROS_IP=192.168.1.103"
-        - "PYTHONPATH=/opt/ros/melodic/lib/python2.7/site-packages:/usr/lib/python2.7/site-packages"
-        - "ROS_PACKAGE_PATH=/opt/ros/melodic/share"
-        - "PATH=/opt/ros/melodic/bin:/usr/bin/cyber/tools/cyber_service:/usr/bin/cyber/tools/cyber_node:/usr/bin/cyber/tools/cyber_channel:/usr/bin/cyber/tools/cyber_launch:/usr/bin/cyber/tools/cyber_monitor:/usr/bin/cyber/tools/cyber_recorder:/apollo/bazel-bin/cyber:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin "
-        - "PKG_CONFIG_PATH=/usr/lib/pkgconfig"
-        - "ROS_DISTRO=melodic"
-    topics:
-      - /points_concat  # /lidar_pretreatment
-      - /tpperception # /sensorfusion
-      - /cicv_location  # /ins
-triggers:
-  - label: rapidaccel
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: brake
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: EmergencyStop
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: AutoDLimit
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: lanechange
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: brakefault
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: takeover
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: TTC
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image

+ 0 - 19
aarch64/pjisuv/common/config/yaml/pjisuv8-soc1-local-config.yaml

@@ -1,19 +0,0 @@
-node:
-  name: node1
-  ip: 192.168.1.102
-# 数据闭环平台参数
-equipment-no: pjisuv8
-secret-key: GNcWU9EA7o1i5mHb3ddifGqvKHtTn72ASqkP871k
-# 获取oss连接信息的接口url
-url-get-oss-config: http://36.110.106.156:18379/oss/config?token=nXonLUcMtGcrQqqKiyygIwyVbvizE0wD
-# 金龙车数据前缀
-oss-base-prefix: pjisuv/
-# oss上的配置文件的名称
-cloud-config-filename: cloud-config.yaml
-# 将oss上的配置文件下载到本地的路径
-cloud-config-local-path: /mnt/media/sda1/cicv-data-closedloop/config/cloud-config.yaml
-restart-cmd:
-  dir: "/mnt/media/sda1/cicv-data-closedloop/"
-  name: "sh"
-  args:
-    - "start-soc1.sh"

+ 0 - 19
aarch64/pjisuv/common/config/yaml/pjisuv8-soc2-local-config.yaml

@@ -1,19 +0,0 @@
-node:
-  name: node2
-  ip: 192.168.1.103
-# 数据闭环平台参数
-equipment-no: pjisuv8
-secret-key: GNcWU9EA7o1i5mHb3ddifGqvKHtTn72ASqkP871k
-# 获取oss连接信息的接口url
-url-get-oss-config: http://36.110.106.156:18379/oss/config?token=nXonLUcMtGcrQqqKiyygIwyVbvizE0wD
-# 金龙车数据前缀
-oss-base-prefix: pjisuv/
-# oss上的配置文件的名称
-cloud-config-filename: cloud-config.yaml
-# 将oss上的配置文件下载到本地的路径
-cloud-config-local-path: /mnt/media/sda1/cicv-data-closedloop/config/cloud-config.yaml
-restart-cmd:
-  dir: "/mnt/media/sda1/cicv-data-closedloop/"
-  name: "sh"
-  args:
-    - "start-soc2.sh"

+ 0 - 132
aarch64/pjisuv/common/config/yaml/pjisuv95-cloud-config.yaml

@@ -1,132 +0,0 @@
----
-monitor:
-  url: http://36.110.106.142:12341/web_server/monitor/insert
-platform:
-  url-device-auth: http://1.202.169.139:8081/device/auth
-  url-task-poll: http://1.202.169.139:8081/device/task/poll
-  url-task: http://1.202.169.139:8081/device/task
-full-collect: true
-bag-number: 120
-config-refresh-interval: 60
-disk:
-  name: /dev/vdb # 磁盘名称
-  used: 800000000000 # 磁盘占用阈值,单位bytes
-bag-data-dir: /mnt/media/sda1/cicv-data-closedloop/data/
-bag-copy-dir: /mnt/media/sda1/cicv-data-closedloop/copy/
-time-to-label-json-path: /mnt/media/sda1/cicv-data-closedloop/timeToLabel.json
-triggers-dir: /mnt/media/sda1/cicv-data-closedloop/triggers/
-time-window-send-gap: 6
-tcp-port: 12340
-rpc-port: 12341
-ros:
-  master-address: 192.168.1.102:11311
-  nodes:
-    - /camera_output
-    - /ins
-    - /lidar_pretreatment
-    - /sensorfusion
-    - /planner_s4
-    - /control
-hosts:
-  - name: node1
-    ip: 192.168.1.102
-    rosbag:
-      path: "/opt/ros/melodic/bin/rosbag"
-      envs:
-        - "LD_LIBRARY_PATH=/opt/ros/melodic/lib:/usr/lib::/usr/lib:/userdata/third_lib/libaicc"
-        - "ROS_ETC_DIR=/opt/ros/melodic/etc/ros"
-        - "USER=root"
-        - "ROS_OS_OVERRIDE=openembedded"
-        - "PWD=/mnt/media/sda1/cicv-data-closedloop"
-        - "HOME=/home/root"
-        - "CMAKE_PREFIX_PATH=/opt/ros/melodic:/usr"
-        - "ROS_ROOT=/opt/ros/melodic/share/ros"
-        - "ROS_MASTER_URI=http://192.168.1.102:11311"
-        - "ROS_VERSION=1"
-        - "ROS_PYTHON_VERSION=2"
-        - "ROS_IP=192.168.1.102"
-        - "PYTHONPATH=/opt/ros/melodic/lib/python2.7/site-packages:/usr/lib/python2.7/site-packages"
-        - "ROS_PACKAGE_PATH=/opt/ros/melodic/share"
-        - "PATH=/opt/ros/melodic/bin:/usr/bin/cyber/tools/cyber_service:/usr/bin/cyber/tools/cyber_node:/usr/bin/cyber/tools/cyber_channel:/usr/bin/cyber/tools/cyber_launch:/usr/bin/cyber/tools/cyber_monitor:/usr/bin/cyber/tools/cyber_recorder:/apollo/bazel-bin/cyber:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
-        - "PKG_CONFIG_PATH=/usr/lib/pkgconfig"
-        - "ROS_DISTRO=melodic"
-    topics:
-      - /camera_image # /camera_output
-      - /cicv_amr_trajectory #  /planner_s4
-      - /pj_control_pub # /control
-      - /data_read
-  - name: node2
-    ip: 192.168.1.103
-    rosbag:
-      path: "/opt/ros/melodic/bin/rosbag"
-      envs:
-        - "LD_LIBRARY_PATH=/opt/ros/melodic/lib:/usr/lib::/usr/lib:/userdata/third_lib"
-        - "ROS_ETC_DIR=/opt/ros/melodic/etc/ros"
-        - "USER=root"
-        - "ROS_OS_OVERRIDE=openembedded"
-        - "PWD=/mnt/media/sda1/cicv-data-closedloop"
-        - "HOME=/home/root"
-        - "CMAKE_PREFIX_PATH=/opt/ros/melodic:/usr"
-        - "ROS_ROOT=/opt/ros/melodic/share/ros"
-        - "ROS_MASTER_URI=http://192.168.1.102:11311"
-        - "ROS_VERSION=1"
-        - "ROS_PYTHON_VERSION=2"
-        - "ROS_IP=192.168.1.103"
-        - "PYTHONPATH=/opt/ros/melodic/lib/python2.7/site-packages:/usr/lib/python2.7/site-packages"
-        - "ROS_PACKAGE_PATH=/opt/ros/melodic/share"
-        - "PATH=/opt/ros/melodic/bin:/usr/bin/cyber/tools/cyber_service:/usr/bin/cyber/tools/cyber_node:/usr/bin/cyber/tools/cyber_channel:/usr/bin/cyber/tools/cyber_launch:/usr/bin/cyber/tools/cyber_monitor:/usr/bin/cyber/tools/cyber_recorder:/apollo/bazel-bin/cyber:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin "
-        - "PKG_CONFIG_PATH=/usr/lib/pkgconfig"
-        - "ROS_DISTRO=melodic"
-    topics:
-      - /points_concat  # /lidar_pretreatment
-      - /tpperception # /sensorfusion
-      - /cicv_location  # /ins
-triggers:
-  - label: rapidaccel
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: brake
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: EmergencyStop
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: AutoDLimit
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: lanechange
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: brakefault
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: takeover
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image
-  - label: TTC
-    topics:
-      - /tpperception
-      - /points_concat
-      - /cicv_location
-      - /camera_image

+ 0 - 19
aarch64/pjisuv/common/config/yaml/pjisuv95-soc1-local-config.yaml

@@ -1,19 +0,0 @@
-node:
-  name: node1
-  ip: 192.168.1.102
-# 数据闭环平台参数
-equipment-no: pjisuv95
-secret-key: CuSfwnsNP0XnPBETB2UnpD0FYDnBPiibu7S3i7Tc
-# 获取oss连接信息的接口url
-url-get-oss-config: http://36.110.106.156:18379/oss/config?token=nXonLUcMtGcrQqqKiyygIwyVbvizE0wD
-# 金龙车数据前缀
-oss-base-prefix: pjisuv/
-# oss上的配置文件的名称
-cloud-config-filename: cloud-config.yaml
-# 将oss上的配置文件下载到本地的路径
-cloud-config-local-path: /mnt/media/sda1/cicv-data-closedloop/config/cloud-config.yaml
-restart-cmd:
-  dir: "/mnt/media/sda1/cicv-data-closedloop/"
-  name: "sh"
-  args:
-    - "start-soc1.sh"

+ 0 - 19
aarch64/pjisuv/common/config/yaml/pjisuv95-soc2-local-config.yaml

@@ -1,19 +0,0 @@
-node:
-  name: node2
-  ip: 192.168.1.103
-# 数据闭环平台参数
-equipment-no: pjisuv95
-secret-key: CuSfwnsNP0XnPBETB2UnpD0FYDnBPiibu7S3i7Tc
-# 获取oss连接信息的接口url
-url-get-oss-config: http://36.110.106.156:18379/oss/config?token=nXonLUcMtGcrQqqKiyygIwyVbvizE0wD
-# 金龙车数据前缀
-oss-base-prefix: pjisuv/
-# oss上的配置文件的名称
-cloud-config-filename: cloud-config.yaml
-# 将oss上的配置文件下载到本地的路径
-cloud-config-local-path: /mnt/media/sda1/cicv-data-closedloop/config/cloud-config.yaml
-restart-cmd:
-  dir: "/mnt/media/sda1/cicv-data-closedloop/"
-  name: "sh"
-  args:
-    - "start-soc2.sh"

+ 3 - 3
aarch64/pjisuv/common/service/rosbag_upload.go

@@ -101,9 +101,9 @@ outLoop:
 		// 5 upload,必须顺序执行
 		c_log.GlobalLogger.Info("发送bag数据包,故障时间为:", currentTimeWindow.FaultTime)
 		start := time.Now()
-		objectKey1 := commonConfig.LocalConfig.OssBasePrefix + commonConfig.LocalConfig.EquipmentNo + "/data/" + nodeName + "_" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + "/"
-		objectKey2 := commonConfig.LocalConfig.OssBasePrefix + commonConfig.LocalConfig.EquipmentNo + "/data_merge/" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + ".bag"
-		objectKey3 := commonConfig.LocalConfig.OssBasePrefix + commonConfig.LocalConfig.EquipmentNo + "/data_parse/" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + "/"
+		objectKey1 := commonConfig.OssEquBasePrefix + "data/" + nodeName + "_" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + "/"
+		objectKey2 := commonConfig.OssEquBasePrefix + "data_merge/" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + ".bag"
+		objectKey3 := commonConfig.OssEquBasePrefix + "data_parse/" + currentTimeWindow.FaultTime + "_" + strings.Join(currentTimeWindow.Labels, "_") + "_" + fmt.Sprintf("%d", bagNumber) + "/"
 		for i, bag := range bags {
 			startOne := time.Now()
 			bagSlice := strings.Split(bag, "/")

+ 4 - 0
aarch64/pjisuv/master/config/master_trigger_config.go

@@ -169,6 +169,10 @@ var (
 	TopicOfPjiGps = "/pji_gps"
 	RuleOfPjiGps  []func(data *pjisuv_msgs.PerceptionLocalization) string
 
+	//38
+	TopicOfFaultInfo = "/fault_info"
+	//RuleOfFaultInfo  []func(data *pjisuv_msgs.FaultVec) string
+
 	LabelMapTriggerId sync.Map
 )
 

+ 2 - 1
aarch64/pjisuv/master/main.go

@@ -40,7 +40,8 @@ func init() {
 	commonConfig.InitKillSignalListener(commonConfig.CloudConfig.Hosts[0].Ip)
 	// 等待重启,接收到重启信号,会把信号分发给以下channel
 	go commonService.WaitKillSelf()
-
+	// 定时上传故障码日志
+	masterService.ForFaultCodeLog()
 }
 
 func main() {

+ 88 - 0
aarch64/pjisuv/master/service/for_fault_log.go

@@ -0,0 +1,88 @@
+package service
+
+import (
+	commonConfig "cicv-data-closedloop/aarch64/pjisuv/common/config"
+	"cicv-data-closedloop/aarch64/pjisuv/master/config"
+	"cicv-data-closedloop/common/config/c_log"
+	"cicv-data-closedloop/common/util"
+	"cicv-data-closedloop/pjisuv_msgs"
+	"fmt"
+	"github.com/bluenviron/goroslib/v2"
+	"github.com/sirupsen/logrus"
+	"os"
+	"path/filepath"
+	"runtime"
+	"time"
+)
+
+var (
+	faultLogger *logrus.Logger
+	logPath     string
+	regularTime = 1 * time.Hour // 日志上传周期
+
+)
+
+func ForFaultCodeLog() {
+	initLog("/mnt/media/sda1/cicv-data-closedloop/fault_code/", "fault_code")
+	receiveFault()
+	uploadLodRegularly()
+}
+
+// InitLog 初始化日志配置
+func initLog(logDir string, prefix string) {
+	time.Sleep(time.Duration(1) * time.Second)
+	// 创建、追加、读写,777,所有权限
+	logPath = logDir + prefix + "-" + time.Now().Format("2006-01-02-15-04-05") + ".log"
+	err := util.CreateParentDir(logPath)
+	if err != nil {
+		os.Exit(-1)
+	}
+	f, err := os.OpenFile(logPath, os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModePerm)
+	if err != nil {
+		os.Exit(-1)
+	}
+	faultLogger = logrus.New()
+	faultLogger.SetOutput(f)
+	faultLogger.SetReportCaller(true) // 开启行号显示
+	faultLogger.SetFormatter(&logrus.JSONFormatter{
+		CallerPrettyfier: func(frame *runtime.Frame) (string, string) {
+			fileName := filepath.Base(frame.File)
+			return "", fmt.Sprintf("%s:%d", fileName, frame.Line)
+		},
+	})
+	faultLogger.Info("初始化 faultLogger - 成功")
+}
+
+func receiveFault() {
+	_, _ = goroslib.NewSubscriber(goroslib.SubscriberConf{
+		Node:  commonConfig.RosNode,
+		Topic: config.TopicOfFaultInfo,
+		Callback: func(data *pjisuv_msgs.FaultVec) {
+			codeString := ""
+			for _, info := range data.InfoVec {
+				codeString = codeString + util.ToString(info.ErrorCode)
+			}
+			faultLogger.Errorf("接收到故障码:【%v】", codeString)
+		},
+	})
+}
+
+func uploadLodRegularly() {
+	// 1 创建一个定时器,每隔一秒触发一次
+	ticker := time.NewTicker(regularTime)
+	// 2 使用goroutine运行一个无限循环
+	go func() {
+		for {
+			select {
+			// 定时器触发时执行的代码
+			case <-ticker.C:
+				commonConfig.OssMutex.Lock()
+				err := commonConfig.OssBucket.PutObjectFromFile(commonConfig.OssEquBasePrefix+"fault_code/"+filepath.Base(logPath), logPath)
+				commonConfig.OssMutex.Unlock()
+				if err != nil {
+					c_log.GlobalLogger.Error("上传故障码日志失败:", err)
+				}
+			}
+		}
+	}()
+}

+ 9 - 0
aarch64/topic_echo/main/main.go

@@ -437,6 +437,15 @@ func main() {
 					fmt.Println("收到话题 /pj_vehicle_fdb_pub 的数据", data)
 				}})
 		}
+		//37
+		if topic == pjisuvConfig.TopicOfFaultInfo {
+			_, _ = goroslib.NewSubscriber(goroslib.SubscriberConf{
+				Node:  rosNode,
+				Topic: topic,
+				Callback: func(data *pjisuv_msgs.FaultVec) {
+					fmt.Println("收到话题", topic, "的数据", data)
+				}})
+		}
 	}
 
 	TopicOfNodeFaultInfo := "/nodefault_info"