Source code for morse.actuators.steer_force

import logging; logger = logging.getLogger("morse." + __name__)
import morse.core.actuator
from morse.helpers.components import add_data

[docs]class SteerForce(morse.core.actuator.Actuator): """ This actuator reads the values of the steering angle, the engine power and the braking force to drive a car like vehicle. It is meant to work with robots implementing the `Blender Vehicle Wrapper <http://www.tutorialsforblender3d.com/Game_Engine/Vehicle/Vehicle_1.html>`_, such as the :doc:`Hummer robot <../robots/hummer>`. .. note:: Robots implementing the Vehicle Wrapper must be pointing towards their local Y axis. This means the robots will be oriented differently with respect to all other MORSE components. """ _name = "Steer/Force Actuator" _short_desc = "Motion controller using engine force and steer angle speeds" add_data('steer', 0.0, "float", 'Angle of the wheels with respect to the vehicle \ (in radian)') add_data('force', 0.0, "float", 'The force applied to the traction wheels. \ A negative force will make the vehicle move forward. \ A positive force will make it go backwards.') add_data('brake', 0.0, "float", 'The force applied to the brake. \ It opposes to the force.') def __init__(self, obj, parent=None): logger.info('%s initialization' % obj.name) # Call the constructor of the parent class morse.core.actuator.Actuator.__init__(self, obj, parent) logger.info('Component initialized')
[docs] def default_action(self): """ Apply (steer, force) to the parent robot. """ # Get the Blender object of the parent robot vehicle = self.robot_parent.vehicle # Update the steering value for these wheels: # The number at the end represents the wheel 'number' in the # order they were created when initializing the robot. # Front wheels #0 and #1. # Rear wheels #2 and #3. vehicle.setSteeringValue(self.local_data['steer'], 0) vehicle.setSteeringValue(self.local_data['steer'], 1) # Update the Force (speed) for these wheels: vehicle.applyEngineForce(self.local_data['force'] * .4, 0) vehicle.applyEngineForce(self.local_data['force'] * .4, 1) vehicle.applyEngineForce(self.local_data['force'] * .4, 2) vehicle.applyEngineForce(self.local_data['force'] * .4, 3) # Brakes: # Applies the braking force to each wheel listed: # ['brakes'] = the game property value for the car labeled 'brakes' # Default value is 0: vehicle.applyBraking(self.local_data['brake'] * .1, 0) vehicle.applyBraking(self.local_data['brake'] * .1, 1) vehicle.applyBraking(self.local_data['brake'] * 1.3, 2) vehicle.applyBraking(self.local_data['brake'] * 1.3, 3)