首页 > 编程语言 >[ROS学习]7. 订阅者Subscriber的编程实现

[ROS学习]7. 订阅者Subscriber的编程实现

时间:2022-08-27 20:56:15浏览次数:70  
标签:subscriber pose 代码 编程 Subscriber 编译 ROS

笔记参考:【ROS学习笔记】7.订阅者Subscriber的编程实现(C++和Python)

基于B站ROS公开课:【古月居】古月·ROS入门21讲
基于Ubuntu 20.04.1、Noetic版本
(部分图摘自:b站【古月居】古月·ROS入门21讲;文本参考:上述链接)

1 模型图

ROS Master管理两个主要节点:
Publisher,海龟仿真器/turtlesim
Subscriber,名为Pose Listener
这次海龟仿真器turtlesim为Publisher,发布Message(传输的是动作信息,以数据结构
turtlesim::Pose发布),通过Topic(/turtle1/pose)的管道,将数据传输给Subscriber。Subscriber订阅得到的数据,获得Pose信息。

“/turtle1/pose”这个topic是海归仿真器节点/turtlesim下自带的topic,直接拿来用。

2 创建功能包

我们之前已经创建了工作空间和功能包learning topic了。
直接上代码。

3 创建Subscriber代码(C++)

如何实现一个Subscriber:

  • 初始化ROS节点
  • 订阅需要的话题
  • 循环等待话题消息,接收到消息后进入回调函数
  • 在回调函数中完成消息处理

我用红字标上了代码讲解。

4 编译代码(C++)

有了代码,接下来编译。

配置代码编译规则

配置CMakeLists.txt中的编译规则:

  • 设置需要编译的代码和生成的可执行文件
  • 设置链接库

将下列代码拷贝至CMakeLists.txt中:
直接加到之前那两行下面即可

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

执行编译

回到工作空间目录,执行编译.cd ~/catkin_ws, catkin_make

source 一下 setup.bash

source devel/setup.bash放入环境变量.bashrc中,之前已完成。

运行

打开终端,分别运行:

roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber

这时海龟的位置就会一直被pose_subscriber监听,现在因为海龟没动,所以x、y的坐标值是不会变的。

我们让海龟动起来,再建立一个之前用过的键盘控制节点:

rosrun turtlesim turtle_teleop_key

控制它移动,坐标就发生实时变化啦!

5 Python实现

创建Python代码

源码拷贝到scripts下。
我用红字标上了代码讲解。

注意:右击文件→属性,打开执行权限。

配置环境:这步可以直接省略;直接用rosrun learning_topic pose_subscriber.py

配置一下CMakeLists.txt中的编译规则:
之前已将文件中的catkin_install_python这段取消注释,并将默认的my_python_script改成了velocity_publisher.py。
这次再加上一个关于pose_subscriber.py的catkin_install_python方法

然后:

source 一下 setup.bash(省略)

roscore/rosrun..../rosrun learning_topic pose_subscriber.py

标签:subscriber,pose,代码,编程,Subscriber,编译,ROS
From: https://www.cnblogs.com/gentlejan/p/16631447.html

相关文章

  • Netty网络编程-服务端启动
    1、Netty的Handler模型2、服务端代码示例根据模型图可以更好的理解ServerBootstrap引导类设置Netty的属性。publicclassTimeServer{privateintport;pub......
  • Go并发编程实战 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1YJh-LYhg-Eb4nPtwPDqusQ点击这里获取提取码本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语......
  • JavaSE-Day02-面向对象编程
    面向对象编程OOP面向对象和面向过程对于描述复杂的事务,从宏观上需要面向对象的思路,具体到微观,仍然需要面向过程的思路面向过程——第一步做什么,第二部做什么......面......
  • JUC并发编程进阶!!
    目录1.知识点回顾及延伸2.生产者消费者问题3.八锁问题4.集合类线程不安全解决5.Callable再理解6.三大常用辅助类6.1、CountDownLatch6.2、CyclicBarrier6.3、Semaphore7.......
  • 美团秋招笔试四道编程题(第一场)
    第一题小美是美团的一名鲜花快递员,鲜花是一种保质期非常短的商品,所以需要尽快送到客户手中,公司对于骑手的一个要求就是要规划送花的线路,使得骑手送完所有订单走的路程尽可......
  • HCIA-datacom 8.1 网络编程与自动化基础
    前言:把今天的python讲完,我们的所有HCIA-datacom的实验就做完了,但是这就够了吗?不够的,我们还需要做一个综合实验。但是综合实验,我就不会像前面讲解的这么细致了,因为如果你不......
  • flask socket cros
    flasksocketcroshttps://flask-socketio.readthedocs.io/en/latest/api.html......
  • 链式编程的总结以及在生产环境的应用
    链式编程是将多个操作通过点号"."链接在一起成为一个整体,从而更加的简洁方便。链式编程的原理就是每个操作完成后都会返回一个this对象,也就是返回对象本身!在生产实际环境的......
  • cross
    Acrossisageometricalfigureconsistingoftwointersectinglinesorbars,usuallyperpendiculartoeachother.Thelinesusuallyrunverticallyandhorizon......
  • 斯坦福CS107 编程范式07
    探索,使用栈的定义,定义一个通用类型的栈来存储一系列的字符串,并把它们以相反的顺序打印出来。 typedefstruct{void*elems;intelemSize;intloglength......