Python学习笔记10.31

1.Viewing the Code

roscd rospy_tutorials

这里写图片描述

这里写图片描述

2.Beginner Tutorials

1.Writing the Publisher Node

#!/usr/bin/env python   
# license removed for brevity
import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
#!/usr/bin/env python 
# Software License Agreement (BSD License)

## Simple talker demo that published std_msgs/Strings messages
## to the 'chatter' topic

import rospy
from std_msgs.msg import String
'''如果您正在编写ROS节点,则需要导入std_msgs.msg导入是为了我们可以调用std_msgs / String消息类型(一个简单的字符串容器)进行发布。'''
def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
'''
这部分代码定义了talker与ROS其余部分的接口。 pub = rospy.Publisher(“chatter”,String,queue_size = 10)声明您的节点正在使用消息类型String发布到chatter主题。 String这里实际上是类std_msgs.msg.String。 queue_size参数使新添加的,含义为如果任何订户没有足够快地接收它们,则限制排队的消息量。 在ROS之前的版本中只省略了参数。
'''
    rospy.init_node('talker', anonymous=True)
'''
rospy.init_node(NAME),非常重要,因为它告诉rospy你的节点的名称 - 直到rospy有这个信息,它才能开始与ROS主机通信。 在这种情况下,您的节点将命名为talker。 注意:名称必须是基本名称,即它不能包含任何斜杠“/”。
'''
    rate = rospy.Rate(10) # 10hz
'''
此行创建一个Rate对象速率。 在它的方法sleep()的帮助下,它提供了一种方便的途径使得循环可以按照指定的速率进行。 它的参数为10,我们应该期望每秒循环10次(只要我们的处理时间不超过1/10秒)!
'''
    while not rospy.is_shutdown():

        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()
'''
这个循环是一个相当标准的rospy结构:检查rospy.is_shutdown()标志,然后做工作。 你必须检查is_shutdown()来检查你的程序是否应该退出(例如,如果有一个Ctrl-C或其他)。 在这种情况下,“工作”是对pub.publish(hello_str)的调用,它将字符串发布到我们的chatter主题。 rate.sleep(),相当于延时程序。
(你也可以运行rospy.sleep()这是类似于time.sleep(),除了它工作与模拟时间(见时钟)。

这个循环也调用rospy.loginfo(str),它执行三重任务:消息被打印到屏幕,它被写入节点的日志文件,它被写入rosout。 rosout是一个方便的调试:可以使用rqt_console提取消息,而不必使用Node的输出查找控制台窗口。
'''
if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
'''
除了标准的Python __main__检查,这会捕获一个rospy.ROSInterruptException异常,当按下Ctrl-C或者你的Node被关闭时,可以通过rospy.sleep()和rospy.Rate.sleep()方法抛出异常。 引发此异常的原因是,您不会在sleep()之后意外继续执行代码。
'''

python 知识:
1.#!/usr/bin/env python
每一个Python的ros 节点文件都会在开头写上这一句。
2.import:

引入不属于Python内建函数的库

3.如何导入message

有时候有一些特定的message需要导入,一般是有一个msg文件。

所以,比如要导入turtlesim/Pose的message类型,那么在python中是这样:

from turtlesim.msg import Pose

2.Writting a listener

#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

def listener():

    # In ROS, nodes are uniquely named. If two nodes with the same
    # node are launched, the previous one is kicked off. The
    # anonymous=True flag means that rospy will choose a unique
    # name for our 'listener' node so that multiple listeners can
    # run simultaneously.
    rospy.init_node('listener', anonymous=True)

    rospy.Subscriber("chatter", String, callback)

    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()

if __name__ == '__main__':
    listener()
$ chmod +x listener.py

关于rospy.get_caller_id

def callback(data):
    rospy.loginfo(rospy.get_caller_id()+": %s",data.data)
def callback(data):
    rospy.loginfo(rospy.get_caller_id()+"I heard snippy think something: %s",data.data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值