addEgo
Description
addEgo(
adds one or more ego bodies to the 2-D dynamic capsule list with the specified ID, state,
and geometry values given in capsuleListObj
,egoStruct
)egoStruct
.
additionally returns an indicator of whether each specified ego body was added, updated, or
a duplicate.status
= addEgo(capsuleListObj
,egoStruct
)
Examples
Build Ego Body Paths and Check for Collisions with Obstacles
Build an ego body path and maintain obstacle states using the dynamicCapsuleList
object. Visualize the states of all objects in the environment at different timestamps. Validate the path of the ego body by checking for collisions with obstacles in the environment.
Create the dynamicCapsuleList
object. Extract the maximum number of steps to use as the number of time stamps for your object paths.
obsList = dynamicCapsuleList; numSteps = obsList.MaxNumSteps;
Add Ego Body
Define an ego body by specifying the ID, geometry, and state together in a structure. The capsule geometry has a length of 3 m and radius of 1 m. Specify the state as a linear path from x = 0m to x = 100m.
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])
Add Obstacles
Specify states for two obstacles that are separated from the ego body by 5 m in opposite directions on the y-axis.. Assume the obstacles have the same geometry geom
as the ego body.
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])
Update Obstacles
Alter your obstacle locations and geometry dimensions over time. Use the previously generated structure, modify the fields, and update the obstacles using the updateObstacleGeometry
and updateObstaclePose
object functions. Reduces the radius of the first obstacle to 0.5 m, and change the path to move it towards the ego body.
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);
Check for Collisions
Visualize the new paths. Show where collisions between the ego body and an obstacle, which the display highlights in red. Notice that collisions between the obstacles are not checked.
show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1); ylim([-20 20]) xlabel("X (m)") ylabel("Y (m)")
Programmatically check for collisions by using the checkCollision
object function. The function returns a vector of logical values that indicates the status of each time step. The vector is transposed for display purposes.
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
To validate paths with a large number of steps, use the any
function on the vector of collision values.
if any(collisions) disp("Collision detected.") end
Collision detected.
Update Ego Path
Specify a new path for the ego body. Visualize the paths again, displaying collisions.
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])
Input Arguments
capsuleListObj
— Dynamic capsule list
dynamicCapsuleList
object
Dynamic capsule list, specified as a dynamicCapsuleList
object.
egoStruct
— Ego body parameters
structure | N-element structure array
Ego body parameters, specified as an N-element structure or a structure array, where N is the number of added ego bodies. The fields of each structure define the ID, geometry, and states of an ego body:
ID
–– Integer that identifies each object. Stored in theEgoIDs
property of thedynamicCapsuleList
object specified by thecapsuleListObj
argument.States
–– Location and orientation of the object as an M-by-3 matrix, where each row is of form[x y theta]
, and M is the number of states for the specified ego body in the world frame. The list of states assumes each state is separated by a fixed time interval. xy-positions are in meters andtheta
is in radians.Geometry
–– Structure with fieldsLength
,Radius
, andFixedTransform
. These fields define the size of the capsule-based object using the specified length for the cylinder and semicircle radius for the end caps. To shift the capsule geometry from the default origin, specify theFixedTransform
field as a fixed transform relative to the local frame of the capsule. To keep the default capsule origin, specify the transform aseye(3)
.
Output Arguments
status
— Result of adding ego bodies
N-element column vector
Result of adding ego bodies, returned as a N-element column
vector of ones, zeros, and negative ones. N is the number of ego
bodies specified in the egoStruct
argument. Each value indicates
whether the associated body is added (1
), updated
(0
), or a duplicate (-1
). While adding ego
bodies, if multiple structures with the same body ID are found in the structure array
egoStruct
, then the function marks the previous entry as
duplicate and ignores it.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2020b
See Also
Objects
Functions
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 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)