Ros学习Day4


今天学习订阅这个话题的实现。我们要订阅这个话题是关于小海龟的位置信息。依旧是先运行roscore。然后启动小海龟节点。输入rostopic list,查看当前小海龟启动后的对应的话题。
在这里插入图片描述
我们要订阅的话题就是/turtle1/pose。具体查看某个话题,比如查看改话题的发布者(Publishers)和订阅者(Subscribers)以及话题的类型(Type),用命令:rostopic info +某个话题。这里我们输入指令
rostopic info /turtle1/pose

在这里插入图片描述
这个话题所包含是海龟的位置信息,我们可以输入指令查看里面的包含的数据类型。:

rosmsg show turtlesim/Pose

在这里插入图片描述
接下俩我们编写c++和python对应的程序。这里仍旧用的是古月居老师的例程。
具体c++代码:

#include 
#include 
//接收到订阅到的信息,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr&msg)
{
    ROS_INFO("Turtle pose:x:%0.6f,y:%0.6f",msg->x,msg->y);
}
int main(int argc,char **argv)
{
    //初始化ROS节点
    ros::init(argc,argv,"pose_subscriber");
    //创建节点句柄
    ros::NodeHandle n;
    //创建一个subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback);
    //循环等待回调函数
    ros::spin();
}

python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
########################################################################

# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
import rospy
from turtleim.msg import Pose
def poseCallback(msg):
    rospy.loginfo("Turtle pose: x:%0.6f,y:%0.6f")
def pose_subcriber():
    #ros节点初始化
    rospy.init_node('pose_subcriber',anonymous=True)
    #创建一个Subscriber,订阅名为/turtle1/pose的Topic,注册回调函数poseCallback
    rospy.Subscriber("/turtle1/pose",Pose,poseCallback)
    #循环等待回调函数
    rospy.spin()
if __name__ == '__main__':
    pose_subcriber()

运行c++程序时候我们仍然需要先往CMakelists.txt添加俩句指令:

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

所在路径如下图所示:
在这里插入图片描述
接下来切换回根文件夹,输入指令:catkin_make.等待编译成功。接下来仍旧要是环境变量生效,但每次输入过于麻烦,所以可以让环境变量生效可以往/home/bathwind你的文件夹下的隐藏文件.bashrc文件。如下图所示。
在这里插入图片描述
在保存完之后重启终端窗口。输入指令rosrun learning_topic pose_subsiber运行编译好的c++程序。
在这里插入图片描述
发现程序能够返回坐标,证明订阅话题的数据能够实现。


文章作者: WYW
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WYW !
评论
 上一篇
Ros学习Day5 Ros学习Day5
今天学习话题消息的定义和使用。首先看下实现的框架图:首先定义一个发布者,也就是图中的person_publisher作为发布者,订阅者为person_subscriber。话题为/person_info。消息为:Person。 1:定义话题
2022-01-08
下一篇 
Ros学习Day3 Ros学习Day3
今天学到了创建工作空间与功能包。具体有篇帖子总结的结构很不错,博客地址贴在这里:https://www.cnblogs.com/zhjblogs/p/15686758.html创建工作空间参考的这篇帖子以及古月老师的ROS入门21讲:htt
2022-01-03
  目录