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

2024-08-25 06:32
文章标签 广播 tf 放弃 gmapping

本文主要是介绍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 广播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104803

相关文章

android面试:如何理解 Android 中的广播?

在 Android 中,广播是一种用于在应用程序之间传递消息的机制。它允许应用程序发送和接收全局消息,通常用于通知其他应用或组件某些事件的发生。广播可以是系统广播(由系统发送)或自定义广播(由应用程序发送)。 广播的主要特点: 异步通信:广播是一种异步的通信方式,发送广播的应用不需要等待接收应用的响应。 全局可见:广播可以被系统中的任何应用程序接收,适合用于跨应用的消息传递。 轻量级:广播

【深度学习 走进tensorflow2.0】TensorFlow 2.0 常用模块tf.config

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 本篇文章将会教大家如何 合理分配显卡资源,设置显存使用策略。主要使用tf.config模块进行设置。下面我们一起了解下具体用法和例子。 一、指定当前程序使用的 GPU 例如,在一台具有 4 块 GPU 和一个 C

Android 接收系统广播,开机启动Service,SMS,Battery

本文内容摘自《疯狂Android讲义 第3版》李刚 著 自动开启的Service: package shortcut.song.com.myapplication;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;im

Android Ordered Broadcast 有序广播

代码设置IntentFilter: IntentFilter intentFilter = new IntentFilter();intentFilter.setPriority(15);intentFilter.addAction("shortcut.song.com.myapplication.MY_BROADCAST");intentFilter.addCategory

Android BroadcastRecevier广播消息

代码注册Receiver @Overrideprotected void onCreate(Bundle savedInstanceState) {IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("");MyBroadcast myBroadcast = new MyBroadcast();regi

2024全球广播摄像机市场前景如何?IP网络化云端融合趋势加强

一、前言 当前,全球广播电视用户持续向流媒体迁移。大多数国家广播电视台推出独立流媒体平台,流媒体趋势日渐加强。与奈飞等非广电系流媒体平台只提供点播服务不同,广电系流媒体平台一般提供电视频道直播服务、电视回看服务、视频点播服务,与传统电视渠道形成互补,而这些流媒体平台与网络媒体平台所能提供的视频服务存在着非常重合的区域。 (1)流媒体时代加速广播摄像机专业影视化发展 全球广电系流媒体平台竞争力

单播、广播、多播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上

RocketMQ广播消费消息

1、 基础概念 RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。 集群消费模式(Cluster): 在集群消费模式下,同一个消费者组(Consumer Group)中的每个消费者都会消费消息的一个副本。消息会被分发到不同的消费者实例上,但是同一个消息只会被同一个消费者组中的一个消费者消费。 广播消费模式(Broadcast)

gmapping 实现过程和数据走向

全局地图坐标系gmap_pose数据处理过程 初始化Map位姿 初始化地图坐标map:map是不会变化的,是gmapping 程序启动的位置姿态就是地图的原地 // 地图原点设置为激光中心位置 启动程序时,设置原点GMapping::OrientedPoint gmap_pose(0, 0, 0); 激光初始化里程计的位姿 // 获取初始姿态GMapping::Oriented

IOS消息分发(广播)机制

在IOS中,提供了通知机制(Notification),可以在对象间传递和接受信息。传递和接受信息的对象间甚至不需要知道对方的存在。究其本质来说,其实是设计模式中的观察者模式的应用。 通知机制 设想这么一个场景:我开发了一款pdf阅读器,当手机上的另一个App打开pdf文件时,通过Open in,选择我的pdf阅读器打开。这时候我的pdf阅读器会被lanuch,同时在其App deleg