TF添加额外坐标系
在以前的教程中,通過添加TF廣播器和TF監聽器來重現小海龜演示。本教程將教你如何向TF樹添加一個額外的坐標框架。這非常類似于創建TF廣播,并且會顯示TF的一些功能。對于許多任務系統來說,在局部框架內更容易理解,例如激光掃描儀的中心位置就是就是掃描儀的frame,TF可以允許為在系統中的每一個傳感器定義一個局部的坐標系,TF 會為每一個坐標系提供一個轉換功能。
TF 是為坐標系建立一個樹形結構,但是這個樹形結構是不允許回環的,意思就是一個完整的TF樹只允許有一個父框架,可以擁有很多個子框架。如圖這個TF結構是有三個框架的:world,turtle1,和turtle2,這兩個turtle都是world框架的子框架,倘若我們需要添加新的子框架的那么這turtle1或者turtle2就成為新添加的子框架的父框架。
那么具體如何在一個TF樹結構中添加新的frame呢?
(1)還是接著在之前創建的my_tf的文件src下創建一個新的文件命名為frame_tf_broadcaster.cpp,添加如下的代碼
//這個文件的寫法與之前的tf的廣播的寫法有些類似的#include <ros/ros.h>
#include <tf/transform_broadcaster.h>int main(int argc, char** argv){ros::init(argc, argv, "my_tf_broadcaster");ros::NodeHandle node;tf::TransformBroadcaster br; //定義一個廣播tf::Transform transform; //定義一個transfromros::Rate rate(10.0); while (node.ok()){transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) ); //設定transform的坐標原點 ,,從這里可以想像一下,x,y,z只有Y 是寫成2.0可以很明顯的想到transform.setRotation( tf::Quaternion(0, 0, 0, 1) ); //設置transform的方向的角度br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "turtle1", "carrot1"));rate.sleep();}return 0;
};
(2)打開CMakeList.txt添加編譯
add_executable(frame_tf_broadcaster src/frame_tf_broadcaster.cpp)
target_link_libraries(frame_tf_broadcaster ${catkin_LIBRARIES})
(3)catkin_make
(4)在Launch文件中添加
<node pkg="learning_tf" type="frame_tf_broadcaster"name="broadcaster_frame" />
(5)roslaunch my_tf start_demo.launch
會發現小烏龜的變化
可以看見兩只烏龜的在Y軸的方向上相距2cm這就可以理解為什么程序中為什么是(0.0,2,0.0)了
總結
- 上一篇: 《概率机器人》里程计运动模型gmappi
- 下一篇: Gmapping 乱七八糟