feat: record drive mode and autopilot steering

This commit is contained in:
2023-01-25 19:48:51 +01:00
parent 364a5a03ce
commit 554d70a6ae
6 changed files with 100 additions and 51 deletions

View File

@ -8,7 +8,6 @@ import (
mqtt "github.com/eclipse/paho.mqtt.golang"
"go.uber.org/zap"
"google.golang.org/protobuf/proto"
"io/ioutil"
"os"
)
@ -69,7 +68,7 @@ func (r *Recorder) onRecordMsg(_ mqtt.Client, message mqtt.Message) {
l.Errorf("unable to create %v directory: %v", imgDir, err)
return
}
err = ioutil.WriteFile(imgName, msg.GetFrame().GetFrame(), os.FileMode(0755))
err = os.WriteFile(imgName, msg.GetFrame().GetFrame(), os.FileMode(0755))
if err != nil {
l.Errorf("unable to write img file %v: %v", imgName, err)
return
@ -83,15 +82,17 @@ func (r *Recorder) onRecordMsg(_ mqtt.Client, message mqtt.Message) {
return
}
record := Record{
UserAngle: msg.GetSteering().GetSteering(),
CamImageArray: imgRef,
UserAngle: msg.GetSteering().GetSteering(),
CamImageArray: imgRef,
AutopilotAngle: msg.GetAutopilotSteering().GetSteering(),
DriveMode: msg.GetDriveMode().GetDriveMode().String(),
}
jsonBytes, err := json.Marshal(&record)
if err != nil {
l.Errorf("unable to marshal json content: %v", err)
return
}
err = ioutil.WriteFile(recordName, jsonBytes, 0755)
err = os.WriteFile(recordName, jsonBytes, 0755)
if err != nil {
l.Errorf("unable to write json file %v: %v", recordName, err)
}
@ -99,6 +100,8 @@ func (r *Recorder) onRecordMsg(_ mqtt.Client, message mqtt.Message) {
}
type Record struct {
UserAngle float32 `json:"user/angle,"`
CamImageArray string `json:"cam/image_array,"`
UserAngle float32 `json:"user/angle,"`
AutopilotAngle float32 `json:"autopilot/angle,"`
CamImageArray string `json:"cam/image_array,"`
DriveMode string `json:"drive/mode,omitempty"`
}

View File

@ -8,6 +8,7 @@ import (
mqtt "github.com/eclipse/paho.mqtt.golang"
"github.com/golang/protobuf/ptypes/timestamp"
"io/ioutil"
"os"
"path"
"testing"
"time"
@ -35,12 +36,14 @@ func TestRecorder_onRecordMsg(t *testing.T) {
recordSet: "default",
},
args: args{
message: generateMessage("1", "default", -0.5),
message: generateMessage("1", "default", -0.5, 0.6, events.DriveMode_PILOT),
},
wantJsonFileName: "record_1.json",
wantRecord: Record{
UserAngle: -0.5,
CamImageArray: "cam/cam-image_array_1.jpg",
UserAngle: -0.5,
CamImageArray: "cam/cam-image_array_1.jpg",
AutopilotAngle: 0.6,
DriveMode: events.DriveMode_PILOT.String(),
},
},
}
@ -50,7 +53,7 @@ func TestRecorder_onRecordMsg(t *testing.T) {
recordsDir: tt.fields.recordsDir,
}
r.onRecordMsg(nil, tt.args.message)
fis, err := ioutil.ReadDir(tt.fields.recordsDir)
fis, err := os.ReadDir(tt.fields.recordsDir)
if err != nil {
t.Errorf("unable to list files: %v", err)
return
@ -64,7 +67,7 @@ func TestRecorder_onRecordMsg(t *testing.T) {
if fis[0].Name() != tt.name {
t.Errorf("bad directory name '%v', want '%v'", fis[0].Name(), tt.fields.recordSet)
}
records, err := ioutil.ReadDir(path.Join(tt.fields.recordsDir, fis[0].Name()))
records, err := os.ReadDir(path.Join(tt.fields.recordsDir, fis[0].Name()))
if err != nil {
t.Errorf("unable to list record files")
return
@ -113,7 +116,8 @@ func TestRecorder_onRecordMsg(t *testing.T) {
}
}
func generateMessage(id string, recordSet string, userAngle float32) mqtt.Message {
func generateMessage(id string, recordSet string, userAngle float32, autopilotAngle float32,
driveMode events.DriveMode) mqtt.Message {
now := time.Now()
msg := events.RecordMessage{
Frame: &events.FrameMessage{
@ -139,6 +143,21 @@ func generateMessage(id string, recordSet string, userAngle float32) mqtt.Messag
},
},
},
DriveMode: &events.DriveModeMessage{
DriveMode: driveMode,
},
AutopilotSteering: &events.SteeringMessage{
Steering: autopilotAngle,
Confidence: 0.8,
FrameRef: &events.FrameRef{
Name: fmt.Sprintf("framie-%s", id),
Id: id,
CreatedAt: &timestamp.Timestamp{
Seconds: now.Unix(),
Nanos: int32(now.Nanosecond()),
},
},
},
RecordSet: recordSet,
}