diff --git a/Tools/autotest/pysim/rover.py b/Tools/autotest/pysim/rover.py index bb1e42dfb5..81523fbb9c 100644 --- a/Tools/autotest/pysim/rover.py +++ b/Tools/autotest/pysim/rover.py @@ -13,14 +13,27 @@ class Rover(Aircraft): def __init__(self, max_speed=10, max_accel=10, - max_turn_rate=45): + max_turn_rate=45, + skid_steering=False): Aircraft.__init__(self) self.max_speed = max_speed self.max_accel = max_accel self.max_turn_rate = max_turn_rate self.last_time = time.time() + self.skid_steering = skid_steering def update(self, state): + + # if in skid steering mode the steering and throttle values are used for motor1 and motor2 + if self.skid_steering: + motor1 = state.steering + motor2 = state.throttle + steering = motor2 - motor1 + throttle = 0.5*(motor1 + motor2) + else: + steering = state.steering + throttle = state.throttle + # how much time has passed? t = time.time() delta_time = t - self.last_time @@ -33,10 +46,10 @@ class Rover(Aircraft): speed = velocity_body.x # yaw rate in degrees/s - yaw_rate = self.max_turn_rate * state.steering * (speed / self.max_speed) + yaw_rate = self.max_turn_rate * steering * (speed / self.max_speed) # target speed with current throttle - target_speed = state.throttle * self.max_speed + target_speed = throttle * self.max_speed # linear acceleration in m/s/s - very crude model accel = self.max_accel * (target_speed - speed) / self.max_speed @@ -76,3 +89,4 @@ class Rover(Aircraft): # update lat/lon/altitude self.update_position(delta_time) + diff --git a/Tools/autotest/pysim/sim_rover.py b/Tools/autotest/pysim/sim_rover.py index 695d79489e..af5292e1bc 100755 --- a/Tools/autotest/pysim/sim_rover.py +++ b/Tools/autotest/pysim/sim_rover.py @@ -76,6 +76,7 @@ parser.add_option("--simin", dest="simin", help="SIM input (IP:port)", parser.add_option("--simout", dest="simout", help="SIM output (IP:port)", default="127.0.0.1:5501") parser.add_option("--home", dest="home", type='string', default=None, help="home lat,lng,alt,hdg (required)") parser.add_option("--rate", dest="rate", type='int', help="SIM update rate", default=100) +parser.add_option("--skid-steering", action='store_true', default=False, help="Use skid steering") (opts, args) = parser.parse_args() @@ -102,7 +103,7 @@ sim_out.connect(sim_out_address) sim_out.setblocking(0) # create the quadcopter model -a = Rover() +a = Rover(skid_steering=opts.skid_steering) # initial controls state state = ControlState()