Интерполируйте положения вдоль UAV сегмент пути Dubins
интерполирует положения вдоль сегмента пути в заданных длинах пути. Переходы между типами движения всегда включаются.poses
= interpolate(pathSegObj
,lengths
)
В этом примере показано, как соединить положения с помощью uavDubinsConnection
возразите и интерполируйте положения вдоль сегмента пути в заданных длинах пути.
Соедините положения Используя путь к связи UAV Dubins
Создайте uavDubinsConnection
объект.
connectionObj = uavDubinsConnection;
Задайте запускаются, и цель изображает из себя [x
Y
Z
, headingAngle
Векторы.
startPose = [0 0 0 0]; % [meters, meters, meters, radians]
goalPose = [0 0 20 pi];
Вычислите допустимый сегмент пути и соедините положения.
[pathSegObj,pathCost] = connect(connectionObj,startPose,goalPose);
Покажите сгенерированный путь.
show(pathSegObj{1})
Интерполируйте положения
Задайте интервал, чтобы интерполировать вдоль пути.
stepSize = pathSegObj{1}.Length/10; lengths = 0:stepSize:pathSegObj{1}.Length;
Интерполируйте положения вдоль сегмента пути в заданных длинах пути.
poses = interpolate(pathSegObj{1},lengths); % [x, y, z, headingAngle, flightPathAngle, rollAngle]
Визуализируйте положения перехода
Вычислите матрицу перевода и вращения положений перехода, исключая запуск и целевые положения. posesTranslation
матрица состоит из первых трех столбцов poses
матрица, задающая положение x
Y
, и z
.
posesTranslation = poses(2:end-1,1:3); % [x, y, z]
Постепенно увеличьте элементы четвертого столбца poses
матрица, представляющая headingAngle
pi
и присвойте его как первый столбец матрицы вращения posesEulRot
в представлении Угла Эйлера ZYX. Столбец pi
и столбец нулей формирует второе и третьи столбцы posesEulRot
матрица, соответственно. Преобразуйте posesEulRot
матрица от Углов Эйлера до кватерниона и присвоения к posesRotation
.
N = size(poses,1)-2; posesEulRot = [poses(2:end-1,4)+pi,ones(N,1)*pi,zeros(N,1)]; % [headingAngle + pi, pi, 0] posesRotation = quaternion(eul2quat(posesEulRot,'ZYX'));
Постройте преобразовывают систему координат положений перехода путем определения их переводов и вращений с помощью plotTransforms
.
hold on plotTransforms(posesTranslation,posesRotation,'MeshFilePath','fixedwing.stl','MeshColor','cyan')
pathSegObj
— Сегмент путиuavDubinsPathSegment
объектСегмент пути в виде uavDubinsPathSegment
объект.
lengths
— Длины вдоль пути, чтобы интерполировать положенияДлины вдоль пути, чтобы интерполировать положения в виде положительного числового вектора в метрах.
Например, задайте 0:stepSize:pathSegObj{1}.Length
интерполировать в интервале, заданном stepSize вдоль пути. Переходы между типами движения всегда включаются.
Типы данных: double
poses
— Интерполированные положенияИнтерполированные положения вдоль сегмента пути, возвращенного как числовая матрица с шестью элементами [x, y, z, headingAngle, flightPathAngle, rollAngle]. Каждая строка матрицы соответствует другому интерполированному положению вдоль пути.
x, y и z задают положение в метрах. headingAngle, flightPathAngle и rollAngle задают ориентацию в радианах.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.