• Linux中ROS话题通信基本操作(Python实现)


    目录

    话题通信发布方实现

    发布者代码实现

    scripts文件添加可执行权限

    配置编译文件

    验证发布者是否能够运行

    话题通信订阅方实现

    订阅者代码实现

    配置编译文件

    ROS中Python代码实现话题通信结果演示


    话题通信发布方实现

    流程:

    1、编写发布方实现;

    2、编写订阅方实现;

    3、编辑配置文件;

    4、编译并执行;

    具体实现:

    创建一个工作空间

    首先创建一个工作空间以及一个src子目录,然后再进入工作空间调用catkin_make命令编译

    1. mkdir -p demo01_ws/src
    2. cd demo01_ws/
    3. catkin_make

     启动VScode

    code .
    

    右键点击src,点击Create Catkin Package

    输入

    plumbing_pub_sub
    roscpp rospy std_msgs

    在plumbing_pub_sub功能包中的src中新建Python功能包目录 scripts

    再到scripts中新建demo01_pub_p.py

    发布者代码实现

    1. #! /usr/bin/env python
    2. import rospy
    3. from std_msgs.msg import String #要发布的消息的类型
    4. """
    5. 使用python实现消息发布:
    6. 1.导包;
    7. 2.初始化ros节点;
    8. 3.创建发布者对象;
    9. 4.编写发布逻辑并发布数据;
    10. """
    11. if __name__ == "__main__":
    12. #2.初始化ros节点;
    13. rospy.init_node("sanDai") #传入节点名称
    14. #3.创建发布者对象;
    15. pub = rospy.Publisher("che",String,queue_size=10)
    16. #4.编写发布逻辑并发布数据;
    17. #创建数据
    18. msg=String()
    19. #指定发布频率
    20. rate = rospy.Rate(1)
    21. #设置计算器
    22. count = 0
    23. #先休眠一会,度过pub连接roscore这段时间
    24. rospy.sleep(3)
    25. #使用循环发布数据
    26. print("aa")
    27. while not rospy.is_shutdown():
    28. count += 1
    29. msg.data = "hello" + str(count)
    30. #发布数据
    31. pub.publish(msg)
    32. #设置日志
    33. rospy.loginfo("发布的数据:%s",msg.data)
    34. rate.sleep()#休眠一秒中然后醒过来

    scripts文件添加可执行权限

    右键点击scripts打开终端

    chmod +x *.py

    配置编译文件

    打开plumbing_pub_sub文件中的CMakeLists.txt

    找到

    # catkin_install_python(PROGRAMS

    # scripts/my_python_script

    # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

    # )

    将其修改为

    catkin_install_python(PROGRAMS

    scripts/demo01_pub_p.py

    DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

    )

    Shift+Alt+B编译一下


    验证发布者是否能够运行

    开三个终端

    roscore

    1. cd demo03_ws
    2. source ./devel/setup.bash
    3. rosrun plumbing_pub_sub demo01_pub_p.py

    1. cd demo03_ws
    2. source ./devel/setup.bash
    3. rostopic echo che

    话题通信订阅方实现

    在scripts中新建python文件demo01_sub_p.py

    订阅者代码实现

    1. #! /usr/bin/env python
    2. import rospy
    3. from std_msgs.msg import String
    4. """
    5. 订阅实现流程:
    6. 1.导包;
    7. 2.初始化ROS节点;
    8. 3.创建订阅者对象
    9. 4.回调函数处理数据;
    10. 5.spin()
    11. """
    12. def doMsg(msg):
    13. rospy.loginfo("我订阅的数据:%s",msg.data)
    14. if __name__ == "__main__":
    15. #2.初始化ROS节点;
    16. rospy.init_node("lala")
    17. #3.创建订阅者对象
    18. sub = rospy.Subscriber("che",String,doMsg,queue_size=10)
    19. #4.回调函数处理数据;
    20. #5.spin()
    21. rospy.spin()

    配置编译文件

    找到CmakeLists.txt文件

    找到

    scripts/demo01_pub_p.py

    在其后添加

    scripts/demo02_sub_p.py

    ROS中Python代码实现话题通信结果演示

     开三个终端

    roscore

    1. cd demo03_ws
    2. source ./devel/setup.bash
    3. rosrun plumbing_pub_sub demo01_pub_p.py

    1. cd demo03_ws
    2. source ./devel/setup.bash
    3. rosrun plumbing_pub_sub demo02_sub_p.py


     出现下图所示则表明话题通讯成功

  • 相关阅读:
    【Linux】03_编译原理
    帮看看这个笔记本咋样吧
    线性归一化是什么,用python实现数据的线性归一化
    vscode(git graph插件出错)
    【JavaScript】制作一个抢红包雨页面
    如何使用单链表实现队列
    selenium 笔记
    云原生系列之docker的容器管理实战
    xv6 中的进程切换:MIT6.s081/6.828 lectrue11:Scheduling 以及 Lab6 Thread 心得
    #循循渐进学51单片机#指针基础与1602液晶的初步认识#not.11
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/126167301