常用API之Python

1. 初始化

rospy.init_node( );

#2.初始化ROS节点;
"""
    作用:ROS节点初始化

    参数:
        name  ----设置节点名称
        argv = None  ----封装节点调用时传递的参数
        anonymous = False ----可以为节点名称生成随机后缀,可以解决重名问题

    使用:
    1.argv使用
    可以安照ROS中指定的语法格式传参,ROS可以解析并加以使用

    2.anonymous使用
    可以设置为True,节点名称可以后缀随机数
    原: rospy.init_node("sanDai")     ----不可以重复执行发布数据的命令
    改: rospy.init_node("sanDai",anonymous = True)   ----可以重复发布
"""

2. 话题与服务相关对象

"""
    内容:latch
        bool 值, 默认是 False
    作用:
        如果设置为 True, 可以将发布的最后一条数据保存,且后续当新的订阅对象连接时,会将该数据发布给订阅者
    使用:
        latch = True
		原:pub = rospy.Publisher("che",String,queue_size=10)
		改:pub = rospy.Publisher("che",String,queue_size=10,latch=True)
"""

注:修改后,发送结束时会保存最后一条数据并通过echo输出

课程:https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=136&spm_id_from=pageDriver

3. 时刻

#! /usr/bin/env python
import rospy
"""
    需求1: 演示时间相关操作(获取当前时刻 + 设置指定时刻)

    需求2: 程序执行中停顿5秒

    需求3: 获取程序开始执行的时刻, 且已知程序运行的时间,计算程序结束的时刻

    需求4: 创建定时器,实现类似于 ros::Rate 的功能(隔某个时间间隔执行某种操作)
"""
def doMsg(event):                #需求4:定时器需要的内嵌循环
    rospy.loginfo("+++++++++++++++++++++++++++++++++")
    #注:event可以获取时刻
    rospy.loginfo("调用回调函数的时刻:%.2f",event.current_real.to_sec())

if __name__ == "__main__":
    rospy.init_node("hello_time")
    rospy.loginfo("*********************需求1.时间相关操作*********************")
    #需求1: 演示时间相关操作(获取当前时刻 + 设置指定时刻)
    #获取时刻
    right_now = rospy.Time.now() #将当前时刻(1.now函数被调用执行的那一刻 2.1970年01月01日 00:00:00)获取并封装成对象
    rospy.loginfo("当前时刻:%.2f",right_now.to_sec())  #浮点型
    rospy.loginfo("当前时刻:%d",right_now.secs)        #整型
    
    #设置指定
    time1 = rospy.Time(100.5)  #将时间(1970年01月01日 00:00:00 逝去100.5秒)封装进 Time 对象
    time2 = rospy.Time(100.312456875)  
    rospy.loginfo("指定时刻1:%.2f",time1.to_sec())
    rospy.loginfo("指定时刻2:%.2f",time2.to_sec())

    #从某个时间值获取时间对象
    time3 = rospy.Time.from_sec(210.12)
    rospy.loginfo("指定时刻3:%.2f",time3.to_sec())

    rospy.loginfo("*********************需求2.程序执行中停顿*********************")
    # 需求2: 程序执行中停顿5秒
    rospy.loginfo("休眠前-----------------------------------------")
    # 1.封装一个持续时间对象(5秒)
    du = rospy.Duration(5)
    #2.再将持续时间休眠
    rospy.sleep(du)    #执行需求2不注释,需求3需要注释掉,会影响需求3的操作
    rospy.loginfo("休眠后-----------------------------------------")

    rospy.loginfo("*********************需求3.计算程序结束的时刻*****************")
    # 需求3: 获取程序开始执行的时刻, 且已知程序运行的时间,计算程序结束的时刻
    # 1.获取一个时刻 t1
    t1 = rospy.Time.now()
    # 2.设置一个持续时间 du1
    du1 = rospy.Duration(5)
    # 3.结束时刻  t2 = t1 + du1
    t2 = t1 + du1
    rospy.loginfo("开始时刻:%.2f",t1.to_sec())
    rospy.loginfo("结束时刻:%.2f",t2.to_sec())
    
    du2 = du + du1
    rospy.loginfo("持续时间相加:%.2f",du2.to_sec())
    # t2 = right_now + t1  //会抛出异常

    rospy.loginfo("*********************需求4.创建定时器********************")
    # 创建定时器,实现类似于 ros::Rate 的功能(隔某个时间间隔执行某种操作)
    """
        @param period: desired period between callbacks
        @type period: rospy.Duration
        @param callback: callback to be called
        @type callback: function taking rospy.TimerEvent
        @param oneshot: if True, fire only once, otherwise fire continuously until shutdown is called [default: False]
        @type oneshot: bool
        @param reset: if True, timer is reset when rostime moved backward. [default: False]
        @type reset: bool
    """
    #创建一个定时器对象
    timer = rospy.Timer(rospy.Duration(2),doMsg)    #每隔2s输出一次
    # timer = rospy.Timer(rospy.Duration(2),doMsg,True)  #只输出一次,一次性的
    rospy.spin()

输出:
“休眠前”与“休眠后”停顿了5秒
常用API之Python

4. 其他函数

4.1 节点状态判断

def is_shutdown():
    """
    @return: True 如果节点已经被关闭
    @rtype: bool
    """

4.2 节点关闭函数

def signal_shutdown(reason):
    """
    关闭节点
    @param reason: 节点关闭的原因,是一个字符串
    @type  reason: str
    """
def on_shutdown(h):
    """
    节点被关闭时调用的函数
    @param h: 关闭时调用的回调函数,此函数无参
    @type  h: fn()
    """

关闭函数:https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=141&spm_id_from=pageDriver

4.3 日志函数

#! /usr/bin/env python
import rospy

if __name__ == "__main__":
    #演示日志函数
    rospy.init_node("hello_log")
    rospy.logdebug("DEBUG消息...")
    rospy.loginfo("INFO消息.....")
    rospy.logwarn("WARN消息.....")
    rospy.logerr("ERROR消息.....")
    rospy.logfatal("FATAL消息...")

输出:
常用API之Python

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月16日 下午4:12
下一篇 2022年3月16日 下午4:31

相关推荐