日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Gmapping从开始到放弃—写一个TF 广播

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gmapping从开始到放弃—写一个TF 广播 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個關于實現把機器人的位姿廣播到TF中,這是對ROS 有一定的熟悉之后教程
(1)cd catkin_ws/src 進入我們的ROS 的工作空間
(2)catkin_create_pkg my_tf tf roscpp rospy turtlesim 這一句是新建一個ROS 的包,也就是一個ROS的工程,并添加他的依賴項,主要依賴tf和C++以及你可以使用python開發

(3) cd %YOUR_CATKIN_WORKSPACE_HOME%/
(4)catkin_make 編譯一次
(5)source ./devel/setup.bash
然后在my_tf的src文件下新建一個文件,可以自由命名 但是后面也是要用的,這里就命名是turtle_tf_broadcaster.cpp
添加以下程序

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>std::string turtle_name;void poseCallback(const turtlesim::PoseConstPtr& msg){static tf::TransformBroadcaster br;//定義一個廣播,相當于發布話題時定義一個發布器broadcastertf::Transform transform;//定義存放轉換信息(平動,轉動)的變量transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) ); //設置坐標原點 2D位置并轉換為3D位置,添加了一個z系,但是設為0.0tf::Quaternion q;  //聲明一個四元數q.setRPY(0, 0, msg->theta); //這里因為turtlesim在二維平面所以只有RPYYaw的信息,其他兩個都設置為0transform.setRotation(q); //設置旋轉也就是把RPY信息轉為四元數br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));//將變換廣播出去 發布到tf廣播中 StampedTransform四個參數我們可以知道 transform的setOrigin 和 setRotation就是設置小烏龜的位姿,Time時間戳也就是現在的時間, “world”我們需要將創建的link的父框架的名字傳輸過去,在這個例子中是world,最后,我們需要將創建的link的子框架的名字傳輸過去,在這里就是turtle本身}int main(int argc, char** argv){ros::init(argc, argv, "my_tf_broadcaster"); ////初始化ros,命名節點為my_tf_broadcasterif (argc != 2){ROS_ERROR("need turtle name as argument"); return -1;};turtle_name = argv[1];  //烏龜的名字可以輸入ros::NodeHandle node; ////NodeHandle是與ROS系統交流的最主要的接入點,是一個句柄ros::Subscriber sub = node.subscribe(turtle_name+"/pose", 10, &poseCallback);////從master訂閱某烏龜的“/pose”話題,當消息到來時,即當烏龜位置改變時產生新的消息時,ROS將會調用poseCallback ros::spin();return 0;
};

總結: 假設你在機器人上應用,如果你知道機器人的位置x,y,z,與三個旋轉角roll,pitch,yaw就可以廣播一個tf了,如果在是平面移動機器人,則只需要知道x,y與yaw即可
(6)在CMakeLists.txt添加如下的兩行

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

(7)catkin_make 編譯
編譯完成之后,會發現會生成一個二進制文件,這個文件就是生成的可執行文件
(8)在my_tf文件下新建一個文件命名為launch之后新建一個命名為
start_demo.launch,并把下面的這段代碼復制進去

<launch><!-- Turtlesim Node--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><!-- 解釋一下,這個是啟動小烏龜的--><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/><!-- 這是啟動移動小烏龜需要控制的鍵盤--><!-- Axes --><param name="scale_linear" value="2" type="double"/><param name="scale_angular" value="2" type="double"/>
<!-- 以上是對小烏龜的線速度和角速度的一個尺度的參數 --><node pkg="my_tf" type="turtle_tf_broadcaster"args="/turtle1" name="turtle1_tf_broadcaster" /><node pkg="my_tf" type="turtle_tf_broadcaster"args="/turtle2" name="turtle2_tf_broadcaster" />
<!-- 是程序中我們需要輸入的需要創建的link的子框架的名字傳輸過去--></launch>

(9)運行此程序
roslaunch learning_tf start_demo.launch

(10 )箭頭按鍵就可以移動小烏龜,我們可以監聽TF廣播
rosrun tf tf_echo /world /turtle1


還有一篇在博客園的TF總結:
http://www.cnblogs.com/li-yao7758258/p/7672521.html

總結

以上是生活随笔為你收集整理的Gmapping从开始到放弃—写一个TF 广播的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。