1. TF : frame 간의 관계를 알아낼 수 있는 라이브러리
-> 로봇의 다양한 센서와 링크의 좌표계를 시간에 따라 추적하고, 변환하는데 사용
-> 이를 통해 로봇의 여러 부품 간의 위치와 방향을 일관되게 유지
2. TF의 주요 기능
- 좌표계 변환 : 로봇의 여러 좌표계 간의 변환 계산
ex) 로봇의 base_link 에서 카메라까지의 좌표 변환 계산 - 시간에 따른 추적 : 시간에 따른 변환을 추적함으로써 과거의 특정 시점에서의 변환을 알 수 있다.
- 브로드캐스팅과 리스닝 : 변환을 브로드캐스트하는 노드와 이 변환을 리스닝하는 노드를 제공
-> 로봇의 여러 노드가 TF 정보를 실시간으로 공유 가능 - 트리 구조 : 변화를 트리 구조로 관리, 각 좌표계는 부모 좌표계와의 부모 좌표계와의 관계를 가진다.
-> 전체 로봇의 좌표계를 체계적으로 관리 가능
3. Frame : 좌표계의 이름으로, 모든 ROS의 프레임은 서로 독립된 상태의 유클리드 좌표계로 구성되어 있으며 'frame_id'를 통하여 각각의 좌표계를 서로 구분할 수 있게 해주는 것
- stamp : 메세지가 생성된 시간을 알려주는 필드
**stamp가 중요한 이유 **
1. 여러 센서 데이터를 융합하고, 정확한 좌표 변환을 수행하기 위한 시간 동기화에 필수 요소이다.
2. stamp를 통해 메세지가 생성된 순서를 파악하고, 데이터 일관성 유지을 유지할 수 있다.
3. 메세지 처리에 걸리는 지연 시간을 계산하는데 활용
4. Frame이 만들어진 이유
로봇의 절대적인 위치, 로봇의 오른팔의 위치, 각 손가락의 위치 등 로봇의 상태(state)를 인식해야 할떄,
가장 표현하기 좋은 방법은 위도와 경도일 것이다. 하지만 위도와 경도를 미터 단위로 바꾸어서 표현해보았을떄
오른 손가락 1개의 위치는 (100백만, 100백만, 0)과 같은 좌표 값이 나올 것이다.
이 좌표를 얻기위해 수천에서 수천만 크기의 거리 에서 계산을 해줘야 할 것이다. 이렇게 부품들의 위치를 정의할때 항상 이런 복잡한 계산을 하는 것은 시간낭비 일것이다.
그래서 상대적인 위치로 나타내서 계산을 줄이기 위해 여러 개의 좌표계로 나눈 frame이 만들어지게 되었다.
-> 로봇의 중심점을 base_link라는 이름으로 세계의 절대적인 좌표를 world라는 이름으로 잡아서 계산하게 되었다.
즉, 각각의 부품들의 좌표계가 만들어지고, 그것들의 좌표계들을 합친 base_link라는 좌표계가 만들어져 로봇이 구성되고, 이 로봇은 world라는 좌표계에 존재하게 하는 것이다.
예시)
로봇의 중심을 base_link라는 이름, 세계의 절대적인 좌표를 world라는 이름으로 잡는다면, base_link 프레임에서는 (0,0,0), world 프레임에서는 (37,127)과 같은 식으로 표현할 수 있다. (상대적인 위치로 나타내는 것)
같은 방식으로 오른손 좌표계를 right_hand라는 이름으로 한다면, 손가락 1의 위치는 (-5,-5) 손가락 2의 위치는 (-3,-3)... 같은 식으로 표현이 가능해진다.
-> 이떄, 오른손가락과 왼손가락으로 깍지를 끼기 위해서는 로봇의 중심(base_link)를 기준으로 어디에 위치하는지 알아내서 계산을 해야한다. 이떄 각각의 좌표계끼리의 관계를 정의해주는 것을 TF(transform)이라고한다.
**TF 정의시 주의할 사항**
1. 정적 TF와 동적 TF가 충돌하지 않도록 관계를 정의해줘야한다.
=> TF를 중복으로 정의하지 말아야한다.
2. 상위 좌표계와 하위 좌표계 간의 변환이 되면서 최종적으로 map frame에 적용이 되는데 변환을 할때 stamp 즉, 값을 얻은 시기나 변환 시기의 차이가 나지 않도록 해야한다. (=> rqt 도구를 통해서 transform 시간 체크를 잘해야한다.)
'ROS2 이론 정리' 카테고리의 다른 글
ROS2 SLAM에 대한 모든 것 (0) | 2025.01.07 |
---|---|
ROS2 URDF에 대한 모든 것 (0) | 2025.01.06 |
노드 간의 통신 방식 3가지 (0) | 2025.01.06 |
ROS 파일 시스템 구조 (1) | 2025.01.03 |
ROS 기본 개념 (1) | 2025.01.03 |