当前位置 博文首页 > txr152111的博客:13th 自定义msg的使用(Python实现)

    txr152111的博客:13th 自定义msg的使用(Python实现)

    作者:[db:作者] 时间:2021-09-01 22:13

    一、功能要求

    和前面的C++一样:

    编写发布订阅实现,要求发布方以1HZ(每秒1次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。

    流程:

    1. 编写发布方实现;
    2. 编写订阅方实现;
    3. 为python文件添加可执行权限;
    4. 编辑配置文件;
    5. 编译并执行。

    二、实现

    2.0 VSCode配置

    2.1 发布方实现

    在scripts目录下新建一个.py文件:

    ?内容:

    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-           
    
    import rospy
    from plumbing_pub_sub.msg import Person
    from rospy.timer import Rate
    """
            发布方:发布人的消息
                    1.导包
                    2.初始化ros节点
                    3.创建发布者对象
                    4.组织发布逻辑,并发布数据
    """
    
    if  __name__ == "__main__":
                    # 2.初始化ros节点
                    rospy.init_node("daMa")
                    # 3.创建发布者对象
                    pub=rospy.Publisher("LiaoTian",Person,queue_size=10)
                    # 4.组织发布逻辑,并发布数据
                    #4.1创建Person数据
                    p = Person()
                    p.name ="奥特曼"
                    p.age =  8
                    p.height = 1.85
                    #4.2创建Rate对象
                    rate = rospy.Rate(1)
                    while not rospy.is_shutdown():
                        pub.publish(p)
                        rospy.loginfo("发布的消息:%s,%d,%.2f",p.name,p.age,p.height)
                        rate.sleep()
    
                    #4.3循环发布

    添加权限:

    chmod +x *.py

    配置CMakeList.txt文件:

    2.2 订阅方的实现

    新建文件:

    文件内容:

    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-     
    import rospy
    
    from plumbing_pub_sub.msg import Person
    
    def doPerson(p):
        rospy.loginfo("订阅到的数据:%s,%d,%.2f",p.name,p.age,p.height)
    
    
    """
            订阅方:订阅人的消息
                    1.导包
                    2.初始化ros节点
                    3.创建订阅者对象
                    4.处理订阅数据
                    5.spin()
    """
    if __name__ == "__main__":
        rospy.init_node("daYe")
        sub = rospy.Subscriber("LiaoTian",Person,doPerson)
        rospy.spin()

    ?添加权限:

    ?配置Cmakelist.txt文件:

    测试:

    先启动订阅方:

    再启动发布方:

    ?查看订阅方:

    3.计算图查看

    cs