Chap.2에서는 로봇에 대한 기초를 배운다.
Representing Position and Orientation
위치와 회전에 관해서 설명한다.
로봇과 컴퓨터 비전 분야에서 위치와 회전에 대해 설명하기 위해 Coordinate vector(= bound vector)를 이용한다.
{A}와 {B}는 서로 다른 좌표계의 원점을 나타낸다. 위 예에서는 로봇팔과 큐브에 대해서 각각 좌표계가 1개씩 존재한다.
ξ(크시)는 각각의 좌표계의 원점 간의 거리를 나타내는 Symbol이다.
$$ {}^{A}\textrm{ξ}_{B} $$ 는 A 좌표계 원점에서 B 좌표계 원점 사이의 거리를 나타낸다. 따라서
$$ {}^{A}\textrm{ξ}_{B} $$를 줄이면 로봇팔이 큐브에 서서히 다가가게 된다.
위 식은 다음과 같은 식으로 변형된다. $$ {}^{A}\textrm{P} = {}^{A}\textrm{ξ}_{B} * {}^{B}\textrm{P} $$
여기서 $$ {}^{A}\textrm{P} $$는 좌표계 A의 원점 기준 Position 벡터를 말하며 현재 로봇팔이 향하고 있는 방향을 나타낸다.
좌표계가 추가되면 합성식을 이용하여 간단하게 로봇팔로부터 해당 위치까지의 거리와 로봇팔이 향하고 있는 방향 벡터를 구할 수 있다.
3차원의 간단한 relative pose에 대한 예이다.
우리는 여태까지 위치를 로봇에 대하여 상대적으로 나타냈는데 원래는 기준이 되는 World 좌표계({O})가 있음을 알아두자. 천장에 고정된 카메라 좌표계 {F}가 있을 수도 있다.
{R}은 로봇팔, {C}는 로봇손, {B}는 물체이다.
$$ {}^{R}\textrm{ξ}_{C}, {}^{C}\textrm{ξ}_{B}, {}^{}\textrm{ξ}_{P} $$
는 카메라와 기본 로봇의 제원으로 알아낼 수 있는 값이므로 여기서 우리가 조정해야 하는 것은
$$ {}^{}\textrm{ξ}_{R} $$
뿐이다.
위와 같은 합성 과정을 통하여 {O}에서 {R}까지 변수를 구하여 조정할 수 있다.
Representing Pose in 2-Dimensions
x_hat과 y_hat은 각각 x축으로의 단위벡터, y축으로의 단위벡터이다.
굵은 글씨는 벡터, 얇은 것은 스칼라이다.
{A}와 {B}는 전과 동일하게 로봇팔과 로봇손의 관계라고 생각하자.
이제부터는 로봇 손목에 관절이 있기 때문에 {B}좌표계가 회전할 수 있음에 유의하자.
따라서 이를 표현하기 위해 2가지 속성을 고려한다.
- Rotation: 좌표계의 회전을 나타낸다. $$ theta $$
- Translation: 좌표계의 위치 차이를 나타낸다. $$ \mathbf{t} $$
{V}는 좌표계 {B}에 대해서 새롭게 형성된 좌표이다. 좌표계 {A}와 같은 각도를 가지고 있다.
Frame V에 대해 P의 x축으로의 값과 x축으로의 단위벡터 + P의 y축으로의 값과 y축으로의 단위벡터를 더하면 다음의 P벡터가 되고 이는 빨간색 박스의 행렬 곱으로 나타낼 수 있다.
$$ {}^{V}\textrm{P} $$
이는 Frame V에서 점 P를 향한 벡터이다.
{V}의 단위벡터들을 이용하면 {B} 좌표계의 벡터 성분을 표현할 수 있다.
그리고 P의 {B}좌표계로의 x성분, y성분을 이용하여 {B}좌표계에서 P로의 벡터를 정의할 수 있다.
$$ {}^{B}\textrm{P} = {}^{V}\textrm{P} $$
이기 때문에 이를 풀면 P의 {B}좌표계로의 x성분, y성분 값의 matrix를 구할 수 있다.
cos과 sin으로 이루어진 matrix는 회전 matrix $$ {}^{V}\textrm{R}_{B} $$로 나타냈으며, 이는 좌표계 V를 기준으로 좌표계 B가 얼마나 회전해있는지를 나타낸다. 다행히도 회전 행렬의 역행렬은 전치(Transpose)와 같게 결과가 나와서 아래와 같은 식으로 정리된다.
우리는 t = (x, y)를 {B}의 위치 즉, 로봇손의 위치로 두었다. 이는 고정값으로 팔의 길이는 늘어나지 않는다고 가정한다.
여기서 만약 로봇팔이 움직여서 다른 곳으로 손이 위치하게 된다 하더라도 위에서 {V} 좌표계에 대한 P의 성분값을 구하였기 때문에 단순히 둘을 더하는 것으로 다음에 위치할 위치를 특정할 수 있다.
x, y 벡터에 1이 추가된 것은 행렬을 깔끔하게 정방행렬로 나타내기 위해서 넣은 것이다.
지금 배우는 로봇학에서는 상관없지만 나중에 컴퓨터 비전에서는 다른 값으로 써서 의미가 있다고 한다.
결론적으로 우리는 저 Homogeneous Transformation 행렬과 각 좌표계에서의 P로의 벡터를 이용하여 로봇팔의 움직임을 표현할 수 있다.
어떤 각도로 어떤 위치로 움직이면 P에 도달하는지를 하나의 식으로 표현할 수 있게 되었다.
이후 매트랩 실습이 있지만 라이선스가 없기 때문에 따로 진행하지 않았다.
이후 학기가 시작되면 라이선스를 받을 수 있어서 그때 진행하도록 하겠다.
Representing Orientation in 3-Dimensions
좌표계가 3개일 때도 컨셉은 동일하다. 2-Dimensions에서 z축이 추가되었다.
각 좌표축으로의 회전을 나타낸다. 회전시 양의 방향은 오른손 검지로 축을 가리키고 남은 손가락이 감싸는 방향이다.
같은 크기/방향으로 회전해도 순서가 다르면 최종 좌표계가 달라짐을 유의하자.
Orthonormal Rotation Matrix
$$ {}^{A}\textrm{R}_{B} $$
는 회전행렬로 3x3 직교단위 행렬(Orthonormal Matrix)이다.
각 좌표계에 대한 object의 x, y, z 성분은 간단히 Rotation Matrix를 곱함으로써 변환할 수 있다.
또한 직교단위 벡터이기 때문에 역행렬과 전치행렬이 같다.
각 축으로의 회전 성분을 가지고 있다. x축(y축, z축)으로 세타만큼 회전하는 matrix이다.
차례대로 1행 1열, 2행 2열, 3행 3열의 형태를 바꿈을 알아두자.
Three-Angle Representation
3개의 각도의 표현법에 대해서 배운다.
오일러 회전 이론은 어느 좌표계든 3번의 회전이면 똑같이 나타낼 수 있음을 말한다.
Eulerian type은 처음과 마지막 회전은 같고, 중간 회전만 다른 경우이고,
Cardanian type은 모든 회전이 다른 경우이다.
그리고 특별히 ZYZ sequence와 XYZ sequence는 각도의 이름을 따로 부여한다. 갈색 부분을 확인하자.
- ZYZ Sequence
ZYZ는 오일러 각도로 표현되며 저 갈고리 형태는 감마(Gamma)라고 읽는다.
ZYZ type에서 유의할 점은 Rotation에서 가운데 회전 행렬이 단위 행렬일 경우(회전을 안하는 경우) 처음과 마지막 회전이 합쳐지는 문제가 발생한다. 이를 Singularity라고 하며 이러면 역계산시 처음 회전과 마지막 회전의 각도가 합쳐지기 때문에 유의하자.
- Roll-Pitch-Yaw
이 타입은 x축 회전, y축 회전, z축 회전을 각각 roll, pitch, yaw라고 읽는다. Vehicle에서는 이 각도를 많이 사용한다.
여기서도 pitch가 +90도 혹은 -90도일 때 Singularity가 생기는데 자동차에서는 앞으로 90도 회전할 일이 없으니 걱정하지 않아도 된다.
Two Vector Representation
손 끝 좌표계는 보통 다음과 같이 표현한다.
가까이 가는 방향을 a 벡터로 표현하는 것이 대부분이다.
Rotation about an Arbitrary Vector
Angle과 Vector를 이용하는 방법이다. 서로 다른 방향의 좌표축은 한번의 회전으로 동일하게 만들 수 있는 대칭축이 존재하기 때문에 회전함으로써 좌표계를 맞출 수 있다.
식은 위와 같다. I는 단위 행렬, S는 Skew matrix(인터넷 검색해서 확인)이다.
공간 상의 벡터 v와 각도 세타만 결정되면 Rotation Matrix R이 결정된다.
이거보다는 Roll-Pitch-Yaw를 많이 쓴다.
Unit Quaternions
하나의 실수부와 3개의 허수부(또는 하나의 3차원 벡터부)로 정의되는 회전이다.
쿼터니안에 대해 자세히 배우고 싶으면 다음의 블로그의 작성글을 확인하는 것이 더 좋을 듯하다.
강의에서는 간단히만 설명했기 때문에 한번에 이해하기에 어려움이 있었다.
Combining Translation and Orientation
쿼터니안 회전에 Translation을 추가한 것이다.
맨 아래의 식을 보면 point 벡터의 변환을 쿼터니안을 이용하면 곱하고 더하는 식으로 간단하게 표현이 가능함을 알 수 있다.
위는 매트랩에서 여러 각도 표현에 대한 변환 명령어들을 나열한 것이다.