ROS学习笔记(8)——话题通信(Python篇)

一、编写话题发布文件

        (1)在功能包目录下新建一个scripts文件夹用于存放python文件,在scripts文件夹下新建一个python文件,命名为demo01_pub_p.py,编写程序:

#! /sur/bin/env python

import rospy
from std_msgs.msg import String  #发布的消息类型
"""
    使用python实现消息发布:
    1.导包
    2.初始化ROS节点
    3.创建发布者对象
    4.编写发布逻辑并发布数据

"""
if __name__=="__main__":

    #2.初始化ROS节点
    rospy.init_node("fabuzhe02")
    #3.创建发布者对象
    pub = rospy.Publisher("huati02",String,queue_size=10)
    #4.编写发布逻辑并发布数据
    msg = String()
    #指定发布频率
    rate = rospy.Rate(1)
    #设置计数器
    count = 0
    #使用循环发布数据
    while not rospy.is_shutdown():
        count += 1
        msg.data = "hello" + str(count)
        #发布数据
        pub.publish(msg)
        #日志输出
        rospy.loginfo("发布的数据是:%s",msg.data)
        #延迟一秒
        rate.sleep()

(2)保存文件后,打开终端,输入指令赋予文件权限:

chmod +x *.py

(3)打开与功能包同级的CMake.Lists.text文件,去掉catkin_install_python一栏的注释,并修改文件名为自定义python文件文件名。

(4)保存后,按快捷键编译执行。

(5)配置环境,运行程序:

source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py

话题内容成功打印在屏幕上,话题发布程序无问题。

二、编写话题订阅文件

(1)在scripts文件夹下新建一个Python文件命名为demo02_sub_p.py,编写订阅文件代码:

#! /sur/bin/env python

import rospy
from std_msgs.msg import String  #发布的消息类型
"""
    使用python实现消息订阅:
    1.导包
    2.初始化ROS节点
    3.创建订阅者对象
    4.编写回调函数处理数据
    5.spin()
"""
def doMsg(msg):
    rospy.loginfo("我订阅的数据:%s",msg.data)

if __name__=="__main__":

    #2.初始化ROS节点
    rospy.init_node("dingyuezhe02")
    #3.创建订阅者对象
    sub = rospy.Subscriber("huati02",String,doMsg,queue_size=10)
    #4.编写回调函数处理数据
    #5.spin()
    rospy.spin()

(2)保存文件后,打开与功能包同级的CMake.Lists.text文件,修改文件名:

catkin_install_python(PROGRAMS
  scripts/demo02_sub_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

(3)编译保存后,启动roscore核心,分别运行demo01_pub_p.py以及demo02_sub_p.py文件,结果如下:

运行成功,无报错。

三、节点通信

在ROS系统中,C++和Python之间可以进行话题通信,只需要话题名称相同即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值