Добавьте тела ego в список капсул
addEgo( добавляет одно или несколько тел ego в 2-D список динамических капсул с заданными значениями ID, состояния и геометрии, заданными в capsuleListObj,egoStruct)egoStruct.
дополнительно возвращает индикатор добавления, обновления или повторения каждого заданного тела ego.status = addEgo(capsuleListObj,egoStruct)
Создайте путь к эго-телу и сохраните состояния препятствий, используя dynamicCapsuleList объект. Визуализируйте состояния всех объектов в окружении в различных временных метках. Проверьте путь тела ego путем проверки на столкновения с препятствиями в окружении.
Создайте dynamicCapsuleList объект. Извлеките максимальное количество шагов для использования в качестве количества меток времени для путей к объекту.
obsList = dynamicCapsuleList; numSteps = obsList.MaxNumSteps;
Добавить тело Ego
Задайте тело ego путем определения идентификатора, геометрии и состояния вместе в структуре. Геометрия капсулы имеет длину 3 м и радиус 1 м. Задайте состояние как линейный путь от x = 0m до 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])

Добавление препятствий
Задайте состояния для двух препятствий, которые отделены от тела эго на 5 м в противоположных направлениях по оси Y. Предположим, что препятствия имеют одинаковую геометрию geom как тело эго.
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])

Обновляйте препятствия
Изменяйте местоположения препятствий и размерности с течением времени. Используйте ранее сгенерированную структуру, изменяйте поля и обновляйте препятствия с помощью updateObstacleGeometry и updateObstaclePose функции объекта. Уменьшает радиус первого препятствия до 0,5 м, и изменяет путь, чтобы переместить его в сторону тела эго.
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);
Проверка на наличие коллизий
Визуализируйте новые пути. Показать, где столкновения между эго-телом и препятствием, которые отображение подсвечивает красным цветом. Заметьте, что столкновения между препятствиями не проверяются.
show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1); ylim([-20 20]) xlabel("X (m)") ylabel("Y (m)")

Программно проверяйте на столкновения при помощи checkCollision функция объекта. Функция возвращает вектор логических значений, который указывает состояние каждого временного шага. Вектор транспонируется в целях отображения.
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
Чтобы проверить пути с большим количеством шагов, используйте any функция на векторе значений столкновения.
if any(collisions) disp("Collision detected.") end
Collision detected.
Обновление пути Ego
Задайте новый путь для тела ego. Снова визуализируйте пути, отображая столкновения.
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])

capsuleListObj - Список динамических капсулdynamicCapsuleList объектСписок динамических капсул, заданный как dynamicCapsuleList объект.
egoStruct - Параметры тела EgoПараметры тела Ego, заданные как структура N-element или массив структур, где N количество добавленных тел Ego. Поля каждой структуры определяют идентификатор, геометрию и состояния тела ego:
ID -- Целое число, которое идентифицирует каждый объект. Хранится в EgoIDs свойство dynamicCapsuleList объект, заданный как capsuleListObj аргумент.
States -- Расположение и ориентация объекта как матрицы M-на-3, где каждая строка имеет форму [x y theta], и M количество состояний для заданного тела ego в мировой системе координат. Список состояний предполагает, что каждое состояние разделено фиксированным временным интервалом. xy -положения указаны в метрах и theta находится в радианах.
Geometry -- Структура с полями Length, Radius, и FixedTransform. Эти поля определяют размер объекта на основе капсул, используя указанную длину для радиуса цилиндра и полукруга для торцевых прописных букв. Чтобы сместить геометрию капсулы с источника по умолчанию, задайте FixedTransform поле как фиксированное преобразование относительно локальной системы координат капсулы. Чтобы сохранить источник капсулы по умолчанию, задайте преобразование следующим eye(3).

status - Результат добавления эго телРезультат добавления эго-тел, возвращенный как N-элементный вектор-столбец таковых, нулей и отрицательных. N - количество эго-тел, заданное в egoStruct аргумент. Каждое значение указывает, добавлено ли связанное тело (1), обновлено (0), или дубликат (-1). При добавлении ego-тел, если в массиве структур найдено несколько структур с одним и тем же идентификатором тела egoStruct, затем функция помечает предыдущую запись как повторяющуюся и игнорирует ее.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.