12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package main
- import (
- "cicv-data-closedloop/common/util"
- "fmt"
- "github.com/bluenviron/goroslib/v2"
- "github.com/bluenviron/goroslib/v2/pkg/msg"
- "os"
- "sync"
- "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
- var mutex sync.Mutex
- var sub *goroslib.Subscriber
- func main() {
- lastTime = time.Now()
- // 1 启动 shell 脚本 dpi_start.sh
- _, s, err := util.ExecuteWithDirSync("/data", "sh", "dpi_start.sh")
- if err != nil {
- fmt.Println("执行启动命令报错,执行结果为:", s, ",错误信息为:", err)
- os.Exit(1)
- }
- fmt.Println("执行启动命令 sh dpi_start.sh 成功,执行结果为:", s)
- time.Sleep(5 * time.Second)
- // 2 监听 ros 话题 /heartbeat_info
- rosNode, _ := goroslib.NewNode(goroslib.NodeConf{
- Name: "dpi_with_heartbeatInfo",
- MasterAddress: "127.0.0.1:11311",
- })
- sub, err = goroslib.NewSubscriber(goroslib.SubscriberConf{
- Node: rosNode,
- Topic: "/heartbeat_info",
- Callback: func(data *HeartBeatInfo) {
- fmt.Println("监听到数据:", data)
- lastTime = time.Now()
- }})
- if err != nil {
- fmt.Println("监听话题/heartbeat_info报错", err)
- os.Exit(1)
- }
- // 3 超过5秒没有接收到数据则执行 dpi_stop.sh 和 dpi_start.sh
- for {
- time.Sleep(1 * time.Second)
- if time.Since(lastTime).Seconds() > 5.00 {
- fmt.Println("超过5秒没有监听到/heartbeat_info数据,即将重启dpi。")
- _, s, err := util.ExecuteWithDirSync("/data", "sh", "dpi_stop.sh")
- if err != nil {
- fmt.Println("执行停止命令报错,执行结果为:", s, ",错误信息为:", err)
- continue
- }
- fmt.Println("执行停止命令 sh dpi_stop.sh 成功,执行结果为:", s)
- sub.Close()
- _, s, err = util.ExecuteWithDirSync("/data", "sh", "dpi_start.sh")
- if err != nil {
- fmt.Println("执行启动命令报错,执行结果为:", s, ",错误信息为:", err)
- continue
- }
- fmt.Println("执行启动命令 sh dpi_start.sh 成功,执行结果为:", s)
- time.Sleep(5 * time.Second)
- sub, err = goroslib.NewSubscriber(goroslib.SubscriberConf{
- Node: rosNode,
- Topic: "/heartbeat_info",
- Callback: func(data *HeartBeatInfo) {
- fmt.Println("监听到数据:", data)
- lastTime = time.Now()
- }})
- if err != nil {
- fmt.Println("监听话题/heartbeat_info报错", err)
- os.Exit(1)
- }
- lastTime = time.Now()
- }
- }
- }
|