ros機械人的開發過程中,經常需要用到tf座標變換。簡單來講,tf定義了兩個不同座標系之間的旋轉變換關係。
1. 乙個簡單的demo
$ roslaunch turtle_tf turtle_tf_demo.launch這時候螢幕中會出現兩個turtle, 可以通過控制前面的turtle來引導後面的turtle
從上面我們可以清楚地看到三個座標系之間的關係。
我們還可以使用tf_echo來看兩個座標系之間是如何變換的
也可以通過rviz來檢視座標系的變換及移動情況。
2.寫乙個簡單的tf broadcaster程式
$ catkin_create_pkg learning_tf tf roscpp rospy turtlesim
$ catkin_make$ source ./devel/setup.bash
$ roscd learning_tfsrc/turtle_tf_broadcaster.cpp
16br
.sendtransform(tf
::stampedtransform
(transform
, ros
::time
::now
(),
"world",
turtle_name
));
這裡的後兩個引數即為父座標系和子座標系。
修改cmakelists.txt,在最後加上
add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp)target_link_libraries(turtle_tf_broadcaster $)
$ catkin_make新增
start_demo.launch
args="/turtle1" name="turtle1_tf_broadcaster" />args="/turtle2" name="turtle2_tf_broadcaster" />
$ roslaunch learning_tf start_demo.launch
$ rosrun tf tf_echo /world /turtle1
$ rosrun turtlesim turtle_teleop_key這時候移動turtle可以看到座標系的變化
3.寫乙個簡單的tf listener
$ roscd learning_tfsrc/turtle_tf_listener.cpp
25這個**段將座標係由turtle1變換成turtle2。try
35根據與turtle1的距離和角度差來計算turtle2的線速度和角速度。geometry_msgs::twist
vel_msg;
36vel_msg.angular.z = 4.0 * atan2(transform.getorigin().y(),
37transform.getorigin().x());
38vel_msg.linear.x = 0.5 * sqrt(pow(transform.getorigin().x(), 2) +
編寫cmakelists.txt
add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)target_link_libraries(turtle_tf_listener $)
$ catkin_make編寫launch 檔案,在原launch的後面新增
name="listener" />啟動
$ roslaunch learning_tf start_demo.launch同樣,通過啟動鍵盤控制前面的turtle1可以控制後面的turtle2
在這裡需要注意的是,有可能回出現如下錯誤
[error] [1505742896.803000722]: "turtle2" passed to lookuptransform argument target_frame does not exist.
事實上,這並不是程式的錯誤,只是因為通訊的時延導致turtle2開始的時候無法找到turtle1,因此無法進行計算。
ROS學習之TF變換
tf能夠根據時間緩衝並維護多個參考係之間的座標變換,可以在任意時間,將點 向量 等資料的座標,完成座標變換。tf的使用方法 兩個概念了解一下 監聽tf變換 接收並快取系統中發布的所有參考係變換,並從中查詢所需要的參考係變換。廣播tf變換 向系統中廣播參考係之間的座標變換關係。系統中更能可能會存在多個...
ROS學習之tf基本用法
主要細節參見wiki,這裡我寫一下它的broadcaster和listener做個記錄 tf broadcaster.cpp include includeint main int argc,char ar 在broadcaster中我們主要描述的是兩個座標frame之間的位置關係,這裡是base ...
ROS學習之座標變換tf
即使前方荊棘滿地,也要跨上戰馬,一路前行!keep learning,keep programing ros中的座標變換主要形式為廣播和監聽,可以發布座標系a 座標系b與世界座標系的關係,可以監聽得到座標系a與座標系b之間的轉換關係,本文主要參考古月老師的教程,發布turtle1 turtle3與w...