bsplinepolytraj
설명
예제
2차원 평면 모션을 위한 B-스플라인 궤적 계산하기
주어진 일련의 2차원 xy 제어점과 함께 bsplinepolytraj
함수를 사용합니다. B-스플라인은 이러한 제어점을 사용하여 다각형 내부에 궤적을 만듭니다. 궤적에 대한 시작 시간과 종료 시간도 주어집니다.
cpts = [1 4 4 3 -2 0; 0 1 2 4 3 1]; tpts = [0 5];
B-스플라인 궤적을 계산합니다. 이 함수는 제어점을 사용하여 웨이포인트를 구현하는 다항식의 궤적 위치(q
), 속도(qd
), 가속도(qdd
), 시간 벡터(tvec
), 다항식 계수(pp
)를 출력합니다.
tvec = 0:0.01:5; [q, qd, qdd, pp] = bsplinepolytraj(cpts,tpts,tvec);
결과를 플로팅합니다. 제어점을 표시하고 제어점 내부에 결과 궤적을 표시합니다.
figure plot(cpts(1,:),cpts(2,:),'xb-') hold all plot(q(1,:), q(2,:)) xlabel('X') ylabel('Y') hold off
B-스플라인 궤적의 각 요소 위치를 플로팅합니다. 이 궤적은 시간으로 파라미터화된 3차 조각별 다항식입니다.
figure plot(tvec,q) hold all plot([0:length(cpts)-1],cpts,'x') xlabel('t') ylabel('Position Value') legend('X-positions','Y-positions') hold off
B-스플라인으로 보간하기
B-스플라인으로 보간할 웨이포인트를 생성합니다.
wpts1 = [0 1 2.1 8 4 3]; wpts2 = [0 1 1.3 .8 .3 .3]; wpts = [wpts1; wpts2]; L = length(wpts) - 1;
제어 다각형의 내점을 계산하는 데 사용되는 행렬을 생성합니다.
r = zeros(L+1, size(wpts,1)); A = eye(L+1); for i= 1:(L-1) A(i+1,(i):(i+2)) = [1 4 1]; r(i+1,:) = 6*wpts(:,i+1)'; end
끝점을 재정의하고 r0
과 rL
을 선택합니다.
A(2,1:3) = [3/2 7/2 1]; A(L,(L-1):(L+1)) = [1 7/2 3/2]; r(1,:) = (wpts(:,1) + (wpts(:,2) - wpts(:,1))/2)'; r(end,:) = (wpts(:,end-1) + (wpts(:,end) - wpts(:,end-1))/2)'; dInterior = (A\r)';
완전한 제어 다각형을 생성하고 bsplinepolytraj
를 새 제어점과 함께 사용하여 다항식을 계산합니다.
cpts = [wpts(:,1) dInterior wpts(:,end)]; t = 0:0.01:1; q = bsplinepolytraj(cpts, [0 1], t);
결과를 플로팅합니다. 원래 웨이포인트, 계산된 다각형, 보간된 B-스플라인을 표시합니다.
figure; hold all plot(wpts1, wpts2, 'o'); plot(cpts(1,:), cpts(2,:), 'x-'); plot(q(1,:), q(2,:)); legend('Original waypoints', 'Computed control polygon', 'B-spline');
[1] Farin, Section 9.1
입력 인수
controlPoints
— 제어 다각형에 대한 점
n×p 행렬
B-스플라인 궤적의 제어 다각형에 대한 점으로, n×p 행렬로 지정됩니다. 여기서 n은 궤적의 차원이고 p는 제어점의 개수입니다.
예: [1 4 4 3 -2 0; 0 1 2 4 3 1]
데이터형: single
| double
tInterval
— 궤적의 시작 시간과 종료 시간
요소를 2개 가진 벡터
궤적의 시작 시간과 종료 시간으로, 요소를 2개 가진 벡터로 지정됩니다.
예: [0 10]
데이터형: single
| double
출력 인수
q
— 궤적의 위치
벡터
tSamples
에 주어진 시간 샘플에서의 궤적의 위치로, 벡터로 반환됩니다.
데이터형: single
| double
qd
— 궤적의 속도
벡터
tSamples
에 지정된 시간 샘플에서의 궤적의 속도로, 벡터로 반환됩니다.
데이터형: single
| double
qdd
— 궤적의 가속도
벡터
tSamples
에 지정된 시간 샘플에서의 궤적의 가속도로, 벡터로 반환됩니다.
데이터형: single
| double
pp
— 조각별 다항식
구조체
조각별 다항식으로, 조각별 궤적의 각 섹션에 대한 다항식을 정의한 구조체로 반환됩니다. mkpp
를 사용하여 직접 조각별 다항식을 만들거나 ppval
을 사용하여 지정된 시간에서의 다항식을 계산할 수 있습니다. 구조체에는 다음 필드가 있습니다.
form
:'pp'
.breaks
: 조각별 궤적의 형식이 변경되는 시점으로 구성된, 요소를 p개 가진 벡터입니다. p는 웨이포인트 개수입니다.coefs
: 다항식의 계수에 대한 n(p-1)×order
행렬입니다. n(p-1)은 궤적의 차원에pieces
의 개수를 곱한 값입니다. 각각의 n 행 세트는 각 변수 궤적을 설명하는 다항식의 계수를 정의합니다.pieces
: p–1. 절점의 개수에서 1을 뺀 값입니다.order
: 다항식의 차수(degree)에 1을 더한 값입니다. 예를 들어 3차 다항식의 위수(order)는 4입니다.dim
: n. 제어점 위치의 차원입니다.
참고 문헌
[1] Farin, Gerald E. Curves and Surfaces for Computer Aided Geometric Design: A Practical Guide. San Diego, CA: Academic Press, 1993.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
버전 내역
R2019a에 개발됨
참고 항목
contopptraj
| cubicpolytraj
| quinticpolytraj
| rottraj
| transformtraj
| trapveltraj
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 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)