|
@@ -0,0 +1,49 @@
|
|
|
|
+package dpi_boot
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "cicv-data-closedloop/common/util"
|
|
|
|
+ "fmt"
|
|
|
|
+ "github.com/bluenviron/goroslib/v2"
|
|
|
|
+ "github.com/bluenviron/goroslib/v2/pkg/msg"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type HeartBeatInfo struct {
|
|
|
|
+ msg.Package `ros:"diag_msgs"`
|
|
|
|
+ ModuleName string `rosname:"module_name"`
|
|
|
|
+ Rate int8 `rosname:"rate"`
|
|
|
|
+ timestamp float64 `rosname:"timestamp"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var lastTime time.Time
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ // 1 启动 shell 脚本 dpi_start.sh
|
|
|
|
+ _, s, err := util.ExecuteWithDirSync("/data", "sh", "dpi_start.sh")
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("执行启动命令报错,执行结果为:", s, ",错误信息为:", err)
|
|
|
|
+ }
|
|
|
|
+ // 2 监听 ros 话题 /heartbeat_info
|
|
|
|
+ rosNode, _ := goroslib.NewNode(goroslib.NodeConf{
|
|
|
|
+ Name: "dpi_with_heartbeatInfo",
|
|
|
|
+ MasterAddress: "127.0.0.1:11311",
|
|
|
|
+ })
|
|
|
|
+ _, _ = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
|
+ Node: rosNode,
|
|
|
|
+ Topic: "/heartbeat_info",
|
|
|
|
+ Callback: func(data *HeartBeatInfo) {
|
|
|
|
+ lastTime = time.Now()
|
|
|
|
+ }})
|
|
|
|
+ // 3 超过5秒没有接收到数据则执行 dpi_stop.sh 和 dpi_start.sh
|
|
|
|
+ if time.Since(lastTime) > 5.00 {
|
|
|
|
+ _, s, err = util.ExecuteWithDirSync("/data", "sh", "dpi_stop.sh")
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("执行停止命令报错,执行结果为:", s, ",错误信息为:", err)
|
|
|
|
+ }
|
|
|
|
+ _, s, err = util.ExecuteWithDirSync("/data", "sh", "dpi_start.sh")
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("执行启动命令报错,执行结果为:", s, ",错误信息为:", err)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|