목차 ( 공통부분 이 튜토리얼 과정을 따라갈 것임 )
참고 : http://wiki.ros.org/navigation/Tutorials
navigation/Tutorials - ROS Wiki
Configuring and Using the Navigation Stack Setting up your robot using tfThis tutorial provides a guide to set up your robot to start using tf. Writing a local path planner as plugin in ROSA tutorial to writing a custom local planner to work with the ROS1.
wiki.ros.org
목차

정말 우울하게도 여깄는건 전부 C++ 코드인듯함
코드 해보고 싶으면 C++ 이해해서 python 으로 내가 직접 코딩하는 수 밖에.. 없을듯... ㅅㅂ 하
운좋게 tf 코드 파이썬으로 바꿔논 고마운 곳을 찾았다.
http://wiki.ros.org/tf/Tutorials
tf/Tutorials - ROS Wiki
Many of the tf tutorials are available for both C++ and Python. The tutorials are streamlined to complete either the C++ track or the Python track. If you want to learn both C++ and Python, you should run through the tutorials once for C++ and once for Pyt
wiki.ros.org
밑에 설명 듣기 전에 보면 좋을 만한 링크 모음 참고위주
알면 안봐도 된다.
1. tf란 : TransForm 줄임말
로봇의 팔, 다리등의 움직임을 표현할떄 팔 하나가 움직일 경우 팔에 연결되어있는 다른 관절들이 상대적으로 같이 움직이게 된다. 이렇게 로봇의 좌표변활을 통한 관절과 물체의 위치표시를 TF라고 한다.
TF는 자세(pose)로 위치(position), 방향(orientation)두가지로 나타낸다.
내생각은 TF == offset 도구 + 로봇의 팔다리가 같이 움직일 수 있게끔(가제보나 rviz에서) 인식시켜주는 패키지
ex) 기준 몸통(부모노드) + 팔(자식노드) + 다리(자식노드)
tf 정의 : tf는 사용자가 시간이 지남에 따라 여러 좌표 프레임을 추적할 수 있게 해주는 패키지입니다. tf는 시간에 버퍼링된 트리 구조에서 좌표 프레임 간의 관계를 유지하고 사용자가 원하는 시점에서 두 좌표 프레임 간의 점, 벡터 등을 변환할 수 있도록 합니다.http://wiki.ros.org/tf
http://wiki.ros.org/tf/Tutorials/Introduction%20to%20tf
tf/Tutorials/Introduction to tf - ROS Wiki
Note: This tutorial assumes you have a working knowledge of compiling programs in ROS. Check out the ROS tutorials to learn how to do this. Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your
wiki.ros.org
1_tf를 사용하여 로봇 설정
개념

base_laser 나 base_link 둘다 중심점에 좌표를 두는 것이 중요하다
가상의 base_laser 정의 : 장애물을 피하는 데 사용
위 그림처럼 레이저가 장애물을 캐치해도 자기 기준 거리기 때문에 특정 오프셋을 이용해 base_link와 장애물 사이의 거리를 구해야 한다.
여기서 tf를 사용해서 link와 laser 프레임 간의 관계를 정의하고 저장하려면 변환 트리에 추가해야 한다.

중심이 되는 base를 부모노드로 기준으로 두고 laser나 부가적인 부품들은 자식노드로 둔다. 물론 tf 패키지를 이용해서 서로 간의 연결(관계)을 꾀함. + 오프셋기능으로 laser가 장애물을 감지할 시 base의 edge(자기몸사이즈)가 장애물에 닫지않고 피해간다던가 멈춘다던가 하는 부분들이 가능해 지는것!!
물론 TF패키지에 publish할 노드를 코딩해야한다. ( 오프셋(base_laser → base_link)시켜주는 역할 )
이걸 "Broadcasting a transform" 이라고 말한다.
핵심 명령어 : broadcaster.sendTransform( ~~~~,~~~~, )
미완중 여기부터 해야ㅐ댐
코드부분
src/tf_broadcaster.cpp 작성 : base_laser → base_link 로 브로드캐스트 해주는 코드
src/tf_listener.cpp 작성 : base_laser → base_link 로 오프셋 시켜주는 코드
CMakeList.txt 수정도 필요함
실행

댓글