|
@@ -5,6 +5,7 @@ import (
|
|
|
"fmt"
|
|
|
"github.com/bluenviron/goroslib/v2"
|
|
|
"github.com/bluenviron/goroslib/v2/pkg/msg"
|
|
|
+ "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -16,8 +17,10 @@ type HeartBeatInfo struct {
|
|
|
}
|
|
|
|
|
|
var lastTime time.Time
|
|
|
+var mutex sync.Mutex
|
|
|
|
|
|
func main() {
|
|
|
+ lastTime = time.Now()
|
|
|
|
|
|
// 1 启动 shell 脚本 dpi_start.sh
|
|
|
_, s, err := util.ExecuteWithDirSync("/data", "sh", "dpi_start.sh")
|
|
@@ -33,13 +36,18 @@ func main() {
|
|
|
Node: rosNode,
|
|
|
Topic: "/heartbeat_info",
|
|
|
Callback: func(data *HeartBeatInfo) {
|
|
|
+ fmt.Println("监听到数据:", data)
|
|
|
+ mutex.Lock()
|
|
|
lastTime = time.Now()
|
|
|
+ mutex.Unlock()
|
|
|
}})
|
|
|
// 3 超过5秒没有接收到数据则执行 dpi_stop.sh 和 dpi_start.sh
|
|
|
+
|
|
|
for {
|
|
|
time.Sleep(1 * time.Second)
|
|
|
+ mutex.Lock()
|
|
|
if time.Since(lastTime) > 5.00 {
|
|
|
- fmt.Println("超过5秒没有监听到/heart_info数据,即将重启dpi。")
|
|
|
+ fmt.Println("超过5秒没有监听到/heartbeat_info数据,即将重启dpi。")
|
|
|
_, s, err = util.ExecuteWithDirSync("/data", "sh", "dpi_stop.sh")
|
|
|
if err != nil {
|
|
|
fmt.Println("执行停止命令报错,执行结果为:", s, ",错误信息为:", err)
|
|
@@ -49,6 +57,7 @@ func main() {
|
|
|
fmt.Println("执行启动命令报错,执行结果为:", s, ",错误信息为:", err)
|
|
|
}
|
|
|
}
|
|
|
+ mutex.Unlock()
|
|
|
}
|
|
|
|
|
|
}
|