addEgo
Descripción
addEgo(
agrega uno o más cuerpos del ego a la lista de cápsulas dinámicas 2-D con los valores de ID, estado y geometría especificados dados en capsuleListObj
,egoStruct
)egoStruct
.
además devuelve un indicador de si cada cuerpo del ego especificado se agregó, actualizó o es un duplicado.status
= addEgo(capsuleListObj
,egoStruct
)
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
Lista de cápsulas dinámicas, especificada como un objeto dynamicCapsuleList
.
egoStruct
— Parámetros del cuerpo del ego
estructura | N arreglo de estructura de elementos
Parámetros del cuerpo del ego, especificados como una estructura de elemento N o un arreglo de estructura, donde N es el número de cuerpos del ego agregados. Los campos de cada estructura definen la identificación, la geometría y los estados de un cuerpo del ego:
ID
–– Entero que identifica cada objeto. Almacenado en la propiedadEgoIDs
del objetodynamicCapsuleList
especificado por el argumentocapsuleListObj
.States
–– Ubicación y orientación del objeto como una matriz M-por-3, donde cada fila tiene la forma[x y theta]
, y M es el número de estados para el cuerpo del ego especificado en el marco mundial. La lista de estados supone que cada estado está separado por un intervalo de tiempo fijo. xy-las posiciones están en metros ytheta
están en radianes.Geometry
–– Estructura con camposLength
,Radius
, yFixedTransform
. Estos campos definen el tamaño del objeto basado en cápsula utilizando la longitud especificada para el cilindro y el radio de semicírculo para las tapas de los extremos. Para cambiar la geometría de la cápsula desde el origen predeterminado, especifique el campoFixedTransform
como una transformación fija relativa al marco local de la cápsula. Para mantener el origen de cápsula predeterminado, especifique la transformación comoeye(3)
.
Argumentos de salida
status
— Resultado de agregar cuerpos del ego
N-elemento vector columna
Resultado de agregar cuerpos de ego, devuelto como un vector columna de elemento N de unos, ceros y unos negativos. N es el número de cuerpos del ego especificados en el argumento egoStruct
. Cada valor indica si el cuerpo asociado se agrega (1
), se actualiza (0
) o es un duplicado (-1
). Al agregar cuerpos de ego, si se encuentran varias estructuras con el mismo ID de cuerpo en el arreglo de estructura egoStruct
, entonces la función marca la entrada anterior como duplicada y la ignora.
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)