본문 바로가기
Coloring (Additional Study)/Robotics

2D Geometry

by 생각하는 이상훈 2024. 9. 30.
728x90

2D Geomety in Robotics

로보틱스에서 2D geometry는 로봇이 2차원 평면에서 자신의 위치와 방향을 정확히 이해하고 그에 맞춰 이동하거나 작업을 수행하기 위해 필수적인 도구이다. 로봇은 이동, 회전, 물체 탐지 등 다양한 동작을 수행하는데 이 과정에서 로봇은 자신의 pose를 인식하고 주변 환경과의 상호작용을 수학적으로 판단할 수 있어야 한다. 2D geometry는 이러한 위치 및 방향 정보를 표현하고 로봇이 주변 환경에서 효율적으로 경로를 계획하고 충돌을 피할 수 있도록 돕는다. 또한 상대적인 위치나 회전을 계산하여 자율적인 행동을 가능하게 함으로써 로봇이 주어진 task를 신속하고 정확하게 수행할 수 있게 해준다.


Position and Pose in 2D

Position과 Pose는 로봇 공학에서 로봇의 상태를 설명하는 중요한 개념이다. Position은 단순히 로봇이 2D 평면에서 차지하고 있는 (x, y)좌표를 의미한다. 이는 로봇이 어디에 있는지를 나타내지만 로봇이 향하고 있는 방향에 대한 정보는 제공하지 않는다. Pose는 이러한 위치 정보에 더해 로봇의 방향까지 포함한 개념이다. 즉, Pose는 로봇이 평면 상에서 어디에 있고 어떤 방향을 향하고 있는지를 표현하며, 수학적으로는 (x, y, θ)로 나타낼 수 있다. 이러한 Pose 정보는 로봇이 이동 경로를 계획하고, 특정 방향으로 작업을 수행하는 데 필수적이다. 따라서 Pose는 로봇이 공간에서 효율적으로 동작하고 주어진 task를 수행하는 데 중요한 요소이다.

Point
Pose


Relative Pose in 2D

상대적인 Pose는 한 로봇이 다른 로봇이나 물체에 대한 상대적인 위치와 방향을 나타내는 개념이다. 이는 로봇이 자신의 좌표계에서 다른 객체의 위치와 방향을 계산하고 이해하는 방식이다. 예를 들어, 두 로봇이 있을 때, 한 로봇의 상대적인 포즈는 다른 로봇을 기준으로 얼마나 떨어져 있고 어떤 각도로 회전해 있는지를 의미한다. 수학적으로는 두 로봇의 포즈 차이를 구함으로써 계산할 수 있고, 이는 경로 계획, 협업 작업, 충돌 회피 등 다양한 상황에서 유용하다. 상대 포즈는 로봇 간의 상호작용을 다룰 때 핵심적인 역할을 하며, 자율적인 로봇 시스템에서 중요한 요소다.

 

Composition을 통해 pose를 합칠 수 있다. 다시말해 a -> c 를 a->b ⊕ b->c 로 나타낼 수 있다.

위와 같이 복잡한 pose graph로 표현되는 상황에서도 composition을 통해 pose들을 연결지어 원하는 pose를 표현할 수 있다.

이때 위와 같은 연산 규칙이 존재한다. O minus와 O plus의 차이를 확인하자. 또한 O plus를 이용할때 먼저 나오는 pose의 끝점과 나중에 나오는 pose의 시작점이 일치해야된다는 점을 잊지 말자.


Transformation matrix

아래와 같이 좌표계를 회전시켜 변환하고 싶을때 rotation matrix가 필요하다.

아래와 같은 orthonormal matrix로 표현되는 matrix이다.

이것만으로는 부족하고 실제로 pose를 표현하기 위한 matrix는 아래와 같은 transformation을 수행할 수 있어야한다.

이러한 2D 변환을 표현하기 위해 아래와 같은 3X3 homogeneous transformation matrix T가 필요하다.

이를 이용하면 벡터의 곱연산으로 변환을 모두 표현할 수 있다.

이를 아래의 코드를 이용해 직접 코드로 테스트 해볼 수 있다.

import spatialmath.base as smb
import numpy as np
import matplotlib.pyplot as plt


print(smb.transl2(1, 2), "\n")

print(smb.rot2(30, "deg"), "\n")

print(smb.trot2(30, "deg"), "\n")

print(np.matmul(smb.transl2(1, 2), smb.trot2(30, "deg")), "\n")

print(smb.trot2(30, "deg", t=[1, 2]), "\n")

T1 = smb.trot2(30, "deg", t=[1, 2])
print(T1, "\n")

smb.trplot2(T1)
plt.xlim(0, 5)
plt.ylim(0, 5)
plt.show()

T2 = smb.trot2(0, t=[2, 1])
print(T2, "\n")

smb.trplot2(T2)
plt.xlim(0, 5)
plt.ylim(0, 5)
plt.show()

T3 = np.matmul(T1, T2)
print(T3, "\n")

smb.trplot2(T3)
plt.xlim(0, 5)
plt.ylim(0, 5)
plt.show()

T4 = np.matmul(T2, T1)
print(T4, "\n")

smb.trplot2(T4)
plt.xlim(0, 5)
plt.ylim(0, 5)
plt.show()

P = np.asarray([[3], [2]])
print(P, "\n")

plt.plot(P[0], P[1], "b*")
plt.show()

P1 = np.matmul(np.linalg.inv(T1), [[3], [2], [1]])
print(P1)

T1과 T2를 homogeneous matrix로 표현하고 

T1
T2

T3 = T1 * T2 와 T4 = T2 * T1의 차이를 확인하여 order의 중요성을 확인해볼 수 있었다.


 

728x90

'Coloring (Additional Study) > Robotics' 카테고리의 다른 글

3D geometry  (0) 2024.10.02