You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
8.1 KiB
226 lines
8.1 KiB
%VREP_camera Mirror of V-REP vision sensor object
|
|
%
|
|
% Mirror objects are MATLAB objects that reflect the state of objects in
|
|
% the V-REP environment. Methods allow the V-REP state to be examined or
|
|
% changed.
|
|
%
|
|
% This is a concrete class, derived from VREP_mirror, for all V-REP vision
|
|
% sensor objects and allows access to images and image parameters.
|
|
%
|
|
% Methods throw exception if an error occurs.
|
|
%
|
|
% Example::
|
|
% vrep = VREP();
|
|
% camera = vrep.camera('Vision_sensor');
|
|
% im = camera.grab();
|
|
% camera.setpose(T);
|
|
% R = camera.getorient();
|
|
%
|
|
% Methods::
|
|
%
|
|
% grab return an image from simulated camera
|
|
% setangle set field of view
|
|
% setresolution set image resolution
|
|
% setclipping set clipping boundaries
|
|
%
|
|
% Superclass methods (VREP_obj)::
|
|
% getpos get position of object
|
|
% setpos set position of object
|
|
% getorient get orientation of object
|
|
% setorient set orientation of object
|
|
% getpose get pose of object
|
|
% setpose set pose of object
|
|
%
|
|
% can be used to set/get the pose of the robot base.
|
|
%
|
|
% Superclass methods (VREP_mirror)::
|
|
% getname get object name
|
|
%-
|
|
% setparam_bool set object boolean parameter
|
|
% setparam_int set object integer parameter
|
|
% setparam_float set object float parameter
|
|
%
|
|
% getparam_bool get object boolean parameter
|
|
% getparam_int get object integer parameter
|
|
% getparam_float get object float parameter
|
|
%
|
|
% See also VREP_mirror, VREP_obj, VREP_arm, VREP_camera, VREP_hokuyo.
|
|
|
|
% Copyright (C) 1993-2015, by Peter I. Corke
|
|
%
|
|
% This file is part of The Robotics Toolbox for MATLAB (RTB).
|
|
%
|
|
% RTB is free software: you can redistribute it and/or modify
|
|
% it under the terms of the GNU Lesser General Public License as published by
|
|
% the Free Software Foundation, either version 3 of the License, or
|
|
% (at your option) any later version.
|
|
%
|
|
% RTB is distributed in the hope that it will be useful,
|
|
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
% GNU Lesser General Public License for more details.
|
|
%
|
|
% You should have received a copy of the GNU Leser General Public License
|
|
% along with RTB. If not, see <http://www.gnu.org/licenses/>.
|
|
%
|
|
% http://www.petercorke.com
|
|
|
|
classdef VREP_camera < VREP_obj
|
|
|
|
properties
|
|
end
|
|
|
|
methods
|
|
function obj = VREP_camera(vrep, name)
|
|
%VREP_camera.VREP_camera Create a camera mirror object
|
|
%
|
|
% C = VREP_camera(NAME, OPTIONS) is a mirror object that corresponds to the
|
|
% vision senor named NAME in the V-REP environment.
|
|
%
|
|
% Options::
|
|
% 'fov',A Specify field of view in degreees (default 60)
|
|
% 'resolution',N Specify resolution. If scalar NxN else N(1)xN(2)
|
|
% 'clipping',Z Specify near Z(1) and far Z(2) clipping boundaries
|
|
%
|
|
% Notes::
|
|
% - Default parameters are set in the V-REP environmen
|
|
% - Can be applied to "DefaultCamera" which controls the view in the
|
|
% simulator GUI.
|
|
%
|
|
% See also VREP_obj.
|
|
obj = obj@VREP_obj(vrep, name);
|
|
end
|
|
|
|
function im = setclipping(obj, near, far)
|
|
%VREP_camera.setclipping Set clipping boundaries for V-REP vision sensor
|
|
%
|
|
% C.setclipping(NEAR, FAR) set clipping boundaries to the
|
|
% range of Z from NEAR to FAR. Objects outside this range
|
|
% will not be rendered.
|
|
%
|
|
% See also VREP_camera.getclipping.
|
|
|
|
obj.setparam_float(1000, near);
|
|
obj.setparam_float(1001, far);
|
|
end
|
|
|
|
function clip = getclipping(obj)
|
|
%VREP_camera.getclipping Get clipping boundaries for V-REP vision sensor
|
|
%
|
|
% C.getclipping() is the near and far clipping boundaries (1x2) in the
|
|
% Z-direction as a 2-vector [NEAR,FAR].
|
|
%
|
|
% See also VREP_camera.setclipping.
|
|
|
|
clip(1) = obj.getparam_float(1000);
|
|
clip(2) = obj.getparam_float(1001);
|
|
end
|
|
|
|
function im = setangle(obj, angle)
|
|
%VREP_camera.setangle Set field of view for V-REP vision sensor
|
|
%
|
|
% C.setangle(FOV) set the field-of-view angle to FOV in
|
|
% radians.
|
|
%
|
|
% See also VREP_camera.getangle.
|
|
|
|
obj.setparam_float(1004, angle);
|
|
end
|
|
|
|
function fov = getangle(obj)
|
|
%VREP_camera.fetangle Fet field of view for V-REP vision sensor
|
|
%
|
|
% FOV = C.getangle(FOV) is the field-of-view angle to FOV in
|
|
% radians.
|
|
%
|
|
% See also VREP_camera.setangle.
|
|
|
|
fov = obj.getparam_float(1004);
|
|
end
|
|
|
|
function setresolution(obj, res)
|
|
%VREP_camera.setresolution Set resolution for V-REP vision sensor
|
|
%
|
|
% C.setresolution(R) set image resolution to RxR if R is a scalar or
|
|
% R(1)xR(2) if it is a 2-vector.
|
|
%
|
|
% Notes::
|
|
% - By default V-REP cameras seem to have very low (32x32) resolution.
|
|
% - Frame rate will decrease as frame size increases.
|
|
%
|
|
% See also VREP_camera.getresolution.
|
|
if isscalar(res)
|
|
rx = res; ry = res;
|
|
else
|
|
rx = res(1); ry = res(2);
|
|
end
|
|
obj.setparam_int(1002, rx);
|
|
obj.setparam_int(1003, ry);
|
|
end
|
|
|
|
function res = getresolution(obj)
|
|
%VREP_camera.getresolution Get resolution for V-REP vision sensor
|
|
%
|
|
% R = C.getresolution() is the image resolution (1x2) of the
|
|
% vision sensor R(1)xR(2).
|
|
%
|
|
% See also VREP_camera.setresolution.
|
|
|
|
res(1) = obj.getparam_int(1002);
|
|
res(2) = obj.getparam_int(1003);
|
|
end
|
|
|
|
function im = grab(obj, varargin)
|
|
%VREP_camera.grab Get image from V-REP vision sensor
|
|
%
|
|
% IM = C.grab(OPTIONS) is an image (WxH) returned from the V-REP
|
|
% vision sensor.
|
|
%
|
|
% C.grab(OPTIONS) as above but the image is displayed using
|
|
% idisp.
|
|
%
|
|
% Options::
|
|
% 'grey' Return a greyscale image (default color).
|
|
%
|
|
% Notes::
|
|
% - V-REP simulator must be running.
|
|
% - Color images can be quite dark, ensure good light sources.
|
|
% - Uses the signal 'handle_rgb_sensor' to trigger a single
|
|
% image generation.
|
|
%
|
|
% See also idisp, VREP.simstart.
|
|
|
|
opt.grey = false;
|
|
opt = tb_optparse(opt, varargin);
|
|
|
|
% Ask the sensor to turn itself on, take A SINGLE 3D IMAGE, and turn itself off again
|
|
obj.vrep.signal_int('handle_rgb_sensor', 1);
|
|
%fprintf('Capturing image...\n');
|
|
[s,res,image] = obj.vrep.vrep.simxGetVisionSensorImage2(obj.vrep.client, obj.h, opt.grey, obj.vrep.vrep.simx_opmode_oneshot_wait);
|
|
if s ~= 0
|
|
throw( obj.except(s) );
|
|
end
|
|
%fprintf('Captured %dx%d image\n', res(1), res(2));
|
|
|
|
if nargout == 0
|
|
idisp(image);
|
|
elseif nargout > 0
|
|
im = image;
|
|
end
|
|
end
|
|
|
|
function s = char(obj)
|
|
%VREP_camera.char Convert to string
|
|
%
|
|
% V.char() is a string representation the VREP parameters in human
|
|
% readable foramt.
|
|
%
|
|
% See also VREP.display.
|
|
|
|
s = sprintf('VREP camera object: %s', obj.name);
|
|
s = strvcat(s, sprintf('resolution: %d x %d', obj.getresolution()));
|
|
s = strvcat(s, sprintf('clipping: %g to %g', obj.getclipping()));
|
|
|
|
end
|
|
end
|
|
end
|