Интерполируйте положения вдоль сегмента контура БПЛА Dubins
интерполирует положения вдоль сегмента контура с заданными длинами пути. Переходы между типами движения всегда включены.poses
= interpolate(pathSegObj
,lengths
)
В этом примере показано, как соединить положения с помощью uavDubinsConnection
и интерполируйте положения вдоль сегмента контура с заданными длинами пути.
Соедините положения с помощью БПЛА 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]
Визуализация переходных положений
Вычислите матрицу перемещений и вращений переходных положений, исключая начальное и целевое положения. The 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.