stratux/tools/ahrs_plot.go

88 wiersze
1.5 KiB
Go

package main
import (
"bufio"
"fmt"
"github.com/gonum/plot"
"github.com/gonum/plot/plotter"
"github.com/gonum/plot/plotutil"
"github.com/gonum/plot/vg"
"net/http"
"os"
"strconv"
"strings"
"time"
)
type XY struct {
X float64
Y float64
}
func imageWriter() {
for {
p, err := plot.New()
if err != nil {
panic(err)
}
p.Title.Text = "AHRS Plot"
p.X.Label.Text = "Roll"
p.Y.Label.Text = "Pitch"
file, err := os.Open("ahrs_table.log")
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
vals := make([]XY, 0)
for scanner.Scan() {
l := scanner.Text()
x := strings.Split(l, ",")
if len(x) < 3 {
continue
}
roll, err := strconv.ParseFloat(x[0], 64)
if err != nil {
continue
}
pitch, err := strconv.ParseFloat(x[1], 64)
if err != nil {
continue
}
v := XY{X: roll, Y: pitch}
vals = append(vals, v)
}
vals_XY := make(plotter.XYs, len(vals))
for i := 0; i < len(vals); i++ {
vals_XY[i].X = vals[i].X
vals_XY[i].Y = vals[i].Y
}
err = plotutil.AddScatters(p, "First", vals_XY)
if err != nil {
panic(err)
}
if err := p.Save(8*vg.Inch, 8*vg.Inch, "out.png"); err != nil {
panic(err)
}
time.Sleep(1000 * time.Millisecond)
}
}
func main() {
go imageWriter()
http.Handle("/", http.FileServer(http.Dir(".")))
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Printf("managementInterface ListenAndServe: %s\n", err.Error())
}
for {
time.Sleep(1 * time.Second)
}
}