目录

1. 创建发布者

 2.改CMakeLists.txt中的catkin_install_python()调用

3.改好后,回到vscode你创建的工作空间下编译,Ctrl+Shift+B


 

前面步骤一样,建功能包,建立scripts文件夹,建立发布者文件.py 

1. 创建发布者

简单的发布者格式

#! /usr/bin/env python
# _*_ coding:utf-8 _*_  #为了告诉python解释器,按照utf-8编码读取源代码,否则,你在源代码中写的中文输出可能会由乱码

import rospy     #1.导包
from std_msgs.msg import String #std_msgs.msg的导入则是为了使我们能够重用std_msgs/String消息类型
                                #(即一个简单的字符串容器)来发布。即发布消息的类型
"""
    使用 python 实现消息发布:

        1.导包
        2.初始化ROS节点
        3.创建发布者对象
        4.编写发布逻辑并发布数据

"""

if __name__ == "__main__":             #程序主入口
    #2.初始化ROS节点
    rospy.init_node("fanbuzhe")    #设置节点名称 
    #3.创建发布者对象
    pub = rospy.Publisher("che",String,queue_size=10)   #"话题名称",发布消息的类型(这里是上面导入的String),存储容量是10(或者是长度)
    #4.编写发布逻辑并发布数据

    #创建数据
    msg = String() ##创建 msg 对象
    #使用循环发布数据
    while not rospy.is_shutdown():      #not rospy.is_shutdown() ;  rospy.is_shutdown() 判断节点是否关闭,关闭-》1;没有关闭-》0
                                        #所以 not rospy.is_shutdown() :节点打开-->1  ;关闭-->0  没有关闭执行while发布数据
    msg.data = "hello"
    #发布数据
    pub.publish(msg)

编好发布者文件后给执行权限chmod +x *.py  ,给好权限后可以  ll 看一下是否成功

ros2 python ds证据推理 ros发布话题 python_开发语言

 2.改CMakeLists.txt中的catkin_install_python()调用

大概在162行,全部选中Ctrl+/  取消注释

catkin_install_python(PROGRAMS
  scripts/my_python_script
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
 

catkin_install_python(PROGRAMS
  scripts/xxx(改成你要运行的python发布者文件名)
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

3.改好后,回到vscode你创建的工作空间下编译,Ctrl+Shift+B

没有报错则表示编写成功 

ros2 python ds证据推理 ros发布话题 python_数据_02

 Ctrl+Alt+T打开一个新窗口(或者可以在vscode里面打开都一样)输入roscore

ros2 python ds证据推理 ros发布话题 python_python_03

1.试运行一下发布者中的节点

rosrun+功能包名+python文件名

发现报错,没有找到这个功能包,我想是否是因为没有source,source刷新了一下再尝试了成功了。因为发布者里面没有任何打印输出,结果就是如下图 

ros2 python ds证据推理 ros发布话题 python_导包_04

 不是很清楚,可以再试试这个指令

rostopic echo /topic(文件中你创建的话题名称)

将话题对应的消息输出到屏幕

rostopic echo che

输出 

data: "hello"
---
data: "hello"
---
data: "hello"
---
data: "hello"
---
data: "hello"
---
data: "hello"
---
data: "hello"

Ctrl+C #终止进程/命令

到这里就可以说明发布者编写成功了。

进阶版:加上了频率,也可以打印输出

#! /usr/bin/env python
# _*_ coding:utf-8 _*_  #为了告诉python解释器,按照utf-8编码读取源代码,否则,你在源代码中写的中文输出可能会由乱码

import rospy     #1.导包
from std_msgs.msg import String #std_msgs.msg的导入则是为了使我们能够重用std_msgs/String消息类型
                                #(即一个简单的字符串容器)来发布。即发布消息的类型
"""
    使用 python 实现消息发布:

        1.导包
        2.初始化ROS节点
        3.创建发布者对象
        4.编写发布逻辑并发布数据

"""

if __name__ == "__main__":             #程序主入口
    #2.初始化ROS节点
    rospy.init_node("fanbuzhe")    #设置节点名称 
    #3.创建发布者对象
    pub = rospy.Publisher("che",String,queue_size=10)   #"话题名称",发布消息的类型(这里是上面导入的String),存储容量是10(或者是长度)
    #4.编写发布逻辑并发布数据
    #指定发布频率
    rate = rospy.Rate(1)   #频率为1HZ,表示1秒发布1次
    #计数器
    count = 0
    #创建数据
    msg = String() ##创建 msg 对象
    #使用循环发布数据
    while not rospy.is_shutdown():      #not rospy.is_shutdown() ;  rospy.is_shutdown() 判断节点是否关闭,关闭-》1;没有关闭-》0
                                        #所以 not rospy.is_shutdown() :节点打开-->1  ;关闭-->0  没有关闭执行while发布数据
        count +=1
        msg.data = "hello"+ str(count)
        #发布数据

        pub.publish(msg)
        rospy.loginfo("发布的数据是:%s",msg.data)
        rate.sleep()
eaibot@ubuntu:~/0420$ rosrun huatitongxun demo01_pub_p.py
[INFO] [1682128349.109151]: 发布的数据是:hello1
[INFO] [1682128350.112818]: 发布的数据是:hello2
[INFO] [1682128351.111111]: 发布的数据是:hello3
[INFO] [1682128352.110437]: 发布的数据是:hello4
[INFO] [1682128353.110554]: 发布的数据是:hello5
[INFO] [1682128354.110779]: 发布的数据是:hello6
[INFO] [1682128355.111047]: 发布的数据是:hello7
[INFO] [1682128356.111007]: 发布的数据是:hello8