본문 바로가기
유도항법제어/비행제어

[PX4] 멀티콥터 자세제어 알고리즘 - 3

by 깊은대학 2023. 2. 24.

PX4의 위치 제어기에서 추력 벡터를 계산한 후, 별도로 주어지는 방위각(azimuth angle) 명령 ψcmd 와 합쳐서 멀티콥터가 취해야 할 자세(attitude)를 결정한다.

 

 

이 자세는 쿼터니언 qcmd 로 파라미터화 되는데 이를 좌표계로 표시하면 다음 그림과 같다.

 

 

여기서 Fcmd 는 위치 제어기에서 계산한 추력 벡터 명령, {i} 는 관성 좌표계, {b} 는 동체 좌표계, {d} 는 쿼터니언 qcmd 로 파라미터화된 좌표계이다.

qcmd 는 관성 좌표계에 대한 좌표계 {d} 의 자세를 의미하므로 qcmd=qdi 로 쓸 수 있다. 쿼터니언 오차 qeqcmd=qbiqe 로 정의했으므로 쿼터니언 오차는 qe=qdb 가 된다.

멀티콥터의 추력 방향은 동체 좌표계의 b^3 의 방향과 일치해야 하므로, 자세 제어기의 목적은 좌표계 {b} 가 좌표계 {d} 와 일치하도록 멀티콥터의 자세를 바꾸는 것이다.

 

 

별도로 주어지는 방위각 명령 ψcmd 를 일단 무시하고, 동체 좌표계의 b^3 축을 d^3 축과 일치시키기 위한 좌표 변환만 고려하면 다음과 같이 회전축 k^ 를 중심으로 α 만큼 좌표계 {b} 를 회전시키면 된다.

 

 

이렇게 해서 나온 좌표계를 {p} 라고 하면 좌표계 {b} 에서 좌표계 {p} 로의 쿼터니언 qpb 는 다음과 같다.

 

(1)qpb=[cos(α2)(k^b^1)sin(α2)(k^b^2)sin(α2)(k^b^3)sin(α2)]

 

여기서

 

(2)k^=b^3×d^3b^3×d^32,     α=cos1(b^3d^3)

 

이다. 식 (2)에 의하면 k^b^3 는 항상 직각이므로 식 (1)에서 k^b^3=0 이 된다. 따라서 식 (1)을 다시 쓰면 다음과 같다.

 

(3)qpb=[cos(α2)(k^b^1)sin(α2)(k^b^2)sin(α2)0]

 

관성 좌표계 {i} 에서 좌표계 {p} 까지의 쿼터니언 qpi 는 다음과 같다.

 

(4)qcmd,red=qpi=qbiqpb

 

쿼터니언 qcmd,red 를 축소된 목표 자세(reduced desired attitude) 또는 축소된 자세 명령이라고 하고 qe,red=qpb 를 축소된 쿼터니언 오차라고 한다.

 

 

원래 각속도 제어인 식 (5)에서

 

(5)ωibb=kcmd sgn(qe0)qe1:3

 

자세 명령 qcmd 대신에 qcmd,red 로, 쿼터니언 오차를 qe 대신에 qe,red 로 하면,

 

(6)(ωibb)red=kcmd sgn(qe,red0)qe,red1:3

 

각속도 제어 (6)은 멀티콥터의 자세 qbiqpi 로 변환시킬 것이다. 식 (3)과 (6)에 의하면 (ωibb)red 의 세번째 성분은 0 이 된다.

 

(7)(ωibb)red=[ωred,1ωred,20]

 

이는 곧 b^3 축 또는 멀티콥터의 추력 방향을 중심으로 하는 회전 각속도 명령이 0 이 된다는 의미이다.

멀티콥터에서는 b^3 축을 중심으로 하는 회전 운동은 b^1 축과 b^2 축을 중심으로 하는 회전 운동 보다 훨씬 느리다. 따라서 본래 각속도 제어 식 (5)에서 동일한 게인으로 제어할 경우 b^1 축과 b^2 축을 중심으로 하는 회전 운동이 매우 느리거나, 혹은 b^3 축 회전 운동에 오버슈트가 발생할 수 있어서 좋은 결과를 기대할 수 없다. 이런 점에서 식 (6)으로 주어지는 축소된 각속도 명령은 매력적이다.

사실 원하는 궤적(desired trajectory)을 따르기 위해서는 방위각을 제어할 필요가 없고 추력 명령만 따르면 되기 때문에 식 (6)의 각속도 제어만으로도 원하는 궤적을 추종할 수 있다. 하지만 방위각 명령 ψcmd 를 멀티콥터에 요구할 때는 그 이유가 있을 것이므로 이를 추종하는 것이 바람직하긴 하다. 이를 감안하여 기술보고서 'Nonlinear Quadcopter Attitude Control Technical Report, 2013' 에서는 식 (5)와 (6)을 혼합한 각속도 명령을 제안했다.

본래 원하는 자세인 쿼터니언 qcmd=qdi 로 파라미터화된 좌표계 {d} 와 축소된 자세인 qcmd,red=qpi 로 파라미터화된 좌표계 {p} 의 관계식은 다음과 같다.

 

(8)qdi=qpiqdp

 

또는

 

(9)qcmd=qcmd,redqmix

 

기술보고서에서는 qmix=qdp 로 표현했다. p^3=d^3 이기 때문에 qmix 는 다음과 같이 표현할 수 있다.

 

(10)qmix=[cos(αmix2)00sin(αmix2)]

 

여기서

 

αmix=cos1(p^3d^3)

 

이다.

 

 

기술보고서에서는 식 (9)와 (10)을 이용하여 다음과 같은 혼합형 자세 명령을 제안했다.

 

(11)qcmd=qcmd,red[cos(wyawαmix2)00sin(wyawαmix2)],   wyaw[0,1]

 

wyaw=0 이면 자세 명령은 축소 자세 명령, wyaw=1 이면 본래 자세 명령에 해당하므로 혼합형 자세 명령은 원래 자세 명령과 축소 자세 명령 사이에 있는 어떤 값이다. 식 (11)의 자세 명령은 멀티콥터 운동에 크게 중요하지 않는 방위각을 제어하는데 소요되는 제어력 낭비를 줄일 수 있다.

 

 

댓글