From 7456493b346cee2be496cf67ffc3cc5532e7a6ba Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 27 May 2013 11:08:07 +1000 Subject: [PATCH] autotest: make rover sim closer to Toms slash --- Tools/autotest/pysim/rover.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Tools/autotest/pysim/rover.py b/Tools/autotest/pysim/rover.py index d3e22e64824..a6312cd4244 100644 --- a/Tools/autotest/pysim/rover.py +++ b/Tools/autotest/pysim/rover.py @@ -11,32 +11,35 @@ from rotmat import Vector3, Matrix3 class Rover(Aircraft): '''a simple rover''' def __init__(self, - max_speed=13, - max_accel=9, + max_speed=20, + max_accel=30, wheelbase=0.335, wheeltrack=0.296, max_wheel_turn=35, + turning_circle=1.8, skid_steering=False): Aircraft.__init__(self) self.max_speed = max_speed self.max_accel = max_accel + self.turning_circle = turning_circle self.wheelbase = wheelbase self.wheeltrack = wheeltrack self.max_wheel_turn = max_wheel_turn self.last_time = time.time() self.skid_steering = skid_steering - def turn_circle(self, steering_angle): - '''return turning circle (diameter) in meters for steering_angle in degrees + def turn_circle(self, steering): + '''return turning circle (diameter) in meters for steering angle proportion in degrees ''' - theta = radians(steering_angle) - return (self.wheeltrack/2) + (self.wheelbase/sin(theta)) - - def yaw_rate(self, steering_angle, speed): - '''return yaw rate in degrees/second given steering_angle and speed''' - if abs(steering_angle) < 1.0e-6 or abs(speed) < 1.0e-6: + if abs(steering) < 1.0e-6: return 0 - d = self.turn_circle(steering_angle) + return self.turning_circle * sin(radians(35)) / sin(radians(steering*35)) + + def yaw_rate(self, steering, speed): + '''return yaw rate in degrees/second given steering_angle and speed''' + if abs(steering) < 1.0e-6 or abs(speed) < 1.0e-6: + return 0 + d = self.turn_circle(steering) c = pi * d t = c / speed rate = 360.0 / t @@ -84,7 +87,7 @@ class Rover(Aircraft): speed = velocity_body.x # yaw rate in degrees/s - yaw_rate = self.yaw_rate(self.max_wheel_turn * steering, speed) + yaw_rate = self.yaw_rate(steering, speed) # target speed with current throttle target_speed = throttle * self.max_speed