Main Content

bsplinepolytraj

B-스플라인을 사용하여 다항식 궤적 생성

설명

예제

[q,qd,qdd,pp] = bsplinepolytraj(controlPoints,tInterval,tSamples)controlPoints에 의해 정의된 제어 다각형 안에 조각별 3차 B-스플라인 궤적을 생성합니다. 궤적은 tInterval에 지정된 시작 시간과 종료 시간 사이에서 균일하게 샘플링됩니다. 이 함수는 입력 시간 샘플 tSamples에서의 위치, 속도, 가속도를 반환합니다. 또한 시간에 대한 다항식 궤적의 조각별 다항식 pp 형식을 반환합니다.

예제

모두 축소

주어진 일련의 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

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 2 objects of type line.

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

Figure contains an axes object. The axes object with xlabel t, ylabel Position Value contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent X-positions, Y-positions.

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

끝점을 재정의하고 r0rL을 선택합니다.

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');

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Original waypoints, Computed control polygon, B-spline.

[1] Farin, Section 9.1

입력 인수

모두 축소

B-스플라인 궤적의 제어 다각형에 대한 점으로, n×p 행렬로 지정됩니다. 여기서 n은 궤적의 차원이고 p는 제어점의 개수입니다.

예: [1 4 4 3 -2 0; 0 1 2 4 3 1]

데이터형: single | double

궤적의 시작 시간과 종료 시간으로, 요소를 2개 가진 벡터로 지정됩니다.

예: [0 10]

데이터형: single | double

궤적에 대한 시간 샘플로, 벡터로 지정됩니다. 출력 위치 q, 속도 qd, 가속도 qdd는 이러한 시간 간격으로 샘플링됩니다.

예: 0:0.01:10

데이터형: single | double

출력 인수

모두 축소

tSamples에 주어진 시간 샘플에서의 궤적의 위치로, 벡터로 반환됩니다.

데이터형: single | double

tSamples에 지정된 시간 샘플에서의 궤적의 속도로, 벡터로 반환됩니다.

데이터형: single | double

tSamples에 지정된 시간 샘플에서의 궤적의 가속도로, 벡터로 반환됩니다.

데이터형: single | double

조각별 다항식으로, 조각별 궤적의 각 섹션에 대한 다항식을 정의한 구조체로 반환됩니다. 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에 개발됨