원리를 이용 TF에서 ROS (좌표 변환)

2019년 7월 2일 21시 43분 5초

TF에서 ROS

직접 새로운 작업에 대한 제안의 공식 웹 사이트 TF2, 그것은 깨끗한 인터페이스, 그리고 더 나은 사용자 경험을 가지고 있기 때문이다. (첫 번째 세대왔다 TF ROS 하이드로 때문에, TF2 대신 "포기")

TF 소개

TF는 (변환), 즉, 위치 및 자세의 변화를 모두 포함하여, 좌표 변환. 구별 좌표 변환 및 좌표 변환.

좌표 변환은 다른 좌표계의 좌표 시스템으로 표현하고, 좌표 시스템을 다른 시스템의 상대 자세를 조정.

ROS 로봇 모델 부재 다수의 각 부재의 시스템 호출 포함 된 링크 (헤드, 공동, 링크 등의 손 등)을 상부에 대응하는 각 링크 프레임 (좌표계) 프레임으로 표시 좌표계, 프레임, 링크 부재가 서로 결합되어있다.

TF는 인기있는 이름, 사실, 많은 의미가있다 :

  1. 표준 사양은 표준 데이터 포맷 및 좌표 변환의 데이터 구조의 세트를 정의로 할 수있다. TF는 기본적으로 트리 데이터 구조, 즉이다 "TF의 나무" .
  2. TF는 주제로 볼 수있다 /tf, 의 TF 트리 데이터 구조 형식은 뉴스 항목을 저장할 수 있습니다 . 전체 로봇의 유지 또는 변환 맵을 좌표입니다. 유지하고 로봇의 전체 항목을 업데이트 시스템이 좌표 /tf, /tf주제의 내용이 전체 로봇 TF 트리를 나타내는, 오히려 두 단지 변환 관계보다 좌표계 때문에, /tf주제는 노드를 많이 유지할 필요가 각이다 노드는 2 개의 프레임 간의 관계를 유지한다.
  3. TF는 또한 많은 도구가 포함 된 패키지로 볼 수있다. 이러한 시각화로, 관절 사이 등 TF, 디버그 TF를 참조하십시오.
  4. 노드를 프로그래밍하기위한 상기 API 인터페이스의 일부를 포함하는 TF. TF 게시자 및 패키지의 가입자는, 개발자가보다 쉽게 ​​구축하고 TF 인터페이스에 의해 일부 좌표계 변환 관계 TF 트리에 가입을 유지할 수 있습니다.

TF는 트리 구조에 좌표계 사이의 관계 유지 통신 메커니즘의 주제는 서로 다른 링크 사이의 관계를 조정 게시 계속. 트리 구조로, 그의 아들이 지속적으로 나무가 그대로 만들기 위해, 그들 사이의 위치와 방향의 관계를 풀어 좌표계에서 노드를 가지고 있는지 확인합니다. 아버지와 아들 사이 만의 관계는 올바른 좌표 시스템이 두 프레임 사이의 통신을 보장하기 위해, 해제 할 수 포즈.

링크 오류가 발생하면 오류 시스템 오류로 이어질 것입니다. 우리는 두 프레임 사이의 관계를 찾을 수 있도록 그래서 완전한 TF 트리, 어떤 결함을 배치 할 수 없습니다.

각 노드에 의해 인접한 두 프레임 해제 위치 및 이들 간의 관계 방향 사이에,이 노드는 브로드 불린다. 두 프레임 사이의 상대 운동은, 방송 관련 정보를 공개 할 경우 방송사 게시자 출판사이다.

TF 원리

TF 트리 구조

TF는 모든 구현의 좌표계 사이의 좌표 변환의 어느 한 점에있어서, 라이브러리 시스템의 목적이다. 좌표계의 한 지점의 좌표를 제공하는 경우 즉, 당신은 다른 좌표계에서 점의 좌표를 얻을 수 있습니다.

상기 목적을 달성하기 위해, 현재의 시스템은 ROS 좌표계 사이의 두 변형을 초래할 제공 할 필요가있다.

그래서 그것의 좌표 두 기록 사이의 포즈 변환을 설명하는 TF의 방법은 무엇입니까?

문제는 여기에있다. 해당 시스템이 조정한다고 가정하고 C (N, 2)의 조합과 이들 사이의 관계. 이러한 철저한 숫자가 매우 될 경우, 그래서이 방법을 채택하지 않습니다.

보다 합리적이고 효율적 내용은 좌표 시스템 사이의 변환을 나타낸다. 멀티 트리를 사용하여 TF 형태가 ROS 시스템의 좌표 시스템을 설명하기 위해, 트리의 각 노드는 좌표 시스템입니다. 특성은 각각의 트리 노드 TF만큼 부모 노드, 즉, 각각의 시스템은 부모가 좌표를 사용하는 좌표계이고, 아이 여러 원리 좌표계를 가질 수있다.

시스템 사양을 조정 TF

각 부모가 시스템 좌표 좌표가, 좌표 시스템은 여러 아이를 가질 수 있습니다. TF 트리 상단이 부모가 시스템이 다운 하위 좌표계를 좌표, 구성되어 좌표계 부모 - 자식의 형태이다.

부모 - 자식 관계를 갖는 좌표계 TF 트리, 화살표가 선에 의해 연결되는 인접. 트리 화살표로 TF는 부모 - 자식 관계를 나타낸다.

트리도 TF는 표현 base_link시스템 좌표 base_footprint, 서브 시스템의 좌표 base_cover_link시스템에서 좌표 base_footprint하위의 좌표계.

설명 사양 :

  1. 소스, 타겟 프레임은 인 좌표 변환 시간의 개념은 목표 대상 좌표이며, 소스 시스템은 좌표 변환 소스 좌표. 이번에는, 변형은 나타내는 좌표 변환 .
  2. 부모, 자식 프레임되어 변환 좌표 바와 부모가 아이에있어서, 상기 변환이 시간 좌표 변환되어 원래의 좌표계 인 경우, 개념 좌표계 변환에 설명 뿐 아니라 어린이가 부모 좌표계의 좌표를 설명을 .
  3. 프레임은 (프레임 변환)은 또한 프레임에 도시 된 B 프레임을 설명하는 B 프레임에 대한 좌표 변환을 또한 그것은에서 B 프레임에서의 프레임의 좌표로 좌표 점 나타내는 좌표 변환 .
  4. 부모 자식 부모의 좌표계 좌표계 아이에게 포인트 당량 (프레임 변환) 시스템 좌표 변환 좌표 변환 , 좌표계는 자식 프레임 상위에 설명 자세 좌표계와 동일하다.

상세한 TF는 TF 트리 나무와 통신을 나타냅니다

TF 트리 구축 및 통신 메커니즘의 유지 보수는 주제를 기반으로합니다.

각 전체 시스템의 모든 좌표계의 관계를 유지하기 위해 시스템 좌표 변환을 아버지와 아들 사이의 관계의 설정 및 유지 보수에 의해 변형되는 원리 TF 트리에 따르면. 각 상위 시스템의 좌표 변환 자식 관계 좌표계 발행자 노드에 의해 인이 서방에 broadcastor 불린다.

이 주제 통신 메커니즘 부모에 의해 발행되어 있지만 좌표계 변환 아이 좌표계하지만, 아버지와 아들의 각 쌍은 좌표 시스템 항목을 공개하지 않도록 하나 개의 주제는 발행, 사실 /topic그의 모든 아들의 릴리스의 컬렉션의 주제는 좌표 시스템 사이의 변환.

즉, TF 메커니즘이 좌표계 주제를 발표 한 아버지와 아들의 각 쌍을 수 있도록 아니라, 모든 부모 - 자식이 주제에 컬렉션에 좌표 시스템, 데이터 전송의 주제는 시스템 좌표 변환 모든 부모 - 자식에 대한 메시지는 관계는 시스템 좌표 변환의 부모 - 자식 관계의 큰 배열이다.

변환 된 tflisener를 사용하여 TF는 두 좌표계에서 모니터링 할 수 있습니다. TF는 두 유니콤을 얻을 수있는 나무의 전제이다.

트리를 구축 TF

당신은 먼저 부모가 첫 번째 좌표 시스템으로 TF 트리 (상위 프레임)의 설립의 시작 부분에 좌표계를 지정해야합니다. 같은 맵으로 로봇 시스템의 좌표계.

나뭇 가지를 추가하는 새로운 아이 프레임에 기존의 상위 프레임에서 좌표 변환을 발표 처음, 그 유지 보수입니다.

TF 트리 구축 및 유지 보수는 클래스 TF 제공 tfbroadcastor sendtransform 인터페이스를 사용합니다.

transformBroadcaster()클래스는 게시자이며, 효과는 sendTransform 기능을 게시 캡슐화하는 것입니다.

TF 트리 유지 보수

동작 중에 연속적 따라서 최신 위치 자세 변환 관계를 보장 기존 하위 프레임의 좌표 변환은 기존 부모 프레임을 업데이트한다.

트리 구조로서 아들 지속적 트리 그대로 확인하기 위하여, 2 개의 프레임 사이의 위치 자세 관계를 해제 프레임의 노드가 있는지 확인한다. 오직 두 프레임 사이의 통신을 보장하기 위해, 정확하게 해제 될 수있는 각 프레임의 부모 - 자식 관계를 포즈.

사용 TF 트리

일단 제대로 TF 트리를 설정, 각 부모 - 자식 좌표 시스템이 정상 유지 보수를 얻을 수 있도록, 그것은 TF 가입자, 임의의 두 좌표계의 가입 변환 관계를 이용하여 제공 할 수 있습니다.

어떻게 어떤 TF 트리를 따라 시스템 변환 관계를 조정 얻으려면?

어떤이의 변환 관계가 좌표계를 얻고 싶은 경우에, 실제로 가입자가 청구됩니다 /tf주제에 메시지를, 메시지는 모든 게시 된 좌표 아버지와 아들 사이의 관계를 변환 시스템의 모음입니다. 전체 TF 트리 실제로 현재 시간을받을 구독하고 부모 - 자식 관계의 다른 좌표 시스템을 기반으로 변환 경로를 찾기 위해 트리를 검색합니다. 이 경로하여 변환 행렬의 연속적인 경로 좌표 시스템이 두 가지의 필요한 최종 변환 관계를 승산, 부모 - 자식 관계의 통로에 필요한 두 좌표계의 변환에 연결될 수있다.

TF 게시자 및 패키지의 가입자는, 개발자가보다 쉽게 ​​구축하고 TF 인터페이스에 의해 일부 좌표계 변환 관계 TF 트리에 가입을 유지할 수 있습니다. B 프레임에 대한 프레임으로부터 지정된 특정 듣고 Tflisener의 TF는 변환된다.

요약 (참조 네트워크 리소스) :

기본 원리는 게시자, tflisener 클래스는 간행물 호출, 가입자가,가, tfbroadcastor 클래스 /tf메시지 전송 된 메시지는 모든 부모되는 frameID와 자식되는 frameID의 정보를 포함, 주제,이 주제에 대한 가입이 필요합니다. 이 메커니즘은 모든 TB 자식 변형에 특정 상위 해제되며, 모두 TL 이러한 변형 모두가 나타날 것이며, 다음 tfbuffercore의 TL의 데이터 구조를 사용하는 것을 의미 전체 트리 구조 및 상태를 유지한다. 이것을 기초 TL 트리를 이용한 좌표계 사이의 waitfortransform lookuptransform 또는 변환을 얻기 위해 사용될 것이다.

그래서 심지어 오랫동안 tflisener으로, 우리가 수집해야, 모든 tfbroadcastor와의 연결을 설정하는 것이 필요하다 (즉, 단지 좌표계 둘 사이의 관계를 변환 듣고있다) /tf나무에 전체 TF를, 나무는 변화의 경로를 찾으려면 검색에 대한 책임, 다음 최종 변환 관계는 두 변환 행렬 좌표계 곱한.

TF 기능

장점 :

  1. 다양한 수치 계산의 세부 사항은, 당신은 TF 라이브러리가 당신을 도울 수, 걱정할 필요가 없습니다
  2. 인터페이스는 매우 간단하고, 라인에서 수신 방송된다;
  3. 문제는 매우 정확 발견, 그리고 특히, 아버지와 아들 좌표계 사이의 관계 좌표계 사이의 관계를 유지할 필요가있다
  4. 그것은 많은 도구 프로그램을 제공합니다
  5. 시간에 따른 변화를 고려
  6. 지원 TF-접두사, 다중 로봇에 사용할 수 있습니다. 로봇 구별 다른 프리픽스를 사용하는 다른 로봇을 가짐으로써. 하나 개의 로봇이 일반적으로 사용하는 경우/

단점 :

  1. 나무는 매우 간단합니다,하지만 때로는 매우 서투른입니다. 평면 좌표 시스템을 위해, 우리는 위로하고 조상에서 내려보고, 둘 사이의 관계를 결정하기 위해 아래에서 공통 조상을 찾을 필요가있다.
  2. 두 개의 좌표 시스템이 동일한 검색 트리를 얻기 위해서는 각 가입자의 관계는 이러한 비용은 주로 네트워크 전송 부하가 비교적 큰 경우, 너무 높다.
  3. 더 분명히 실시간 요구 사항을 충족하기 어려운. TF는 각 변환 데이터의 10 초 저장됩니다 이유입니다
  4. 전체 사용이 상대적으로 용이하지만,하지만 많은 세부 사항은 이해하기 어렵다. 예를 들어, 지금은 ()와 시간 (0); 예를 들어, 일부 용어의 관점에서 기술 문서는, 사용하는 경우, 예를 들어, 차량 습관은 매우 다양 습관에서 로봇, 항공기, 관성 항법의 사용은 당연한 수 없습니다.

TF 메시지 두 프레임 간의 메시지

아버지와 아들 사이의 각 방송사 노드는 좌표 변환 사이의 관계를 유지하기 위해 정보의 보급을 조정해야합니다. TransformStampde.msg그것은이다 /tf메시지의 주제. 단문 메시지 포맷 TF 두 프레임 사이의 상대 좌표 변환 관계를 표현하기 위해 사용된다.

설명 :

ROS TF 트리 실제로 단순히 변환 사이 이십 부모 - 자식 관계를 기술하는 복수의 좌표에 의존하지 않고 시스템 전체의 좌표계 사이의 관계에 의해 표현된다. 여기서 TransformStampde.msg메시지 TF 트리 메시지 유형은 부모 - 자식 쌍 시스템의 실시 예를 상기 자세 조정, 즉 단편 메시지 유형 TF 트리 기반의 TransformStampde.msg메시지, 및 따라서 제 도입 TransformStampde.msg. TransformStampde.msg기본적으로 짧은 TF의 TF 트리 변환을 설명.

다음과 같이 특히 메시지 유형은 다음과 같습니다

geometry_msgs/TransformStamped(표시하면, 메시지 종류에 속한다는 것을 geometry_msgsTF보다는 패키지 패키지)

std_mags/Header header
        uint32 seq
        time stamp
        string frame_id
string child_frame_id
geometry_msgs/Transform transform
        geometry_msgs/Vector3 translation
                float64 x
                float64 y
                float64 z
        geometry_msgs/Quaternion rotation
                float64 x
                float64 y
                flaot64 z
                float64 w

메시지 설명 :

이 메시지는 현재 좌표의 시스템 및 서브 frame_id 사이의 좌표 변환 child_frame_id 것을 나타낸다. 변환에 의해 특정 포즈 geometry_msgs/Transform정의 된 메시지 유형, 메시지 타입은 4 튜플로 표시되는 입체 벡터 변환, 회전을 나타낸다.

TF 메시지 : TF 트리 메시지 유형

/tf주제 내용, 두 단지 변환 관계가 좌표계보다는, 전체 로봇 TF 트리를 나타내는, 그래서 /tf각 노드는 두 프레임 사이의 부모 - 자식 관계를 유지, 주제 노드를 많이 유지할 필요가있다. 즉, A는 /tf노드의 번호가 메시지를 송신 할 수있다, 상술 한 항목.

이 프레임 TF 많은 모자이크 사이 TF 트리에 해당합니다. 방금 말한 TransformStampde.msg메시지 유형은 실제 소개, 다음 두 TF 프레임 사이의 관계를 나타내는 /tf주제 TF 트리 메시지 유형에 전송합니다.

메시지 유형에 대응 TF 트리 TF2 tf2_msgs/TFMessage.msg. 메시지가있는 것을 표시 tf2_msgs패키지 내에서.

tf2_msgs / TFMessage 메시지의 특정 형식 :

geometry_msgs/TransformStamped[] transforms
        std_msgs/Header header
                uint32 seq
                time stamp
                string frame_id
        string child_frame_id
        geometry_msgs/Transform transform
                geometry_msgs/Vector3 translation
                        float64 x
                        float64 y
                        float64 z
                geometry_msgs/Quaternion rotation
                        float64 x
                        float64 y
                        flaot64 z
                        float64 w

TF는 트리 형식의 메시지는 실제로는 것을 알 수 있습니다 TransformStamped가변 길이 배열 유형 정의. 즉, 상기 두 메시지 프레임 사이의 TF의 수의 본질 TransformStamped로봇 TF 전체 트리 형 메시지 형태를 설명한다 tf2_msgs/TFMessage.msg.

rospy에서 TF 인터페이스 roscpp

모두 TF에서 라이브러리 또는 rospy에서 roscpp 여부, TF는 많은 유용한 인터페이스를 제공합니다. 여기에 더 이상 참조 특정 정보의 특정 용도로만 사용에 대한 일반적인 설명.

구조의 유형을 제공합니다 :

  1. 데이터 타입 정의 (클래스) 벡터 점 쿼터니언, 3 × 3 회전 행렬 등 포즈
  2. 데이터 변환 : 주어진 회전 행렬 쿼터니온 간의 전달 함수, 오일러 각, 회전축
  3. 동작 점의 기능, 벡터 각도와 사원 수의 등
  4. TF 클래스, 패키지 게시자와 가입자 인터페이스 좋은. 당신은 관련 시스템 변환 좌표 게시 할 수 있습니다 /tf또한에 가입 할 수 있으며, 주제에 변환의 기간을 /tf두 좌표계 사이의 시스템 좌표 변환을 주제 및 원본에서 대상으로 좌표계에 도착.

transformBroadcaster()클래스는 게시자이며, 효과는 sendTransform 기능을 게시 캡슐화하는 것입니다. 실제 사용에서, 우리는에 게시 변환됩니다) TF :: TransformBroadcaster 클래스의 노드에 구축 한 다음 sendTransform을 (호출 할 필요가 /tf기간 변환을.

TransformListener클래스로부터 /tf클래스에 받았다.

TF 패키지 관련 명령 줄 사용

  1. 현재의 방법 프레임을 모두 표시하려면 명령 줄을 사용합니다 :

    rosrun tf tf_monitor #显示当前坐标变换树的信息,主要是名称和实时的时间延时
    rostopic echo /tf #以TransformStamped消息类型的数组显示所有父子frame的位姿转换关系

    주로 데이터가 나타난다 위

  2. PDF 파일은 현재 TF 트리를 기반으로지도를 만들 :

     $ rosrun tf view_frames

    공구 제 가입 /tf정보에 따라 TF, 5 초 동안 가입, 이번 수신 한 TF 트리로서 플롯 한 다음 PDF 맵으로 생성한다.

    TF는 그래픽 형태 등의 나무 프레임과 부모 - 자식 관계의 모든 두 프레임 브로드, 평균 속도를 표시합니다

  3. 현재 TF 트리보기 :

     $ rosrun rqt_tf_tree rqt_tf_tree

    을 캡처 연결하면이 명령은 또한 TF 트리를 쿼리,하지만 첫 번째 명령의 차이는, 예를 들어, 현재 TF 트리, 현재의 모든 변경 사항은 즉시 동적 쿼리를 볼 수있는 명령입니다 때 분리하기 이들은 다음 RQT 플러그에 의해 표시됩니다.

  4. 두 프레임 사이의 관계를 변환 확인 :

     $ rosrun tf tf_echo[source_frame][target_frame]

    디스플레이 소스 사이 시스템 좌표 변환 좌표계 타겟팅 포즈 할 것이다.

    지침은 프레임의 두 관계에 질의 할 수있다.

참고 자료

https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter8/8.3.html (기본 유인물 )

http://blog.exbot.net/archives/1686(TF 이해 )

추천

출처www.cnblogs.com/sxy370921/p/11726691.html