目录

话题通信发布方实现

发布者代码实现

scripts文件添加可执行权限

配置编译文件

验证发布者是否能够运行

话题通信订阅方实现

订阅者代码实现

配置编译文件

ROS中Python代码实现话题通信结果演示


python发布tf python发布ros话题_python发布tf

话题通信发布方实现

流程:

1、编写发布方实现;

2、编写订阅方实现;

3、编辑配置文件;

4、编译并执行;

具体实现:

创建一个工作空间

首先创建一个工作空间以及一个src子目录,然后再进入工作空间调用catkin_make命令编译

mkdir -p demo01_ws/src

cd demo01_ws/

catkin_make

 启动VScode

code .

右键点击src,点击Create Catkin Package

python发布tf python发布ros话题_数据_02

输入

plumbing_pub_sub
roscpp rospy std_msgs

在plumbing_pub_sub功能包中的src中新建Python功能包目录 scripts

再到scripts中新建demo01_pub_p.py

发布者代码实现

#! /usr/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("sanDai")  #传入节点名称

    #3.创建发布者对象;
    pub = rospy.Publisher("che",String,queue_size=10)

    #4.编写发布逻辑并发布数据;
    #创建数据
    msg=String()
    #指定发布频率
    rate = rospy.Rate(1)
    #设置计算器
    count = 0
    #先休眠一会,度过pub连接roscore这段时间
    rospy.sleep(3)
    #使用循环发布数据
    print("aa")
    while not rospy.is_shutdown():
        count += 1
        msg.data = "hello" + str(count)
        #发布数据
        pub.publish(msg)
        #设置日志
        rospy.loginfo("发布的数据:%s",msg.data)
        rate.sleep()#休眠一秒中然后醒过来

scripts文件添加可执行权限

右键点击scripts打开终端

chmod +x *.py

配置编译文件

打开plumbing_pub_sub文件中的CMakeLists.txt

找到

# catkin_install_python(PROGRAMS

# scripts/my_python_script

# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

# )

将其修改为

catkin_install_python(PROGRAMS

scripts/demo01_pub_p.py

DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

)

Shift+Alt+B编译一下


验证发布者是否能够运行

开三个终端

roscore
cd demo03_ws
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py
cd demo03_ws
source ./devel/setup.bash
rostopic echo che

话题通信订阅方实现

在scripts中新建python文件demo01_sub_p.py

订阅者代码实现

#! /usr/bin/env python
import rospy
from std_msgs.msg import String 
"""
    订阅实现流程:
    1.导包;
    2.初始化ROS节点;
    3.创建订阅者对象
    4.回调函数处理数据;
    5.spin()
"""

def doMsg(msg):
    rospy.loginfo("我订阅的数据:%s",msg.data)

if __name__ == "__main__":
    #2.初始化ROS节点;
    rospy.init_node("lala")
    #3.创建订阅者对象
    sub = rospy.Subscriber("che",String,doMsg,queue_size=10)
    #4.回调函数处理数据;
    
    #5.spin()
    rospy.spin()

配置编译文件

找到CmakeLists.txt文件

找到

scripts/demo01_pub_p.py

在其后添加

scripts/demo02_sub_p.py

ROS中Python代码实现话题通信结果演示

 开三个终端

roscore
cd demo03_ws
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py
cd demo03_ws
source ./devel/setup.bash
rosrun plumbing_pub_sub demo02_sub_p.py

 出现下图所示则表明话题通讯成功

python发布tf python发布ros话题_python发布tf_03