Отображение эго-тел и препятствий в окружающей среде
отображает исходное состояние всех эго-тел и препятствий в указанном списке капсул и возвращает маркер перемещения осей графика.ax = show(capsuleListObj)
задает параметры, использующие аргументы пары «имя-значение». Например, ax = show(capsuleListObj,Name,Value)'FastUpdate',true позволяет быстро обновлять существующий график.
Построить путь к эго-телу и поддерживать состояния препятствий с помощью dynamicCapsuleList объект. Визуализация состояний всех объектов среды в различных временных метках. Проверьте путь тела эго, проверив наличие столкновений с препятствиями в среде.
Создать dynamicCapsuleList объект. Извлеките максимальное количество шагов для использования в качестве временных отметок для путей объектов.
obsList = dynamicCapsuleList; numSteps = obsList.MaxNumSteps;
Добавить Ego Body
Определите эго-тело, указав идентификатор, геометрию и состояние вместе в структуре. Геометрия капсулы имеет длину 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
Укажите новый путь для тела эго. Снова визуализируйте контуры, отображая конфликты.
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 объект | dynamicCapsuleList3D объектДинамический список капсул, указанный как dynamicCapsuleList или dynamicCapsuleList3D объект.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'FastUpdate',true включает опцию быстрого обновления на существующем графике.'Parent' - Родительские оси для печатиgca (по умолчанию) | Axes ручкаРодительские оси для печати, указанные как разделенная запятыми пара, состоящая из 'Parent' и дескриптор «Свойства осей».
'FastUpdate' - Быстрое обновление существующего графикаfalse или 0 (по умолчанию) | true или 1Быстрое обновление существующего графика, заданного как разделенная запятыми пара, состоящая из: 'FastUpdate' и логический 0 (false) или 1 (true). Необходимо использовать show объектная функция для первоначального отображения списка капсул, прежде чем можно будет указать его с помощью этого аргумента.
Типы данных: logical
'TimeStep' - Временные шаги для отображения1 (по умолчанию) | числовой вектор Временные шаги для отображения, указанные как пара, разделенная запятыми, состоящая из 'TimeStep' и числовой вектор значений в диапазоне [1, N], где N - значение MaxNumSteps свойства объекта, указанного в capsuleListObj аргумент. Каждый шаг времени соответствует строке матрицы состояния для каждого тела эго и препятствия.
'ShowCollisions' - Проверка и выделение конфликтов на экранеfalse или 0 (по умолчанию) | true или 1Проверьте наличие и выделите коллизии на дисплее, указанном как разделенная запятыми пара, состоящая из 'ShowCollisions' и логический 0 (false) или 1 (true).
Типы данных: logical
'EgoIDs' - Ego ID для отображенияОтображаемые Ego ID, указанные как пара, разделенная запятыми, состоящая из 'EgoIDs' и вектор положительных целых чисел. По умолчанию функция объекта отображает все эго-тела.
'ObstacleIDs' - Отображаемые идентификаторы препятствийОтображаемые идентификаторы препятствий, указанные как пара, разделенная запятыми, состоящая из 'ObstacleIDs' и вектор положительных целых чисел. По умолчанию функция отображает все препятствия.
ax - Родительские оси графика списка динамических капсулAxes ручкаРодительские оси графика списка динамических капсул, возвращенные как дескриптор anAxes Properties.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.