ROS에서는 여러 노드와 센서가 데이터를 주고받기 때문에 좌표 표현을 통일하는 것이 중요하다.
앞서 살펴본 물리량의 표준 단위가 단위 불일치로 인한 문제를 줄이기 위한 규칙이었다면, 좌표 표현에 대한 규칙은 서로 다른 좌표계를 사용할 때 발생할 수 있는 문제를 줄이기 위한 것이다.
예를 들어 로봇은 일반적으로 x forward, y left, z up 좌표계를 사용하지만, 카메라는 z forward, x right, y down 좌표계를 사용하는 경우가 있다. 따라서 센서에서 사용하는 좌표계를 확인하고 필요하다면 로봇의 좌표계에 맞게 변환해야 한다.
로봇에는 카메라, LiDAR, IMU, Torque 센서 등 다양한 센서가 사용된다.
이때 센서나 제조사에 따라 서로 다른 좌표계를 사용할 수 있기 때문에 좌표계가 통일되지 않으면 데이터의 방향이나 위치를 잘못 해석할 수 있다.
예를 들어 카메라는 다음과 같은 좌표계를 사용할 수 있다.
z forward
x right
y down
반면 ROS에서 사용하는 로봇의 기본 좌표계는 다음과 같다.
x forward
y left
z up
따라서 센서 데이터를 로봇 좌표계에서 사용하려면 적절한 좌표 변환이 필요하다.
ROS 커뮤니티에서는 이러한 좌표 표현의 불일치로 발생하는 문제를 줄이기 위해 표준 좌표 표현 규칙을 정하고 있다.
ROS의 좌표계는 오른손 법칙(Right-Hand Rule)을 기준으로 표현한다.
오른손의 엄지, 검지, 중지를 서로 직각으로 세웠을 때 각 손가락을 좌표축으로 생각할 수 있으며, 손가락을 감는 방향이 회전의 + 방향이 된다.
또한 회전각은 앞서 살펴본 표준 단위에 따라 라디안(radian)을 사용한다.
예를 들어 로봇이 제자리에서 시계 방향이 아닌 반시계 방향으로 12시 방향에서 9시 방향까지 회전했다면,
+1.5708 rad
정도의 회전으로 표현할 수 있다.
ROS의 기본 좌표축 방향은 다음과 같다.
X → Forward
Y → Left
Z → Up
즉,
을 의미한다.
RViz나 Gazebo와 같은 3차원 시각화 및 시뮬레이션 도구에서는 축을 RGB 색상으로 표현하기도 한다.
Red → X
Green → Y
Blue → Z
따라서 RViz나 Gazebo에서 좌표축을 확인할 때 색상을 통해 각 축의 방향을 쉽게 구분할 수 있다.
지리적 위치를 표현하는 경우에는 ENU(East North Up) 좌표를 사용한다.
각 축은 다음을 의미한다.
E → East
N → North
U → Up
ENU 좌표는 실내 로봇보다는 비교적 넓은 영역을 다루는 드론이나 실외 자율주행 로봇 등에서 사용되는 좌표계로 설명할 수 있다.
기본 좌표계인 x forward, y left, z up 또는 ENU 좌표에서 벗어나는 경우에는 접미사(suffix)를 사용하여 다른 좌표계임을 구분한다.
대표적으로 다음과 같은 접미사가 있다.
_optical
_ned
필요한 경우 좌표 변환을 통해 기본 좌표계와 연결해서 사용한다.
컴퓨터 비전에서 사용하는 카메라 좌표계는 일반적으로 다음과 같다.
z forward
x right
y down
이러한 카메라 좌표계를 로봇의 기본 좌표계와 구분하기 위해 _optical 접미사를 사용한다.
예를 들어 카메라 센서의 좌표 프레임을 _optical로 구분하고, 로봇 좌표계인 x forward, y left, z up과 연결하기 위해 TF(transform)가 필요하다.
실외 시스템에서는 센서나 지도에 따라 ENU가 아닌 NED(North East Down) 좌표계를 사용하는 경우도 있다.
이때 _ned 접미사를 사용하여 해당 좌표계를 구분한다.
N → North
E → East
D → Down
ROS에서는 좌표의 위치뿐만 아니라 회전(Rotation)도 일정한 규칙에 따라 표현한다.
대표적인 회전 표현 방법은 다음과 같다.
쿼터니언은 비교적 간결한 표현 방식이며 ROS에서 널리 사용된다.
(x, y, z, w)
형태로 표현하며 특이점(singularity)이 없다는 특징이 있다.
회전 매트릭스를 이용하여 물체의 회전을 표현할 수도 있다.
쿼터니언과 마찬가지로 특이점이 없다는 특징이 있다.
고정된 X, Y, Z축을 기준으로 회전을 표현하는 방식이다.
자료에서는 다음과 같이 설명한다.
Roll → X축
Pitch → Y축
Yaw → Z축
또한 각속도에 사용된다.
오일러 각도는 다음과 같이 표현한다.
Yaw → Z축
Pitch → Y축
Roll → X축
하지만 전역 좌표계에서 회전이 발생하면서 한 축의 회전이 다른 축의 회전과 겹치는 짐벌락(Gimbal Lock) 문제가 발생할 수 있기 때문에 사용을 권장하지 않는다.
ROS 2에서 사용하는 주요 좌표 표현을 정리하면 다음과 같다.
| 구분 | 내용 |
|---|---|
| 기본 좌표축 | X Forward, Y Left, Z Up |
| 회전 방향 | 오른손 법칙 |
| 각도 단위 | radian |
| 지리 좌표 | ENU (East, North, Up) |
| 카메라 좌표 | Z Forward, X Right, Y Down |
| 카메라 프레임 | _optical |
| NED 프레임 | _ned |
| 회전 표현 | Quaternion, Rotation Matrix 등 |
이번에는 ROS 2에서 사용하는 좌표 표현 규칙에 대해 알아보았다.
ROS의 기본 좌표계는 X Forward, Y Left, Z Up이며, 좌표축의 회전 방향은 오른손 법칙을 따른다. 또한 지리적 위치에서는 ENU 좌표를 사용하고, 카메라처럼 다른 좌표계를 사용하는 센서는 _optical과 같은 접미사를 사용하여 구분한다.
회전 표현에서는 쿼터니언, 회전 매트릭스, Roll·Pitch·Yaw 등의 방법이 사용되며, 오일러 각도는 짐벌락 문제 때문에 사용을 권장하지 않는다.
센서마다 좌표계가 다를 수 있기 때문에 각 센서의 좌표계를 확인하고 필요한 경우 TF를 이용해 좌표 변환을 수행하는 것이 ROS에서 중요한 개념이다.