ROS学习——创建Publisher发布者节点和Subscriber订阅者节点(python)

ros节点在python中的实现方法

1. 创建package软件包

  • 打开终端输入以下指令创建一个新的package软件包
    cd catkin_ws/src/
    catkin_create_pkg ssr_pkg(包名) rospy std_msgs
    cd ..
    catkin_ws
    
  • 注意: 在ros中,通过python编写的节点是不需要catkin_ws编译就可以直接运行的,但是在新创建package软件包时,需要对软件包直接进行catkin_ws编译,这是为了让新建的这个package通过编译进入ros的软件包列表,以便在后面运行节点时,ros能够在软件包列表中找到这个package软件包
  • 在新建的软件包中新建一个scripts目录用于存放python代码,原有的src子目录是用于存放C++代码的

2. 通过python创建一个publisher发布者

#!/usr/bin/env python3
''' 'shebang' 在脚本的开头指示要使用的解释器,解释器的版本取决于Ubuntu版本,低于20.04版本的Ubuntu系统不支持Python3'''
#encoding = UTF-8  
'''编码格式 UTF-8'''
import rospy
from std_msgs.msg import String

if __name__ == "__main__":
    rospy.init_node('sensor_node')
    rospy.logwarn("Hello World!!!")

    pub = rospy.Publiser("chat_box_1", String, queue_size = 10)

    rate = rospy.Rate(10)

    while not rospy.is_shutdown():
        rospy.loginfo("THIS IS A PYTHON CODE")
        msg = String()
        msg.data = "I AM WRITING NOW"
        pub.publish(msg)
        rate.sleep()

代码解析同C++,详情见"ROS学习——发布者publisher和订阅者Subscriber(c语言)"

  • 在Ubuntu系统中新建的文件,出于安全考虑,并不带有执行权限,因此并不能直接运行,因此需要进入到py节点中的终端后输入chmod +x sensor_node.py(Change mode +execute 节点名称)添加节点的执行权限,然后就可以直接编译了

3. 通过python创建一个subscriber订阅者

#!/usr/bin/env python3
#encoding = UTF-8

import rospy
import locale
from std_msgs.msg import String

def sensor_callback(msg):
    rospy.loginfo(msg.data)

def sensor_callback2(msg):
    rospy.logwarn(msg.data)

if __name__ == "__main__":
    locale.setlocale(locale.LC_ALL, "")
    rospy.init_node('ma_node') #初始化节点
    rospy.logwarn("Hello World!!!")

    sub = rospy.Subscriber("chat_box_1", String, sensor_callback, queue_size=10)
    sub_2 = rospy.Subscriber("chat_box_2", String, sensor_callback2, queue_size=10)

    rospy.spin()
  • 值得注意的是,在python中系统默认在检查出消息的传递后,自动再次调用spin()函数,因此,在C++中需要将spinOnce()放在循环内以确保消息的正常传递,而python代码中着不需要,如果在python中添加循环的话,则可能变成一个死循环,使程序永远卡在 spin(),无法正常退出。
  • 如果在rosrun启动某一节点存在python和C++的同名节点时,记得在启动时采用rosrun package node.py而不是rosrun package node,以避免错误的调用C++节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值