def __init__(self, clientID, suffix=""): # vrep.simxFinish(-1) # just in case, close all opened connections # self._clientID = vrep.simxStart('127.0.0.1',19997, True, True, 5000, 5) # Connect to V-REP self._clientID = clientID self.suffix = suffix _, self._left_joint = vrep.simxGetObjectHandle(self._clientID, 'ePuck_leftJoint' + suffix, vrep.simx_opmode_oneshot_wait) _, self._right_joint = vrep.simxGetObjectHandle(self._clientID, 'ePuck_rightJoint' + suffix, vrep.simx_opmode_oneshot_wait) _, self._light_sensor = vrep.simxGetObjectHandle(self._clientID, 'ePuck_lightSensor' + suffix, vrep.simx_opmode_oneshot_wait) _, self._camera = vrep.simxGetObjectHandle(self._clientID, 'ePuck_camera' + suffix, vrep.simx_opmode_oneshot_wait) self._prox_handles = [] for i in range(1,9): _, p = vrep.simxGetObjectHandle(self._clientID, 'ePuck_proxSensor' + str(i) + suffix, vrep.simx_opmode_oneshot_wait) self._prox_handles.append(p) # First calls with simx_opmode_streaming for i in range(8): vrep.simxReadProximitySensor(self._clientID, self._prox_handles[i], vrep.simx_opmode_streaming) _, self.camera_resolution, _ = vrep.simxGetVisionSensorImage(self._clientID, self._camera, options=0, operationMode=vrep.simx_opmode_streaming) _, self.light_sensor_resolution, _ = vrep.simxGetVisionSensorImage(self._clientID, self._light_sensor, options=0, operationMode=vrep.simx_opmode_streaming) self._body = vrep.simxGetObjectHandle(self._clientID, "ePuck_bodyElements" + suffix, vrep.simx_opmode_oneshot_wait) self.wheel_diameter = 4.25 * 10 ** -2 self.base_lenght = 7 * 10 ** -2 self._prox_aliases = {"all" : range(8), "all-but-rear" : range(6), "front" : [2, 3], "rear" : [6, 7], "front-left" : [0, 1, 2], "front-right": [3, 4, 5]} self.no_detection_value = 2000. self._fwd_spd, self._rot_spd = 0., 0. self._left_spd, self._right_spd = 0., 0. self.fwd_spd, self.rot_spd = 0., 0. vrep.simxGetFloatSignal(self._clientID, "CurrentTime", vrep.simx_opmode_streaming) self.freq = 100 self._behaviors = {} self._runnings = {} self._to_detach = {} self._sensations = {} self._conditions = {} self._registered_objects = {} _, _, _ , _, _ = vrep.simxGetObjectGroupData(self._clientID, vrep.sim_object_shape_type, 0, vrep.simx_opmode_streaming) sleep(0.5) self.register_all_scene_objects()
def get_float_signal(self, signal, first_call=False): opmode = vrep.simx_opmode_streaming if first_call else vrep.simx_opmode_buffer status, value = vrep.simxGetFloatSignal(self.id, signal, opmode) self.check_return_code(status, tolerance=vrep.simx_return_novalue_flag) return value
def simulation_time(self): _, sim_time = vrep.simxGetFloatSignal(self._clientID, "CurrentTime", vrep.simx_opmode_buffer) return sim_time