【ros实验一】使用ros话题机制实现消息发布与订阅,并分别封装成launch文件(python)

目录

一,创建工作空间(略)

(1)创建功能包

(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下

二,话题通信——实现消息的发布与订阅

 (1)配置cmake和package相关文件

1.package.xml

2.cmakelists.txt

(2)publisher

1.创建python文件

2.编辑python文件

3.运行代码

(3)subscriber

1.创建python文件

2.编辑python文件

三,完成消息的发布与订阅

把消息发布与订阅封装成launch


一,创建工作空间(略)

(1)创建功能包

在catkin_ws的src文件夹中打开终端并输入以下指令
创建功能包并且添加依赖

catkin_create_pkg task_topic roscpp rospy std_msgs geometry_msgs

(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下

定义一个字段来存储斐波那契数列的值

int32 value

二,话题通信——实现消息的发布与订阅

 (1)配置cmake和package相关文件

1.package.xml

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

2.cmakelists.txt

message_generation

xxx处修改成自己的文件名

add_message_files(FILES xxx.msg)
generate_messages(DEPENDENCIES std_msgs)

删除CATKIN_DEPENDS的注释并且添加下面的依赖

message_runtime

(2)publisher

1.创建python文件

touch task_topic_publisher.py

小陷阱:如果你的Python脚本与包名同名,并且位于该包的某个子目录中,Python可能会混淆脚本和包,导致出现导入问题。考虑将脚本重命名或将它移动到一个与包名不同的目录下。

2.编辑python文件

根据自己文件的命名更改对应地点的名称就好了,注意大小写,注意python也需要catkin_make一下

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

# 该例程将发布/fibonacci_info话题,自定义消息类型task_topic::Fibonacci

import rospy
from task_topic.msg import Fibonacci


def fibonacci_publisher():
    # ROS节点初始化
    rospy.init_node('fibonacci_publisher', anonymous=True)

    # 创建一个Publisher,发布名为/fibonacci_info的topic,消息类型为task_topic::Fibonacci,队列长度10
    fibonacci_info_pub = rospy.Publisher('/fibonacci_info', Fibonacci, queue_size=10)

    # 设置循环的频率
    rate = rospy.Rate(10)

    # 初始化数列的前两项
    a, b = 0, 1
    while not rospy.is_shutdown():
        # 初始化task_topic::fibonacci类型的消息
        fibonacci_msg=Fibonacci()
        fibonacci_msg.data=b

        # 发布消息
        fibonacci_info_pub.publish(fibonacci_msg)
        rospy.loginfo("Published fibonacci number: %d", b)

        # 更新斐波那契数列中的数字
        a, b = b, a + b

        # 按照循环频率延时
        rate.sleep()


if __name__ == '__main__':
    try:
        fibonacci_publisher()
    except rospy.ROSInterruptException:
        pass

3.运行代码

记得一定要给予python文件可执行权限

catkin_make

catkin_make 简介(建议有事没事跑代码时候都运行一下)

catkin_make 是 ROS 构建系统 catkin 的命令行工具,用于构建 ROS 包。当你在 ROS 工作区中运行 catkin_make 时,它会处理工作区中所有包的构建过程。以下是 catkin_make 所执行的基本操作:

  1. 配置构建环境catkin_make 首先确定构建环境,并为构建准备 CMake 配置。

  2. 处理消息、服务和动作定义:如果你的 ROS 包中定义了消息 (msg 文件)、服务 (srv 文件) 或动作 (action 文件),catkin_make 会自动生成必要的源代码文件 (例如 Python、C++ 等) 以便你在 ROS 节点中使用这些消息、服务和动作。

  3. 构建源代码catkin_make 会编译工作区中的所有 C++ 源代码,并确保它们正确地链接了所有必要的库。如果你的工作区中有 Python 代码,它通常不需要“编译”,但 catkin_make 会确保它们在合适的位置,以便在 ROS 环境中运行。

  4. 更改CMakeLists.txtpackage.xml:如果你修改了任何包的CMakeLists.txtpackage.xml,你应该执行catkin_make来确保所有更改都被正确地应用。

  5. 添加新的依赖或包:当你在工作区中添加新的包或新的依赖时,应该执行catkin_make

总的来说,catkin_make 是一个自动化的构建工具,用于处理 ROS 包的构建和安装过程,确保所有的代码、消息、服务和依赖都被正确地处理和编译。

rosrun task_topic task_topic_publishier.py

                                                             预期结果

(3)subscriber

1.创建python文件

touch task_topic_subscriber.py

2.编辑python文件

根据自己文件的命名更改对应地点的名称就好了,注意大小写,注意python也需要catkin_make一下

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

# 该例程将订阅/person_info话题,自定义消息类型learning_topic::Person

import rospy
from task_topic.msg import Fibonacci

def fibonacciInfoCallback(msg):
    rospy.loginfo("Subcribe fibonacci Number: %d",msg.data)

def fibonacci_subscriber():
	# ROS节点初始化
    rospy.init_node('fibonacci_subscriber', anonymous=True)

	# 创建一个Subscriber,订阅名为/fibonacci_info的topic,注册回调函数fibonacciInfoCallback
    rospy.Subscriber("/fibonacci_info", Fibonacci, fibonacciInfoCallback)

	# 循环等待回调函数
    rospy.spin()

if __name__ == '__main__':
    fibonacci_subscriber()

三,完成消息的发布与订阅

rosrun task_topic task_topic_publishier.py
rosrun task_topic task_topic_subscriber.py


把消息发布与订阅封装成launch

<launch>
    <node pkg="task_topic" type="task_topic_subscriber.py" name="subscriber"output="screen" />
    <node pkg="task_topic" type="task_topic_publisher.py" name="publisher" output="screen" /> 
</launch>
catkin_make
roscore
roslaunch task_topic task_topic_7.launch

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS(Robot Operating System)是一个用于机器人开发的开源软件平台,它提供了一套完整的工具链,包括硬件驱动、通信中间件、算法库等,方便开发者快速构建机器人应用。 在ROS中,话题(Topic)是一种常用的通信机制,它可以用于不同节点之间的消息传递。下面是ROS话题通信的基本流程: 1. 编写发布节点(Publisher Node):发布节点负责向特定话题发送消息。通常情况下,发布节点会通过ROS API接口来实现消息发布。 2. 编写订阅节点(Subscriber Node):订阅节点负责从特定话题接收消息。与发布节点类似,订阅节点也会通过ROS API接口来实现消息订阅。 3. 创建话题(Topic):话题发布节点和订阅节点之间的通信媒介。在ROS中,话题是通过ROS Master进行管理的。发布节点需要告诉ROS Master它将要发布话题名和消息类型,而订阅节点需要告诉ROS Master它将要订阅话题名和消息类型。 4. 运行发布节点和订阅节点:发布节点和订阅节点可以在同一台计算机上运行,也可以在不同的计算机上运行。不同计算机上的节点可以通过ROS Master进行连接。 5. 发布消息发布节点向特定话题发送消息消息可以是预定义的ROS消息类型,也可以是自定义的消息类型。 6. 接收消息订阅节点从特定话题接收消息,接收到的消息可以被处理或传递给其他节点。 7. 关闭节点:当发布节点或订阅节点完任务后,它们应该被正确关闭,以释放资源和关闭与ROS Master的连接。 以上就是ROS话题通信的基本流程。通过话题通信,不同节点之间可以实现实时的消息传递和数据共享,方便机器人应用的开发和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值