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.
173 lines
5.3 KiB
173 lines
5.3 KiB
%map Map of planar point features
|
|
%
|
|
% A Map object represents a square 2D environment with a number of landmark
|
|
% feature points.
|
|
%
|
|
% Methods::
|
|
% plot Plot the feature map
|
|
% feature Return a specified map feature
|
|
% display Display map parameters in human readable form
|
|
% char Convert map parameters to human readable string
|
|
%
|
|
% Properties::
|
|
% map Matrix of map feature coordinates 2xN
|
|
% dim The dimensions of the map region x,y in [-dim,dim]
|
|
% nfeatures The number of map features N
|
|
%
|
|
% Examples::
|
|
%
|
|
% To create a map for an area where X and Y are in the range -10 to +10 metres
|
|
% and with 50 random feature points
|
|
% map = Map(50, 10);
|
|
% which can be displayed by
|
|
% map.plot();
|
|
%
|
|
% Reference::
|
|
%
|
|
% Robotics, Vision & Control, Chap 6,
|
|
% Peter Corke,
|
|
% Springer 2011
|
|
%
|
|
% See also RangeBearingSensor, EKF.
|
|
|
|
% Copyright (C) 1993-2011, 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/>.
|
|
|
|
classdef Map < handle
|
|
% TODO:
|
|
% add a name property, show in char()
|
|
|
|
properties
|
|
map % map features
|
|
dim % map dimension
|
|
nfeatures % number of features in map
|
|
|
|
verbose
|
|
end
|
|
|
|
methods
|
|
|
|
% constructor
|
|
function map = Map(nfeatures, varargin)
|
|
%Map.Map Map of point feature landmarks
|
|
%
|
|
% M = Map(N, DIM, OPTIONS) is a Map object that represents N random point features
|
|
% in a planar region bounded by +/-DIM in the x- and y-directions.
|
|
%
|
|
% Options::
|
|
% 'verbose' Be verbose
|
|
|
|
opt = [];
|
|
[opt,args] = tb_optparse(opt, varargin);
|
|
map.verbose = opt.verbose;
|
|
|
|
if ~isempty(args) && isnumeric(args{1})
|
|
dim = args{1};
|
|
else
|
|
dim = 10;
|
|
end
|
|
map.dim = dim;
|
|
map.nfeatures = nfeatures;
|
|
map.map = dim * (2*rand(2, nfeatures)-1);
|
|
map.verbose = false;
|
|
end
|
|
|
|
function f = feature(map, k)
|
|
%Map.feature Return the specified map feature
|
|
%
|
|
% F = M.feature(K) is the coordinate (2x1) of the K'th feature.
|
|
f = map.map(:,k);
|
|
end
|
|
|
|
function plot(map, varargin)
|
|
%Map.plot Plot the map
|
|
%
|
|
% M.plot() plots the feature map in the current figure, as a square
|
|
% region with dimensions given by the M.dim property. Each feature
|
|
% is marked by a black diamond.
|
|
%
|
|
% M.plot(LS) plots the feature map as above, but the arguments LS
|
|
% are passed to plot and override the default marker style.
|
|
%
|
|
% Notes::
|
|
% - The plot is left with HOLD ON.
|
|
clf
|
|
d = map.dim;
|
|
axis([-d d -d d]);
|
|
xlabel('x');
|
|
ylabel('y');
|
|
|
|
if nargin == 1
|
|
args = {'kd'};
|
|
else
|
|
args = varargin;
|
|
end
|
|
plot(map.map(1,:)', map.map(2,:)', args{:});
|
|
grid on
|
|
hold on
|
|
end
|
|
|
|
function show(map, varargin)
|
|
%map.SHOW Show the feature map
|
|
%
|
|
% Notes::
|
|
% - Deprecated, use plot method.
|
|
warning('show method is deprecated, use plot() instead');
|
|
map.plot(varargin{:});
|
|
end
|
|
|
|
function verbosity(map, v)
|
|
%map.verbosity Set verbosity
|
|
%
|
|
% M.verbosity(V) set verbosity to V, where 0 is silent and greater
|
|
% values display more information.
|
|
map.verbose = v;
|
|
end
|
|
|
|
function display(map)
|
|
%map.display Display map parameters
|
|
%
|
|
% M.display() display map parameters in a compact
|
|
% human readable form.
|
|
%
|
|
% Notes::
|
|
% - this method is invoked implicitly at the command line when the result
|
|
% of an expression is a Map object and the command has no trailing
|
|
% semicolon.
|
|
%
|
|
% See also map.char.
|
|
loose = strcmp( get(0, 'FormatSpacing'), 'loose');
|
|
if loose
|
|
disp(' ');
|
|
end
|
|
disp([inputname(1), ' = '])
|
|
disp( char(map) );
|
|
end % display()
|
|
|
|
function s = char(map)
|
|
%map.char Convert vehicle parameters and state to a string
|
|
%
|
|
% s = M.char() is a string showing map parameters in
|
|
% a compact human readable format.
|
|
s = 'Map object';
|
|
s = char(s, sprintf(' %d features', map.nfeatures));
|
|
s = char(s, sprintf(' dimension %.1f', map.dim));
|
|
end
|
|
|
|
end % method
|
|
|
|
end % classdef
|