《ROS1学习笔记4——话题通信之订阅者》 文章目录1、创建工作空间及功能包1.1、前期准备1.1.1、进入工作空间1.1.2、新建功能包1.1.2、新建c代码1.2、实现思路2、编写代码3、编译运行3.1、编辑CMakeLists文件3.1.1、检查依赖3.1.2、创建可执行文件与链接库3.2、编译3.3、改变环境变量3.4、运行代码3.4.1、启动ROS3.4.2、运行海龟节点和海龟控制节点3.4.3、订阅话题1、创建工作空间及功能包1.1、前期准备在上一篇文章中我们在编写实现了在话题通信中的发布消息这一节我们尝试订阅消息。选择在上一期创建的demo_ws工作空间下编写节点代码。1.1.1、进入工作空间右键选择用vscode打开工作空间目录或者在终端中输入 code ./ 也能直接进入vscode并打开工作空间1.1.2、新建功能包在与上一节相同的工作空间下创建一个新的功能包来编写话题订阅的代码。cd demo_ws/src catkin_create_pkg demo_topic_sub roscpp rospy std_msgs geometry_msgs turtlesim此时你的工作空间目录为1.1.2、新建c代码在src目录下右击新建cpp文件我这里取名为topic_sub.cpp1.2、实现思路初始化ROS节点订阅需要的话题循环等待话题消息接收到消息后进入回调函数在回调函数中进行消息处理2、编写代码代码如下#includeros/ros.h#includeturtlesim/Pose.hvoidposeCallback(constturtlesim::Pose::ConstPtrmsg){//将接受到的消息打印出来ROS_INFO(Turtle pose:x :%0.6f, y:%0.6f,msg-x,msg-y);}intmain(intargc,char**argv){//初始化ROS节点ros::init(argc,argv,pose_subscriber);//创建节点句柄ros::NodeHandle n;//创建一个Subscriber订阅名为/turtle1/pose的topic,注册回调函数poseCallback//订阅者不知道消息什么时候进来。相当于中断一旦有消息进来就调用回调函数ros::Subscriber pose_subn.subscribe(/turtle1/pose,10,poseCallback);//循环等待回调函数//死循环ros::spin();return0;}3、编译运行3.1、编辑CMakeLists文件3.1.1、检查依赖如果你在使用catkin_creat_pkg命令创建功能包时添加上了依赖CMakeLists中就会包括以下库依赖若没有则需手动加上。3.1.2、创建可执行文件与链接库在155行左右加上如下两句代码:add_executable(topic_sub src/topic_sub.cpp)target_link_libraries(topic_sub ${catkin_LIBRARIES})解释1、add_executable(demo_sub src/demo_sub.cpp)add_executableCMake 命令用于创建可执行文件demo_pub生成的可执行文件名称(此名称可随便取)src/demo.cpp源代码文件路径此路径以及你刚编辑的cpp文件名得正确2、target_link_libraries(demo_sub${catkin_LIBRARIES})target_link_libraries将库文件链接到可执行文件${catkin_LIBRARIES}ROS 相关的库文件集合3.2、编译在工作空间的目录下输入如下命令进行编译catkin_make没有报错且进度跑到100就是编译成功并且会显示我们工作空间下存在的两个功能包。此时还可以检查/devel/lib/demo_topic_sub目录下有无出现可执行文件并且可执行文件的名字是你刚才add_executable取的名字绿色的就是可执行文件直接展开也可以看到3.3、改变环境变量source devel/setup.bash3.4、运行代码在vscode中CtrlShift5是再打开一个终端这里打开四个终端第一个终端是我们刚编译代码的开第二个终端运行roscore开第三个终端运行海龟模拟器节点第四个终端运行海龟键盘控制节点。3.4.1、启动ROSroscore3.4.2、运行海龟节点和海龟控制节点rosrun turtlesim turtlesim_noderosrun turtlesim turtle_teleop_key3.4.3、订阅话题rosrun [功能包名] [可执行文件名]rosrun demo_topic_sub demo_sub此时终端里开始打印小海龟的位置信息x和有的坐标此时你也可以将鼠标放在运行海龟键盘控制的终端里使用键盘控制海龟运动你会发现坐标在实时变化

相关新闻

最新新闻

Navicat Premium for Mac 终极重置指南:3种简单方法恢复14天免费试用

Navicat Premium for Mac 终极重置指南:3种简单方法恢复14天免费试用

Navicat Premium for Mac 终极重置指南:3种简单方法恢复14天免费试用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac …

2026/8/8 15:29:23
Recaf:掌握Java字节码编辑与分析的终极指南

Recaf:掌握Java字节码编辑与分析的终极指南

Recaf:掌握Java字节码编辑与分析的终极指南 【免费下载链接】Recaf The modern Java bytecode editor 项目地址: https://gitcode.com/gh_mirrors/re/Recaf 你是否曾经好奇Java程序在编译后究竟发生了什么?那些.class文件里隐藏着什么秘密&#x…

2026/8/8 15:29:23
网盘直链下载助手:告别限速烦恼的9大网盘高速下载解决方案

网盘直链下载助手:告别限速烦恼的9大网盘高速下载解决方案

网盘直链下载助手:告别限速烦恼的9大网盘高速下载解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

2026/8/8 15:29:23
如何10分钟掌握sqliteviz:浏览器端SQL数据可视化终极指南

如何10分钟掌握sqliteviz:浏览器端SQL数据可视化终极指南

如何10分钟掌握sqliteviz:浏览器端SQL数据可视化终极指南 【免费下载链接】sqliteviz Instant offline SQL-powered data visualisation in your browser 项目地址: https://gitcode.com/gh_mirrors/sq/sqliteviz 在当今数据驱动的时代,拥有一个浏…

2026/8/8 15:29:23
3步轻松掌握:智慧教育平台电子课本下载终极方案

3步轻松掌握:智慧教育平台电子课本下载终极方案

3步轻松掌握:智慧教育平台电子课本下载终极方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: http…

2026/8/8 15:29:23
5个关键步骤:从零掌握Mission Planner开源无人机地面站

5个关键步骤:从零掌握Mission Planner开源无人机地面站

5个关键步骤:从零掌握Mission Planner开源无人机地面站 【免费下载链接】MissionPlanner Mission Planner Ground Control Station for ArduPilot (c# .net) 项目地址: https://gitcode.com/gh_mirrors/mi/MissionPlanner 想要完全掌控你的无人机飞行体验吗&…

2026/8/8 15:24:22