ROS TF -----放送番組とリスニングロボット座標変換

TFプログラミング:放送と変換ロボット座標リスニング

例:放送とリスニングは、変換ロボット座標、座標系シャーシにライダーデータの座標値を解決する既知の座標関係レーザレーダやロボットシャーシ、?
ここに画像を挿入説明
TF ROSプログラミングが埋め込まれた高度な学習、ヘルプ、私たちはリアルタイムでロボットの動きを理解し、位置情報を取得し、TFのプログラミングを学ぶため、TF機能パックの私たちの指導のためである、ROS TFパッケージの機能は何ですか?
TF機能パックのROS:
TFの機能パッケージは、放送を変換した座標変換関係としてTFのTF変換を聞くことができる:
世界との関係は、ロボットのローカル座標系に対する座標系。
ロボット座標系ロボット中心の位置に対して物体を把持する。
ロボットセンターは、グローバル座標系に対するシステムの相対位置を調整します。
ブログ、我々はそれを見て、言葉は言いませんが、上記のTFのプログラミング例を学ぶために来て!

セットのTF放送局

1、プロジェクトのパッケージに

cd ~/ros/src/comm/src

注:ROSのROSは、ああ、その変更に応じて、私の作業スペース、COMM自身の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リスナーファイルを作成します。1.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、エンジニアリングパッケージCOMMへ

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、中ターミナル3ROSのワークスペースを入力します。

cd ~/ros

4、中ターミナル3手続きレジスタ

 source ./devel/setup.bash

ここに画像を挿入説明

5、中ターミナル3ファイル名を指定して実行TFリスナー

次のコード入力端子3では、忙しい入力し、Enterキーを押します

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月の高齢者の忍耐、私たちはああを解決するよう!
陳月に年と1日をプログラミング^ _ ^

公開された29元の記事 ウォン称賛19 ビュー4476

おすすめ

転載: blog.csdn.net/qq_42451251/article/details/104772128