diff --git a/dist/roverd b/dist/roverd index 8d318627..b5a89b26 100755 Binary files a/dist/roverd and b/dist/roverd differ diff --git a/dist/servoverifier b/dist/servoverifier index cda682f5..89e121d9 100755 Binary files a/dist/servoverifier and b/dist/servoverifier differ diff --git a/pi/roverd/camera_servo.go b/pi/roverd/camera_servo.go index d1ad08ac..16eb92d7 100644 --- a/pi/roverd/camera_servo.go +++ b/pi/roverd/camera_servo.go @@ -118,6 +118,9 @@ func (s *CameraServo) angleToPulse(angle float64) int { } norm := (angle - s.cfg.MinAngle) / totalRange norm = math.Max(0, math.Min(1, norm)) + if s.cfg.Invert { + norm = 1 - norm + } pulseRange := s.cfg.MaxPulseUs - s.cfg.MinPulseUs return s.cfg.MinPulseUs + int(math.Round(norm*float64(pulseRange))) } @@ -129,6 +132,9 @@ func (s *CameraServo) pulseToAngle(pulse int) float64 { } norm := float64(pulse-s.cfg.MinPulseUs) / float64(pulseRange) norm = math.Max(0, math.Min(1, norm)) + if s.cfg.Invert { + norm = 1 - norm + } return s.cfg.MinAngle + norm*(s.cfg.MaxAngle-s.cfg.MinAngle) } diff --git a/pi/roverd/config.go b/pi/roverd/config.go index a0b5cda4..5a0c7f6b 100644 --- a/pi/roverd/config.go +++ b/pi/roverd/config.go @@ -93,6 +93,7 @@ type CameraServoConfig struct { HomeAngle float64 `yaml:"homeAngle" json:"homeAngle"` NudgeDegrees float64 `yaml:"nudgeDegrees" json:"nudgeDegrees"` AllowRawPulse bool `yaml:"allowRawPulse" json:"allowRawPulse"` + Invert bool `yaml:"invert" json:"invert"` } type NightVisionConfig struct { diff --git a/pi/roverd/roverd.sample.yaml b/pi/roverd/roverd.sample.yaml index bcac8ef3..fec07f0e 100644 --- a/pi/roverd/roverd.sample.yaml +++ b/pi/roverd/roverd.sample.yaml @@ -32,6 +32,7 @@ cameraServo: cycleLen: 20000 minPulseUs: 900 maxPulseUs: 2100 + invert: false minAngle: -15 maxAngle: 30 homeAngle: 0