encode
Codificar el entorno del mapa utilizando el codificador de conjunto de puntos base
Desde R2024a
Sintaxis
Descripción
codifica un entorno 2D o 3D utilizando conjuntos de puntos base calculados por el objeto encodedValues
= encode(bpsObj
,environment
)bpsEncoder
.
[
además devuelve el punto de objeto más cercano para cada punto base. Los puntos de objeto son puntos que se encuentran en las áreas ocupadas en el entorno del mapa de entrada.encodedValues
,nearestPoints
] = encode(bpsObj
,environment
)
Ejemplos
Cargue un mapa de ejemplo en el espacio de trabajo y utilícelo para crear un mapa de ocupación con una resolución de 10 celdas/metro.
load("exampleMaps.mat","simpleMap"); map = occupancyMap(simpleMap,10);
Especifique la disposición del conjunto de puntos base para la codificación como "rectangular-grid"
.
arrangement = "rectangular-grid";
Especifique el tamaño de codificación como [10 10]. Por lo tanto, el número de puntos base devueltos para codificar el entorno del mapa será 100.
encodingSize = [10 10];
Especifique las dimensiones de la cuadrícula rectangular. Para obtener resultados correctos, las dimensiones de la cuadrícula rectangular deben ser aproximadamente las mismas que las del entorno de entrada.
xLims = map.XLocalLimits; yLims = map.YLocalLimits; dims = [(xLims(2) - xLims(1)) (yLims(2) - yLims(1))];
Especifique el centro del mapa como el centro de la cuadrícula rectangular.
center = [sum(xLims)/2 sum(yLims)/2];
Cree un codificador de conjunto de puntos base utilizando el objeto bpsEncoder
. Este objeto calcula los puntos base y los almacena en la propiedad Points
.
bpsObj= bpsEncoder(arrangement,encodingSize,Center=center,Dimensions=dims); basisPoints = bpsObj.Points;
Codifique el entorno del mapa 2D de entrada utilizando la función encode
.
[encodedValues,nearestPoint] = encode(bpsObj,map);
Muestra el mapa y los puntos base junto con los puntos de objeto más cercanos.
show(map) hold on scatter(basisPoints(:,1),basisPoints(:,2),"filled",DisplayName="Basis Points") quiver(basisPoints(:,1),basisPoints(:,2),nearestPoint(:,1)-basisPoints(:,1),... nearestPoint(:,2)-basisPoints(:,2),0,Color='black',DisplayName='Nearest points') legend(Location="bestoutside")
Cree un entorno 3D con obstáculos utilizando objetos de geometría de colisión como collisionBox
.
center = [0 0 0]; sph1 = collisionSphere(.1); loc1 = [0 0 0] + center; sph1.Pose = se3([0 0 0],"eul","XYZ",loc1); mesh1 = collisionMesh(rand(10,3)); loc2 = [1 0 0] + center; mesh1.Pose = se3([pi/4 0 0],"eul","XYZ",loc2); box1 = collisionBox(.5,.5,.5); loc3 = [0 0 1] + center; box1.Pose = se3([0 0 0],"eul","XYZ",loc3); cylinder1 = collisionCylinder(.2,.5); loc4 = [0 0 -1] + center; cylinder1.Pose = se3([0 pi/4 0],"eul","XYZ",loc4); capsule1 = collisionCapsule(.2,.5); loc5 = [0 1.5 0] + center; capsule1.Pose = se3([0 0 pi/2],"eul","XYZ",loc5); simpleGeom = {sph1,mesh1,box1,cylinder1,capsule1};
Grafique el entorno en 3D.
figure light; grid on; axis("equal"); view(45,45); hold on; for i=1:length(simpleGeom) show(simpleGeom{i}); end
Convierte los objetos de geometría de colisión en una estructura de malla geométrica.
meshArray = geom2struct(simpleGeom);
Calcule el mapa del campo de distancia con signo truncado (TSDF) para obtener una representación basada en vóxeles del entorno 3D.
meshTSDFObj = meshtsdf(meshArray,FillInterior=true,Resolution=20)
meshTSDFObj = meshtsdf with properties: MeshID: [5×1 double] NumMesh: 5 MapLimits: [2×3 double] NumActiveVoxel: 14997 Resolution: 20 TruncationDistance: 0.1500 FillInterior: 1
Codifique el mapa TSDF utilizando el enfoque del conjunto de puntos base.
arrangement = "uniform-ball-3d";
encodingSize = 100;
bpsObj= bpsEncoder(arrangement,encodingSize,Center=[0 0 0],Radius=2);
basisPoints = bpsObj.Points;
[encoding, nearestPts] = encode(bpsObj,meshTSDFObj);
Muestra los puntos base y los puntos de objeto más cercanos que representan los obstáculos en el entorno.
plot3(basisPoints(:,1),basisPoints(:,2),basisPoints(:,3),plannerLineSpec.state{:}); nearestSpec = plannerLineSpec.state(Color='#A2142F',MarkerFaceColor='#A2142F',MarkerEdgeColor='#A2142F'); plot3(nearestPts(:,1),nearestPts(:,2),nearestPts(:,3),nearestSpec{:}); quiver3(basisPoints(:,1),basisPoints(:,2),basisPoints(:,3),... nearestPts(:,1)-basisPoints(:,1),nearestPts(:,2)-basisPoints(:,2),nearestPts(:,3)-basisPoints(:,3),0,Color='black'); legend('','','','','','Basis points','Nearest object points',Location="southoutside")
Crea un entorno aleatorio con obstáculos esféricos.
Especifique el número de obstáculos esféricos a agregar como 10. Establezca el rango para calcular aleatoriamente los valores de radio y posición de las esferas.
numSpheres = 10; radRange = [.2 1]; posRange = [0 5]; collisionSpheres = cell(1,numSpheres); spheres = zeros(4,numSpheres); for i=1:numSpheres % Compute radius randomRad = (radRange(2)-radRange(1))*rand(1) + radRange(1); % Compute position randomPos = arrayfun(@(~)(posRange(2)-posRange(1))*rand(1) + posRange(1),1:3); % Create random sphere sph = collisionSphere(randomRad); % Convert coordinates to homogeneous transformation matrix sph.Pose = trvec2tform(randomPos); % Obtain and store its 3D vertices collisionSpheres{i} = sph; % Store its radius and position values spheres(:,i) = [randomRad;randomPos']; end
Muestra el entorno que contiene obstáculos esféricos utilizando una función auxiliar.
figure hold on; helperDisplay(collisionSpheres); xlabel("x") ylabel("y") zlabel("z") hold off
Cree un objeto codificador de conjunto de puntos base para una disposición "uniform-ball-3d"
especificando el tamaño de codificación, el radio y el centro.
bpsObj = bpsEncoder("uniform-ball-3d",200,Radius=5,Center=[2.5 2.5 2.5]);
Codificar el entorno.
[encoding,nearestPoint] = encode(bpsObj,spheres);
Mostrar resultados.
figure hold on; helperDisplay(collisionSpheres); basis = bpsObj.Points; plot3(basis(:,1), basis(:,2),basis(:,3), plannerLineSpec.state{:}, DisplayName='Basis Points') nearestSpec = plannerLineSpec.state(Color='#A2142F', MarkerFaceColor='#A2142F', MarkerEdgeColor='#A2142F'); plot3(nearestPoint(:,1), nearestPoint(:,2), nearestPoint(:,3), nearestSpec{:}, DisplayName="nearest obstacles"); quiver3(basis(:,1), basis(:,2),basis(:,3), nearestPoint(:,1)-basis(:,1), ... nearestPoint(:,2)-basis(:,2), nearestPoint(:,3)-basis(:,3),0, Color='black') xlabel("x") ylabel("y") zlabel("z") hold off
Función auxiliar para visualizar el entorno
function helperDisplay(collisionSpheres) light; grid on; axis("equal"); view(45,45); hold on; numSpheres = width(collisionSpheres); for i=1:numSpheres % Show mesh show(collisionSpheres{i}) end end
Argumentos de entrada
Codificador de conjunto de puntos base, especificado como un objeto bpsEncoder
.
Entorno de entrada a codificar, especificado como un objeto occupancyMap
, binaryOccupancyMap
, meshtsdf
o una matriz de 4 por M que representa obstáculos esféricos en un entorno 3D. Cada columna de la matriz tiene la forma [r; x; y; z]. r es el radio de la esfera y [x y z] denota el centro de la esfera. M es el número de obstáculos esféricos en el entorno de entrada.
Argumentos de salida
Distancia desde cada punto base hasta su punto de objeto más cercano, devuelta como un vector N por 1.
N es el número de puntos base. Este valor está determinado por la propiedad EncodingSize
del objeto codificador BPS. Los valores de distancia proporcionan una representación compacta del entorno del mapa de entrada para la planificación del movimiento con enfoques de aprendizaje profundo, como las redes de planificación del movimiento (MPNet) y la optimización hamiltoniana covariante basada en aprendizaje profundo para la planificación del movimiento (CHOMP).
Para obtener información sobre MPNet, consulte Comience con las redes de planificación de movimiento. Para obtener información sobre CHOMP basado en aprendizaje profundo, consulte dlCHOMP
(Robotics System Toolbox).
Tipos de datos: double
Puntos de objeto más cercanos a cada punto base, devueltos como un vector N por 1. Los puntos de objeto más cercanos son los puntos en las áreas ocupadas (obstáculos) en el entorno de entrada.
Tipos de datos: double
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Historial de versiones
Introducido en R2024a
Consulte también
bpsEncoder
| mpnetSE2
| mpnetPrepareData
| dlCHOMP
(Robotics System Toolbox)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)