• 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


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

  • 相关阅读:
    记-快两年了基本上没怎么写博客
    nginx
    Spring(AOP)
    一周涨 15k Star 的开源项目「GitHub 热点速览」
    电子眼与无人机在城市安防中的协同应用研究
    一般哪些原因会造成硬盘损坏呢
    程序员面对生活
    二叉排序树(BST)
    python机器学习入门之numpy的用法(超详细,必看)
    产业经济专题:产业结构高级化、合理化指数、工业化率、机构水平化及产业升级度
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/126167301