checkCollision
Compruebe si hay colisiones entre los cuerpos del ego y los obstáculos.
Desde R2020b
Sintaxis
Descripción
revisa cada cuerpo del ego en busca de colisiones con obstáculos en el entorno. La función indica si cada cuerpo del ego está en colisión en cada paso de tiempo.collisionFound
= checkCollision(capsuleListObj
)
[
comprueba cada cuerpo del ego en busca de colisiones con obstáculos en el entorno y devuelve los resultados utilizando opciones adicionales de detección de colisiones especificadas fullResults
,distance
] = checkCollision(capsuleListObj
,options
)options
.
Ejemplos
Construya rutas del cuerpo del ego y compruebe si hay colisiones con obstáculos
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])
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])
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)")
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])
Argumentos de entrada
capsuleListObj
— Lista de cápsulas dinámicas
dynamicCapsuleList
objeto | dynamicCapsuleList3D
objeto
Lista de cápsulas dinámicas, especificada como un objeto dynamicCapsuleList
o dynamicCapsuleList3D
.
options
— Opciones de detección de colisiones
estructura
Opciones de detección de colisiones, especificadas como una estructura con estos campos:
FullResults
–– Devuelve los resultados de la colisión para cada obstáculo por separado, especificado como un0
lógico (false
) o1
(true
). Consulte el argumento de salidafullResults
.ReturnDistance
–– Devuelve el cálculo de distancia de la verificación de colisión, especificado como un0
lógico (false
) o1
(true
). Consulte el argumento de salidadistance
.
Tipos de datos: struct
Argumentos de salida
collisionFound
— Resultados de la comprobación de colisiones
n-por- e matriz de valores lógicos
Resultados de la comprobación de colisiones, devueltos como una matriz n-por- e de valores lógicos. De forma predeterminada, la función verifica cualquier colisión entre cualquier objeto, lo que devuelve una matriz n-por- e , donde n es el número máximo de estados para los cuerpos del ego en el objeto capsuleListobj
especificado, y e es el número de cuerpos del ego.
Tipos de datos: logical
fullResults
— Resultados completos de la comprobación de colisiones para cada obstáculo.
n-por- o-por- e arreglo de valores lógicos
Resultados completos de la verificación de colisiones para cada obstáculo, devueltos como un arreglo de valores lógicos n por o por e . n es el número máximo de estados para los cuerpos del ego en el argumento capsuleListobj
especificado, o es el número de obstáculos y e es el número de cuerpos del ego.
Dependencias
Para devolver el argumento de salida fullResults
, especifique el argumento de entrada options
con el campo FullResults
establecido en true
Tipos de datos: logical
distance
— Distancia de los obstáculos
n-por- e matriz numérica | n-por- o por- e arreglo numérica
Distancia de los obstáculos, devuelta como una matriz numérica n-por- e o n-por- o por- e arreglo numérico. Las dimensiones y el comportamiento del argumento distancia dependen del valor del campo FullResults
del argumento opciones
distance Dimensiones | FullResults Valor | Comportamiento |
n-por- e matriz numérica | false | Devuelve la distancia entre cada cuerpo del ego y el obstáculo más cercano en cada paso de tiempo. n es el número máximo de estados para los cuerpos del ego especificados en el argumento capsuleListObj , y e es el número de cuerpos del ego. |
n-por- o por- e arreglo numérica | true | Devuelve la distancia entre cada cuerpo del ego y cada obstáculo en cada paso de tiempo. o es el número de obstáculos. |
Dependencias
Para devolver el argumento de salida distance
, especifique el argumento de entrada options
con el campo ReturnDistance
establecido en true
Tipos de datos: single
| double
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Historial de versiones
Introducido en R2020b
Consulte también
Objetos
Funciones
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)