Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

show

Mostrar cuerpos del ego y obstáculos en el entorno.

Desde R2020b

Descripción

ejemplo

ax = show(capsuleListObj) muestra el estado inicial de todos los cuerpos del ego y los obstáculos en la lista de cápsulas especificada y devuelve el identificador de ejes de la gráfica.

ax = show(capsuleListObj,Name,Value) especifica opciones usando name-value pair arguments. Por ejemplo, 'FastUpdate',true permite actualizaciones rápidas de un gráfico existente.

Ejemplos

contraer todo

Construya una ruta del cuerpo del ego y mantenga estados de obstáculos utilizando el objeto dynamicCapsuleList . Visualice los estados de todos los objetos del entorno en diferentes marcas de tiempo. Valide la ruta del cuerpo del ego comprobando colisiones con obstáculos en el entorno.

Cree el objeto dynamicCapsuleList . Extraiga la cantidad máxima de pasos para usar como cantidad de marcas de tiempo para las rutas de sus objetos.

obsList = dynamicCapsuleList;
numSteps = obsList.MaxNumSteps;

Añadir cuerpo del ego

Defina un cuerpo del ego especificando la identificación, la geometría y el estado juntos en una estructura. La geometría de la cápsula tiene una longitud de 3 my un radio de 1 m. Especifique el estado como una ruta lineal desde x = 0 ma x = 100 m.

egoID1 = 1;
geom = struct("Length",3,"Radius",1,"FixedTransform",eye(3));
states = linspace(0,1,obsList.MaxNumSteps)'.*[100 0 0];

egoCapsule1 = struct('ID',egoID1,'States',states,'Geometry',geom);
addEgo(obsList,egoCapsule1);

show(obsList,"TimeStep",[1:numSteps]);
ylim([-20 20])

Figure contains an axes object. The axes object contains an object of type patch.

Agregar obstáculos

Especifique estados para dos obstáculos que están separados del cuerpo del ego por 5 m en direcciones opuestas en el eje y. Supongamos que los obstáculos tienen la misma geometría geom que el cuerpo del ego.

obsState1 = states + [0 5 0];
obsState2 = states + [0 -5 0];

obsCapsule1 = struct('ID',1,'States',obsState1,'Geometry',geom);
obsCapsule2 = struct('ID',2,'States',obsState2,'Geometry',geom);

addObstacle(obsList,obsCapsule1);
addObstacle(obsList,obsCapsule2);

show(obsList,"TimeStep",[1:numSteps]);
ylim([-20 20])

Figure contains an axes object. The axes object contains 3 objects of type patch.

Actualizar obstáculos

Modifique las ubicaciones de los obstáculos y las dimensiones geométricas con el tiempo. Utilice la estructura generada previamente, modifique los campos y actualice los obstáculos usando las funciones de objeto updateObstacleGeometry y updateObstaclePose . Reduce el radio del primer obstáculo a 0,5 m y cambia la ruta para moverlo hacia el cuerpo del ego.

obsCapsule1.Geometry.Radius = 0.5;

obsCapsule1.States = ...
    [linspace(0,100,numSteps)' ... % x
     linspace(5,-4,numSteps)' ... % y 
     zeros(numSteps,1)]; % theta

updateObstacleGeometry(obsList,1,obsCapsule1);
updateObstaclePose(obsList,1,obsCapsule1);

Comprobar si existen colisiones

Visualiza los nuevos rutas. Muestra dónde ocurren las colisiones entre el cuerpo del ego y un obstáculo, que la pantalla resalta en rojo. Tenga en cuenta que las colisiones entre los obstáculos no se controlan.

show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1);
ylim([-20 20])
xlabel("X (m)")
ylabel("Y (m)")

Figure contains an axes object. The axes object with xlabel X (m), ylabel Y (m) contains 3 objects of type patch.

Verifique las colisiones mediante programación utilizando la función de objeto checkCollision . La función devuelve un vector de valores lógicos que indica el estado de cada paso de tiempo. El vector se transpone con fines de visualización.

collisions = checkCollision(obsList)'
collisions = 1x31 logical array

   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0

Para validar rutas con una gran cantidad de pasos, use la función any en el vector de valores de colisión.

if any(collisions)
    disp("Collision detected.")
end
Collision detected.

Actualizar ruta del ego

Especifica una ruta nueva para el cuerpo del ego. Visualice las rutas nuevamente, mostrando colisiones.

egoCapsule1.States = ...
    [linspace(0,100,numSteps)' ... % x
    3*sin(linspace(0,2*pi,numSteps))' ... % y
    zeros(numSteps,1)]; % theta

updateEgoPose(obsList,1,egoCapsule1);

show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1);
ylim([-20 20])

Figure contains an axes object. The axes object contains 3 objects of type patch.

Argumentos de entrada

contraer todo

Lista de cápsulas dinámicas, especificada como un objeto dynamicCapsuleList o dynamicCapsuleList3D .

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.

Antes de R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: 'FastUpdate',true habilita la opción de actualizaciones rápidas en un gráfico existente.

Ejes principales para trazar, especificados como el par separado por comas que consta de 'Parent' y un identificador Axes Properties .

Realice una actualización rápida de un gráfico existente, especificado como el par separado por comas que consta de 'FastUpdate' y un 0 lógico (false) o 1 (true). Debe utilizar la función de objeto show para mostrar inicialmente su lista de cápsulas antes de poder especificarla con este argumento.

Tipos de datos: logical

Pasos de tiempo para mostrar, especificados como el par separado por comas que consta de 'TimeStep' y un vector numérico de valores en el rango [1, N], donde N es el valor de la propiedad MaxNumSteps del objeto especificado en el argumento capsuleListObj . Cada paso de tiempo corresponde a una fila de la matriz de estados para cada cuerpo del ego y obstáculo.

Compruebe y resalte colisiones en la pantalla, especificadas como el par separado por comas que consta de 'ShowCollisions' y un 0 lógico (false) o 1 (true).

Tipos de datos: logical

ID de ego para mostrar, especificados como el par separado por comas que consta de 'EgoIDs' y un vector de enteros positivos. Por defecto, la función de objeto muestra todos los cuerpos del ego.

ID de obstáculos que se mostrarán, especificados como el par separado por comas que consta de 'ObstacleIDs' y un vector de enteros positivos. De forma predeterminada, la función muestra todos los obstáculos.

Argumentos de salida

contraer todo

Ejes principales del gráfico de la lista de cápsulas dinámicas, devueltos como un identificador Axes Properties.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2020b