欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > ROS话题通信机制实操Python

ROS话题通信机制实操Python

2024/10/24 14:15:48 来源:https://blog.csdn.net/m0_49289284/article/details/139841897  浏览:    关键词:ROS话题通信机制实操Python

ROS话题通信机制实操Python

  • 创建ROS工程
  • 发布方(二狗子)
  • 订阅方(翠花)
  • 编辑配置文件
  • 编译并执行

ROS话题通信的理论查阅ROS话题通信流程理论

在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要关注的关键点有三个:

  • 发布方(二狗子)
  • 订阅方(翠花)
  • 数据(此处为普通文本)

创建ROS工程

创建一个ROS工程包括以下几个步骤:

  • 创建一个topic_ws的ROS工作空间
  • 启动VScode
  • VScode 编译ROS
  • 创建ROS功能包
  • 在功能包下创建一个scripts文件

详细操作可以查阅VScode创建ROS项目 ROS集成开发环境

发布方(二狗子)

  • 基本流程

    • 1.包含头文件
    • 2.初始化 ROS 节点:命名(唯一)
    • 3.实例化 发布者 对象
    • 4.组织被发布的数据,并编写逻辑发布数据
  • 代码实现

    #! /usr/bin/env python3import rospy
    from std_msgs.msg import String"""
    实现流程:1.导包 2.初始化 ROS 节点:命名(唯一)3.实例化 发布者 对象4.组织被发布的数据,并编写逻辑发布数据
    """if __name__ == "__main__":#2.初始化 ROS 节点:命名(唯一)rospy.init_node("erGouzi")#3.实例化 发布者 对象pub = rospy.Publisher("fang",String,queue_size=10)#4.组织被发布的数据,并编写逻辑发布数据msg = String()  #创建 msg 对象count = 0  #计数器 # 设置循环频率rate = rospy.Rate(1)while not rospy.is_shutdown():#拼接字符串msg.data = "cuiHua 你好 ---> " + str(count)pub.publish(msg)rate.sleep()rospy.loginfo("写出的数据:%s",msg.data)count += 1
  • 添加可执行权限
    进入到scripts文件下,打开Terminal,执行 chmod +x demo_pub_p.py 对demo_pub_p.py文件添加可执行的权限
    在这里插入图片描述

  • 验证是否存在问题

    • 编辑配置文件
      修改 plumbing_pub_sub 功能包下的CMakeLists.txt,找到catkin_install_python,修改成如图所示
      在这里插入图片描述

    • 按快捷键 ctrl + shift + B 编译

    • 开启一个Terminal,运行 roscore 命令;再开启一个新的Terminal,运行source ./devel/setup.bash rosrun plumbing_pub_sub demo_pub_p.py ;再开启一个Terminal,运行rostopic echo fang,查看订阅数据
      在这里插入图片描述

订阅方(翠花)

  • 基本流程

    • 1.包含头文件
    • 2.初始化 ROS 节点:命名(唯一)
    • 3.实例化 订阅者 对象
    • 4.处理订阅的消息(回调函数)
    • 5.设置循环调用回调函数
  • 代码实现

    #! /usr/bin/env python3import rospy
    from std_msgs.msg import String"""
    实现流程:1.导包 2.初始化 ROS 节点:命名(唯一)3.实例化 订阅者 对象4.处理订阅的消息(回调函数)5.设置循环调用回调函数
    """def doMsg(msg):rospy.loginfo("订阅到的数据是:%s", msg.data)if __name__ == "__main__":#2.初始化 ROS 节点:命名(唯一)rospy.init_node("cuiHua")#3.实例化 订阅者 对象sub = rospy.Subscriber("fang", String, doMsg, queue_size=10)#4.处理订阅的消息(回调函数)#5.设置循环调用回调函数rospy.spin()
    
  • 添加可执行权限
    进入到scripts文件下,打开Terminal,执行 chmod +x *.py 对demo_sub_p.py文件添加可执行的权限
    在这里插入图片描述

发布方、订阅方声明的话题必须一致,案例中的话题是 fang

编辑配置文件

修改 plumbing_pub_sub 功能包下的CMakeLists.txt,找到同时复制一个catkin_install_python,修改成如图所示
在这里插入图片描述

编译并执行

  • 按快捷键 ctrl + shift + B 编译
    在这里插入图片描述
  • 执行代码
    • 1.启动 roscore;
      开启一个Terminal,启动 roscore
      在这里插入图片描述

    • 2.启动发布节点;
      开启一个新的Terminal

      cd topic_ws/
      source ./devel/setup.bash 
      rosrun plumbing_pub_sub demo_pub_p.py 
      

      在这里插入图片描述

    • 3.启动订阅节点。

      cd topic_ws/
      source ./devel/setup.bash 
      rosrun plumbing_pub_sub demo_sub_p.py 

      在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com