ROS TF ----- 방송 프로그램 듣기 로봇 좌표 변환

TF 프로그래밍 : 방송 및 변환 좌표 로봇 듣기

예 : 방송 듣기는 변환 좌표 로봇의 좌표계 섀시 LIDAR 데이터의 좌표 값을 해결 알려진 좌표 관계 레이저 레이더 로봇 섀시?
그림 삽입 설명 여기
TF ROS 프로그램이 포함 된 고급 학습, 우리가 실시간으로 로봇의 움직임을 이해하고 위치 정보를 얻기 위해 도움이며, 학습은 TF 프로그래밍, 기능 팩의 TF 우리의 지침, ROS TF 패키지의 기능은 무엇인가?
TF 기능 팩의 ROS :
변환 관계를 좌표로 TF 기능 패키지 방송 변환하여 얻어진 TF를 TF 변환을 청취 할 수
관계를 글로벌 좌표계 사이 대하여 로봇의 로컬 좌표계.
로봇의 중심 위치에 대하여 상기 물체를 파지 로봇 좌표계.
로봇 센터 글로벌 좌표계 시스템의 상대 위치를 조정.
블로그, 위에서 주어진 TF 프로그래밍 예제로 배우는 오는 단어는 봐, 말을하지 않습니다!

세트의 TF 방송

1, 프로젝트 패키지로

cd ~/ros/src/comm/src

참고 : ROS의 ROS 오 자신의 수정에 따라 내 작업 공간, 통신 자신의 ROS 엔지니어링 패키지, 작은 파트너입니다!

2, 파일 TF 방송을 만들broadCaster.cpp

touch broadCaster.cpp

3, 파일 TF 방송을 엽니 다

gedit broadCaster.cpp

4, 다음 코드는 언어 방송 파일을 C ++로 작성 TF

/**
 * 该例程产生tf数据,并计算、发布base_laser的位置指令
 */
#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
int main(int argc, char** argv){
    // 初始化ROS节点
    ros::init(argc, argv, "robot_tf_broadcaster");

    // 订阅base_link的位置话题
    ros::NodeHandle node;

    // 创建tf的广播器
    static tf::TransformBroadcaster br;

    while(node.ok()){
        // 初始化tf数据
        tf::Transform transform;
        transform.setOrigin( tf::Vector3(0.1, 0.0, 0.2) );
        transform.setRotation( tf::Quaternion(0,0,0,1) );

        // 广播base_link与base_laser坐标系之间的tf数据
        br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "base_link", "base_laser"));
    }
    return 0;
};

아래와 같이 여기, 우리의 TF 방송 파일이 생성된다 :
그림 삽입 설명 여기

둘째, 리스너 TF를 설정

현재 폴더에 폴더 TF 청취자에게 파일을 작성하십시오robListener.cpp

새 터미널을 만들고, 우리는 이름터미널 1다음 명령을 입력합니다 :

touch robListener.cpp

2, 파일 TF 모니터를 엽니 다robListener.cpp

gedit robListener.cpp

3, TF 모니터 파일에 다음과 같은 C ++ 코드

/**
 * 该例程监听tf数据,并计算、发布base_laser的位置指令
 */
#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <geometry_msgs/PointStamped.h>
int main(int argc, char** argv){

    // 初始化ROS节点
    ros::init(argc, argv, "robot_tf_listener");

    // 创建节点句柄
    ros::NodeHandle node;

    // 创建tf的监听器
    tf::TransformListener listener;
    ros::Rate rate(10.0);
    while (node.ok()){

        //我们将在base_laser帧中创建一个要转换为base_link帧的点
        geometry_msgs::PointStamped laser_point;
        laser_point.header.frame_id = "base_laser";
        
        //我们将在我们的简单示例中使用最近可用的转换
        laser_point.header.stamp = ros::Time();
        
        //laser_point检测点获取
        laser_point.point.x = 0.3;
        laser_point.point.y = 0.0;
        laser_point.point.z = 0.0;     
        try{
            // 等待获取监听信息base_link和base_laser
            listener.waitForTransform("base_link", "base_laser", ros::Time(0), ros::Duration(3.0));
            geometry_msgs::PointStamped base_point;
            listener.transformPoint("base_link", laser_point, base_point);

            ROS_INFO("base_laser: (%.2f, %.2f. %.2f) -----> base_link: (%.2f, %.2f, %.2f) at time %.2f",
                laser_point.point.x, laser_point.point.y, laser_point.point.z,
                base_point.point.x, base_point.point.y, base_point.point.z, base_point.header.stamp.toSec());
        }
        catch(tf::TransformException& ex){
            ROS_ERROR("Received an exception trying to transform a point from \"base_laser\" to \"base_link\": %s", ex.what());
        }

        rate.sleep();
    }
    return 0;
};

다음과 같이 여기에, 우리는 생성 된 TF 파일을 모니터 :
그림 삽입 설명 여기
다음 단계는 파일 CMakeLists.txt을 수정하는 것입니다!

셋째, 수정CMakeLists.txt파일

1 엔지니어링 패키지 통신로

cd ~/ros/src/comm/

2, 열기CMakeLists.txt파일

gedit CMakeLists.txt

도 3에서CMakeLists.txtTF 파일은 코드를 컴파일하려면 다음 항목에 추가됩니다 :

add_executable(broadCaster src/broadCaster.cpp)
target_link_libraries(broadCaster ${catkin_LIBRARIES})
add_executable(robListener src/robListener.cpp)
target_link_libraries(robListener ${catkin_LIBRARIES})

으로는 다음과 같습니다 :
그림 삽입 설명 여기

4, 파일 CMakeLists.txt을 찾을find_packageTF 속성하는 함수는 다음을 추가 :

tf

으로 다음과 같습니다 :
그림 삽입 설명 여기
여기, 수행 개정에 우리의 CMakeLists.txt 파일 저장을 클릭하고 파일을 닫습니다!

넷째, 컴파일 된 프로젝트 파일

1, 작업 공간의 ROS에

cd ~/ros

2, 컴파일 된 파일

catkin_make

컴파일 진행, 오류 메시지의 지시에 따라 수정 될 수있다 성공하지 못한 경우 코드가 성공적으로 컴파일 100 %, 아래에 나타납니다 :
그림 삽입 설명 여기

(3) 등록 수속

우리가 적용하는 코드를 작성하자

 source ./devel/setup.bash

그림 삽입 설명 여기

다섯째, 테스트 실행 결과

1, ROS를 시작합니다

1) 새로운 터미널, 우리는 명령제 2 터미널그리고 시작

roscore

그림 삽입 설명 여기

2 년제 2 터미널다시 한 번, 새로운 터미널을 이동하지 않습니다 시간을 유지, 우리는 이름제 3 터미널

그림 삽입 설명 여기

도 3에서제 3 터미널ROS 작업 공간을 입력

cd ~/ros

도 4에서제 3 터미널절차 레지스터

 source ./devel/setup.bash

그림 삽입 설명 여기

5 년제 3 터미널실행 TF 리스너

다음의 코드 입력 단자 (3)에 분주 눌러 입력

rosrun comm robListener

그림 삽입 설명 여기

도 6에서터미널 1TF 방송 프로그램 실행

1)의터미널 1에 따라, 다음 명령을 입력하고 Enter 키를 누릅니다제 3 터미널변화를 관찰 입력 단자 (1) 및 (3)

rosrun comm broadCaster

실행 한 결과,도 관찰 할 수있는 것은 다음과
그림 삽입 설명 여기
도면은 단말기 (3)는 청취 base_laser의 좌표 사이 및 base_link의 관계를 얻을 수 있고, 알 수있다.
2) 가까이 실행중인 프로그램에 Ctrl + C는 등 다음 :
그림 삽입 설명 여기
위의이 블로그의 전체 내용이다, 나는 작은 파트너이 블로그는, ROS TF 프로그램이 도움이 아를 배울 희망! 오주의, 포인트 찬양, 독서 당신을 기억 감사합니다! 문제는 그것으로 문제를 논의하기 위해, 코멘트 영역 메시지 주니어 파트너가 발생했습니다! 린 6 월 노인 인내로에게 우리는 아를 해결!
첸 ^ _ ^ 월에 년 어느 날 프로그램

게시 29 개 원래 기사 · 원 찬양 19 · 전망 4476

추천

출처blog.csdn.net/qq_42451251/article/details/104772128