feat: add accelation factor args
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user