feat: add accelation factor args

This commit is contained in:
2024-01-15 19:18:36 +01:00
parent 5eac26a738
commit 36efa2bef0
3 changed files with 76 additions and 13 deletions

View File

@ -20,13 +20,22 @@ func NewCustomControllerWithJsonConfig(filename string) *CustomController {
if err != nil {
zap.S().Panicf("unable to init brake controller with json config '%s': %v", filename, err)
}
return &CustomController{cfg: config}
return &CustomController{cfg: config, acceleratorFactor: 1.0}
}
func NewCustomControllerWithJsonConfigAndAcceleratorFactor(filename string, acceleratorFactor float64) *CustomController {
config, err := NewConfigFromJson(filename)
if err != nil {
zap.S().Panicf("unable to init brake controller with json config '%s': %v", filename, err)
}
return &CustomController{cfg: config, acceleratorFactor: acceleratorFactor}
}
type CustomController struct {
muRealThrottle sync.RWMutex
realThrottle types.Throttle
cfg *Config
muRealThrottle sync.RWMutex
realThrottle types.Throttle
cfg *Config
acceleratorFactor float64
}
func (b *CustomController) SetRealThrottle(t types.Throttle) {
@ -43,6 +52,13 @@ func (b *CustomController) GetRealThrottle() types.Throttle {
}
func (b *CustomController) AdjustThrottle(targetThrottle types.Throttle) types.Throttle {
if targetThrottle > b.GetRealThrottle() {
throttle := b.GetRealThrottle() + (targetThrottle-b.GetRealThrottle())*types.Throttle(b.acceleratorFactor)
if throttle > 1.0 {
throttle = 1.0
}
return throttle
}
return b.cfg.ValueOf(b.GetRealThrottle(), targetThrottle)
}

View File

@ -7,7 +7,8 @@ import (
func TestController_AdjustThrottle(t *testing.T) {
type fields struct {
realThrottle types.Throttle
realThrottle types.Throttle
acceleratorFactor float64
}
type args struct {
targetThrottle types.Throttle
@ -18,46 +19,89 @@ func TestController_AdjustThrottle(t *testing.T) {
args args
want types.Throttle
}{
{
name: "target same as current throttle with big acceleration",
fields: fields{realThrottle: 0.2, acceleratorFactor: 2.},
args: args{targetThrottle: 0.2},
want: 0.2,
},
{
name: "target > as current throttle with big acceleration",
fields: fields{realThrottle: 0.2, acceleratorFactor: 2.},
args: args{targetThrottle: 0.3},
want: 0.40000004,
},
{
name: "target >> as current throttle with big acceleration",
fields: fields{realThrottle: 0.2, acceleratorFactor: 2.},
args: args{targetThrottle: 0.5},
want: 0.8,
},
{
name: "target >> as current throttle with big acceleration, result > 1",
fields: fields{realThrottle: 0.2, acceleratorFactor: 3.},
args: args{targetThrottle: 0.5},
want: 1.0,
},
{
name: "target < as current throttle with big acceleration",
fields: fields{realThrottle: 0.8, acceleratorFactor: 2.},
args: args{targetThrottle: 0.7},
want: -0.1,
},
{
name: "target << as current throttle with big acceleration",
fields: fields{realThrottle: 0.8, acceleratorFactor: 2.},
args: args{targetThrottle: 0.5},
want: -0.5,
},
{
name: "target <<< as current throttle with big acceleration",
fields: fields{realThrottle: 0.8, acceleratorFactor: 2.},
args: args{targetThrottle: 0.2},
want: -1.,
},
{
name: "target same as current throttle",
fields: fields{realThrottle: 0.2},
fields: fields{realThrottle: 0.2, acceleratorFactor: 1.},
args: args{targetThrottle: 0.2},
want: 0.2,
},
{
name: "target > as current throttle",
fields: fields{realThrottle: 0.2},
fields: fields{realThrottle: 0.2, acceleratorFactor: 1.},
args: args{targetThrottle: 0.3},
want: 0.3,
},
{
name: "target >> as current throttle",
fields: fields{realThrottle: 0.2},
fields: fields{realThrottle: 0.2, acceleratorFactor: 1.},
args: args{targetThrottle: 0.5},
want: 0.5,
},
{
name: "target < as current throttle",
fields: fields{realThrottle: 0.8},
fields: fields{realThrottle: 0.8, acceleratorFactor: 1.},
args: args{targetThrottle: 0.7},
want: -0.1,
},
{
name: "target << as current throttle",
fields: fields{realThrottle: 0.8},
fields: fields{realThrottle: 0.8, acceleratorFactor: 1.},
args: args{targetThrottle: 0.5},
want: -0.5,
},
{
name: "target <<< as current throttle",
fields: fields{realThrottle: 0.8},
fields: fields{realThrottle: 0.8, acceleratorFactor: 1.},
args: args{targetThrottle: 0.2},
want: -1.,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := &CustomController{cfg: NewConfig()}
b := &CustomController{cfg: NewConfig(), acceleratorFactor: tt.fields.acceleratorFactor}
b.SetRealThrottle(tt.fields.realThrottle)
if got := b.AdjustThrottle(tt.args.targetThrottle); got != tt.want {
t.Errorf("AdjustThrottle() = %v, want %v", got, tt.want)