Main Content

getOccupancy

Get occupancy probability of locations

Description

This MATLAB® function returns the occupancy probability values of specified locations in an occupancy map.

occVal = getOccupancy(map,xy) returns an array of probability occupancy values at the xy locations in the world frame. Values close to 1 represent a high probability that the cell contains an obstacle. Values close to 0 represent a high probability that the cell is not occupied and obstacle free. Unknown locations, including outside the map, return map.DefaultValue.

example

occVal = getOccupancy(map,xy,'local') returns an array of occupancy values at the xy locations in the local frame.

occVal = getOccupancy(map,ij,'grid') specifies ij grid cell indices instead of xy locations.

[occVal,validPts] = getOccupancy(___) additionally outputs an n-element vector of logical values indicating whether input coordinates are within the map limits.

occMatrix = getOccupancy(map) returns all occupancy values in the map as a matrix.

occMatrix = getOccupancy(map,bottomLeft,matSize) returns a matrix of occupancy values by specifying the bottom-left corner location in world coordinates and the matrix size in meters.

occMatrix = getOccupancy(map,bottomLeft,matSize,'local') returns a matrix of occupancy values by specifying the bottom-left corner location in local coordinates and the matrix size in meters.

occMatrix = getOccupancy(map,topLeft,matSize,'grid') returns a matrix of occupancy values by specifying the top-left corner location in grid indices and the matrix size.

Examples

collapse all

Create an empty occupancy grid map.

map = occupancyMap(10,10,20);

Specify the pose of the vehicle, ranges, angles, and the maximum range of the laser scan.

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Create a lidarScan object with the specified ranges and angles.

scan = lidarScan(ranges,angles);

Insert the laser scan data into the occupancy map.

insertRay(map,pose,scan,maxrange);

Show the map to see the results of inserting the laser scan.

show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Check the occupancy of the spot directly in front of the vehicle.

getOccupancy(map,[8 5])
ans = 
0.7000

Add a second reading and view the update to the occupancy values. The additional reading increases the confidence in the readings. The free and occupied values become more distinct.

insertRay(map,pose,scan,maxrange);
show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

getOccupancy(map,[8 5])
ans = 
0.8448

Access occupancy values and check their occupancy status based on the occupied and free thresholds of the occupancyMap object.

Create a matrix and populate it with values. Use this matrix to create an occupancy map.

p = 0.5*ones(20,20);
p(11:20,11:20) = 0.75*ones(10,10);
map = occupancyMap(p,10);

Get the occupancy of different locations and check their occupancy statuses. The occupancy status returns 0 for free space and 1 for occupied space. Unknown values return –1.

pocc = getOccupancy(map,[1.5 1])
pocc = 
0.7500
occupied = checkOccupancy(map,[1.5 1])
occupied = 
1
pocc2 = getOccupancy(map,[5 5],'grid')
pocc2 = 
0.5000
occupied2 = checkOccupancy(map,[5 5],'grid')
occupied2 = 
-1

Input Arguments

collapse all

Map representation, specified as a occupancyMap object. This object represents the environment of the vehicle. The object contains a matrix grid with values representing the probability of the occupancy of that cell. Values close to 1 represent a high probability that the cell contains an obstacle. Values close to 0 represent a high probability that the cell is not occupied and obstacle free.

World coordinates, specified as an n-by-2 matrix of [x y] pairs, where n is the number of world coordinates.

Data Types: double

Grid positions, specified as an n-by-2 matrix of [i j] pairs in [rows cols] format, where n is the number of grid positions.

Data Types: double

Location of bottom left corner of output matrix in world or local coordinates, specified as a two-element vector, [xCoord yCoord]. Location is in world or local coordinates based on syntax.

Data Types: double

Output matrix size, specified as a two-element vector, [xLength yLength] or [gridRow gridCol]. Size is in world, local, or grid coordinates based on syntax.

Data Types: double

Location of top left corner of grid, specified as a two-element vector, [iCoord jCoord].

Data Types: double

Output Arguments

collapse all

Probability occupancy values, returned as a column vector the same length as either xy or ij.

Values close to 0 represent a high probability that the cell is not occupied and obstacle free.

Valid map locations, returned as an n-by-1 column vector equal in length to xy or ij. Locations inside the map return a value of 1. Locations outside the map limits return a value of 0.

Matrix of occupancy values, returned as matrix with size equal to matSize or the size of map.

Values close to 0 represent a high probability that the cell is not occupied and obstacle free.

Limitations

Occupancy values have a limited resolution of ±0.001. The values are stored as int16 using a log-odds representation. This data type limits resolution, but saves memory when storing large maps in MATLAB. When calling setOccupancy and then getOccupancy, the value returned might not equal the value you set. For more information, see the log-odds representations section in Occupancy Grids.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2019b

See Also

|

Topics