feat: implement max throttle limiter on user drive
close robocars/robocar-setup#7
This commit is contained in:
parent
62d7397e05
commit
72e93141d9
@ -101,6 +101,21 @@ func (p *ThrottlePart) onRCThrottle(_ mqtt.Client, message mqtt.Message) {
|
|||||||
zap.S().Debug("publish new throttle value from rc")
|
zap.S().Debug("publish new throttle value from rc")
|
||||||
// Republish same content
|
// Republish same content
|
||||||
payload := message.Payload()
|
payload := message.Payload()
|
||||||
|
var throttleMsg events.ThrottleMessage
|
||||||
|
err := proto.Unmarshal(payload, &throttleMsg)
|
||||||
|
if err != nil {
|
||||||
|
zap.S().Errorf("unable to unmarshall throttle msg to check throttle value: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if throttleMsg.GetThrottle() > p.maxThrottle {
|
||||||
|
zap.S().Debug("throttle upper that max value allowed, patch value from %v to %v", throttleMsg.GetThrottle(), p.maxThrottle)
|
||||||
|
throttleMsg.Throttle = p.maxThrottle
|
||||||
|
payload, err = proto.Marshal(&throttleMsg)
|
||||||
|
if err != nil {
|
||||||
|
zap.S().Errorf("unable to marshall throttle msg: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
publish(p.client, p.throttleTopic, &payload)
|
publish(p.client, p.throttleTopic, &payload)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,23 +38,27 @@ func TestDefaultThrottle(t *testing.T) {
|
|||||||
p := NewPart(nil, throttleTopic, driveModeTopic, rcThrottleTopic, minValue, 1., 200)
|
p := NewPart(nil, throttleTopic, driveModeTopic, rcThrottleTopic, minValue, 1., 200)
|
||||||
|
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
maxThrottle float32
|
||||||
driveMode events.DriveModeMessage
|
driveMode events.DriveModeMessage
|
||||||
rcThrottle events.ThrottleMessage
|
rcThrottle events.ThrottleMessage
|
||||||
expectedThrottle events.ThrottleMessage
|
expectedThrottle events.ThrottleMessage
|
||||||
}{
|
}{
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.3, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.3, Confidence: 1.0}},
|
{"test1", 1., events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.3, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.3, Confidence: 1.0}},
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_PILOT}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}, events.ThrottleMessage{Throttle: minValue, Confidence: 1.0}},
|
{"test2", 1., events.DriveModeMessage{DriveMode: events.DriveMode_PILOT}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}, events.ThrottleMessage{Throttle: minValue, Confidence: 1.0}},
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_PILOT}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}, events.ThrottleMessage{Throttle: minValue, Confidence: 1.0}},
|
{"test3", 1., events.DriveModeMessage{DriveMode: events.DriveMode_PILOT}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}, events.ThrottleMessage{Throttle: minValue, Confidence: 1.0}},
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}},
|
{"test4", 1., events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.5, Confidence: 1.0}},
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}},
|
{"test5", 1., events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}},
|
||||||
{events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.6, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.6, Confidence: 1.0}},
|
{"test6", 1., events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.6, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.6, Confidence: 1.0}},
|
||||||
|
{"limit max throttle on user mode", 0.4, events.DriveModeMessage{DriveMode: events.DriveMode_USER}, events.ThrottleMessage{Throttle: 0.6, Confidence: 1.0}, events.ThrottleMessage{Throttle: 0.4, Confidence: 1.0}},
|
||||||
}
|
}
|
||||||
|
|
||||||
go p.Start()
|
go p.Start()
|
||||||
defer func() { close(p.cancel) }()
|
defer func() { close(p.cancel) }()
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
p.maxThrottle = c.maxThrottle
|
||||||
p.onDriveMode(nil, testtools.NewFakeMessageFromProtobuf(driveModeTopic, &c.driveMode))
|
p.onDriveMode(nil, testtools.NewFakeMessageFromProtobuf(driveModeTopic, &c.driveMode))
|
||||||
p.onRCThrottle(nil, testtools.NewFakeMessageFromProtobuf(rcThrottleTopic, &c.rcThrottle))
|
p.onRCThrottle(nil, testtools.NewFakeMessageFromProtobuf(rcThrottleTopic, &c.rcThrottle))
|
||||||
|
|
||||||
@ -80,5 +84,6 @@ func TestDefaultThrottle(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(1 * time.Millisecond)
|
time.Sleep(1 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user