added fields to sensordata

This commit is contained in:
Timo Volkmann 2020-12-18 12:30:26 +01:00
parent 5a3a9feca8
commit 100787f047
2 changed files with 195 additions and 159 deletions

View File

@ -56,14 +56,16 @@ type SensorData struct {
latency int latency int
Servertime time.Time Servertime time.Time
Timestamp time.Time Timestamp time.Time
Position [3]float64 `json:",omitempty"` Position [3]float64 //`json:",omitempty"`
PosAcc [2]float64 `json:",omitempty"`//[H,V] HAcc float64 //`json:",omitempty"`//[H,V]
Orientation [3]float64 `json:",omitempty"` VAcc float64 //`json:",omitempty"`//[H,V]
Speed float64 `json:",omitempty"` Orientation [3]float64 //`json:",omitempty"`
PosHeading float64 `json:",omitempty"` // Course / Heading of Motion Speed float64 //`json:",omitempty"`
HeadingAcc float64 `json:",omitempty"` HeadDevice float64 //`json:",omitempty"` // Course / Heading of Motion
Gyroscope [3]float64 `json:",omitempty"` HeadMotion float64 //`json:",omitempty"` // Course / Heading of Motion
LinearAcc [3]float64 `json:",omitempty"` HeadingAcc float64 //`json:",omitempty"`
Gyroscope [3]float64 //`json:",omitempty"`
LinearAcc [3]float64 //`json:",omitempty"`
} }
@ -141,6 +143,12 @@ func ConvertUbxSensorData(msg interface{}) (*SensorData, error) {
sd.Position[0] = float64(v.Lat_dege7) / 1e+7 sd.Position[0] = float64(v.Lat_dege7) / 1e+7
sd.Position[1] = float64(v.Lon_dege7) / 1e+7 sd.Position[1] = float64(v.Lon_dege7) / 1e+7
sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m
sd.HAcc = float64(v.HAcc_mm) / 1000
sd.VAcc = float64(v.VAcc_mm) / 1000
sd.HeadMotion = float64(v.HeadMot_dege5) / 1e+5
sd.HeadDevice = float64(v.HeadVeh_dege5) / 1e+5
sd.HeadingAcc = float64(v.HeadAcc_dege5) / 1e+5
sd.Speed = float64(v.GSpeed_mm_s) / 3600
case *ublox.HnrPvt: case *ublox.HnrPvt:
//logrus.Println("HNR-PVT") //logrus.Println("HNR-PVT")
sd.itow = v.ITOW_ms sd.itow = v.ITOW_ms
@ -148,6 +156,12 @@ func ConvertUbxSensorData(msg interface{}) (*SensorData, error) {
sd.Position[0] = float64(v.Lat_dege7) / 1e+7 sd.Position[0] = float64(v.Lat_dege7) / 1e+7
sd.Position[1] = float64(v.Lon_dege7) / 1e+7 sd.Position[1] = float64(v.Lon_dege7) / 1e+7
sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m
sd.HAcc = float64(v.HAcc) / 1000
sd.VAcc = float64(v.VAcc) / 1000
sd.HeadMotion = float64(v.HeadMot_dege5) / 1e+5
sd.HeadDevice = float64(v.HeadVeh_dege5) / 1e+5
sd.HeadingAcc = float64(v.HeadAcc_dege5) / 1e+5
sd.Speed = float64(v.GSpeed_mm_s) / 3600
case *ublox.NavAtt: case *ublox.NavAtt:
//logrus.Println("NAV-ATT") //logrus.Println("NAV-ATT")
sd.itow = v.ITOW_ms sd.itow = v.ITOW_ms
@ -180,6 +194,13 @@ func convertIPhoneSensorLog(jsonData []byte) (*SensorData, error) {
pitch := gjson.Get(string(jsonData), "motionPitch").Float() * 180 / math.Pi pitch := gjson.Get(string(jsonData), "motionPitch").Float() * 180 / math.Pi
roll := gjson.Get(string(jsonData), "motionRoll").Float() * 180 / math.Pi roll := gjson.Get(string(jsonData), "motionRoll").Float() * 180 / math.Pi
yaw := gjson.Get(string(jsonData), "motionYaw").Float() * 180 / math.Pi yaw := gjson.Get(string(jsonData), "motionYaw").Float() * 180 / math.Pi
hAcc := gjson.Get(string(jsonData), "locationHorizontalAccuracy").Float()
vAcc := gjson.Get(string(jsonData), "locationVerticalAccuracy").Float()
headingAcc := gjson.Get(string(jsonData), "locationHeadingAccuracy").Float()
headMotion := gjson.Get(string(jsonData), "locationCourse").Float()
headDevice := gjson.Get(string(jsonData), "locationTrueHeading").Float()
speed := gjson.Get(string(jsonData), "locationSpeed").Float()
var ts time.Time var ts time.Time
if timestamp != 0 { if timestamp != 0 {
ts = time.Unix(0, int64(timestamp*float64(time.Second))).UTC() ts = time.Unix(0, int64(timestamp*float64(time.Second))).UTC()
@ -194,6 +215,13 @@ func convertIPhoneSensorLog(jsonData []byte) (*SensorData, error) {
Timestamp: ts, Timestamp: ts,
Position: [3]float64{lat, lon, alt}, Position: [3]float64{lat, lon, alt},
Orientation: [3]float64{pitch, roll, yaw}, Orientation: [3]float64{pitch, roll, yaw},
HAcc: hAcc,
VAcc: vAcc,
HeadingAcc: headingAcc,
HeadMotion: headMotion,
HeadDevice: headDevice,
Speed: speed,
} }
if (*sd == SensorData{}) { if (*sd == SensorData{}) {
return nil, errors.New("iphone sensorlog: convert empty") return nil, errors.New("iphone sensorlog: convert empty")
@ -209,6 +237,13 @@ func convertAndroidHyperImu(jsonData []byte) (*SensorData, error) {
pitch := gjson.Get(string(jsonData), "orientation.0").Float() pitch := gjson.Get(string(jsonData), "orientation.0").Float()
roll := gjson.Get(string(jsonData), "orientation.1").Float() roll := gjson.Get(string(jsonData), "orientation.1").Float()
yaw := gjson.Get(string(jsonData), "orientation.2").Float() yaw := gjson.Get(string(jsonData), "orientation.2").Float()
//hAcc := gjson.Get(string(jsonData), "locationHorizontalAccuracy").Float()
//vAcc := gjson.Get(string(jsonData), "locationVerticalAccuracy").Float()
//headingAcc := gjson.Get(string(jsonData), "locationHeadingAccuracy").Float()
//headMotion := gjson.Get(string(jsonData), "locationCourse").Float()
//headDevice := gjson.Get(string(jsonData), "locationTrueHeading").Float()
//speed := gjson.Get(string(jsonData), "locationSpeed").Float()
sd := &SensorData{ sd := &SensorData{
//Servertime: time.Now().UTC(), //Servertime: time.Now().UTC(),

View File

@ -5,6 +5,7 @@ import (
ext "github.com/reugn/go-streams/extension" ext "github.com/reugn/go-streams/extension"
"github.com/reugn/go-streams/flow" "github.com/reugn/go-streams/flow"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tidwall/pretty"
"time" "time"
) )
@ -63,7 +64,7 @@ func storeFunc(s Tracker) flow.MapFunc {
} }
jdata, err := json.Marshal(data) jdata, err := json.Marshal(data)
//logrus.Println(string(pretty.Pretty(jdata))) logrus.Traceln(string(pretty.Pretty(jdata)))
if err != nil { if err != nil {
logrus.Fatalln(err) logrus.Fatalln(err)
} }