如何用Python来写ROS里的发布者和订阅者!(文章有代码)

本文档详细介绍了如何在Ubuntu环境下,利用PyCharm和ROS(Robot Operating System)创建Python脚本来实现ROS的发布者和订阅者。首先,通过修改PyCharm的启动脚本来加载ROS环境变量,接着在catkin工作空间中创建依赖于std_msgs、roscpp和rospy的'beginner_tutorials'程序包。然后,通过`catkin_create_pkg`命令创建必要的文件,并指导如何安装pip和yaml。在遇到无法注册到master节点的问题时,建议运行`roscore`命令。最后,讨论了选择queue_size参数的重要性,提供了不同场景下的推荐值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.ncnynl.com/archives/201611/1057.html

遇到的问题:

Q1:

先安装pycharm, 官网下载linux 版本压缩包

$ mkdir ~/tools
$ cd ~/tools
$ cd ~/tools
$ tar xfz pycharm-professional-2016.2.3.tar.gz  #解压
$ cd pycharm-professional-2016.2.3
$ ./pycharm.sh                       #按提示安装即可
  • 不同版本jetbrains-pycharm.desktop名字可能会有些差异

  • jetbrains-pycharm.desktop内容为:

  • [Desktop Entry]
    Version=1.0
    Type=Application
    Name=PyCharm 
    Icon=/home/ubu/tools/pycharm-professional-2016.2.3/bin/pycharm.png
    Exec= bash -i -c "/home/ubu/tools/pycharm-professional-2016.2.3/bin/pycharm.sh" %f
    Comment=The Drive to Develop
    Categories=Development;IDE;
    Terminal=false
    StartupWMClass=jetbrains-pycharm
  • 修改Exec变量一行,在=后添加 bash -i -c 即改为
Exec= bash -i -c "/home/ubu/tools/pycharm-professional-2016.2.3/bin/pycharm.sh" %f
  • 保存并退出。
  • 添加 bash -i -c 是为了在通过快捷方式启动PyCharm的同时加载ROS环境变量(ROS环境变量加载脚本配置在 ~/.bashrc 文件内)

步骤

  • 首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下:
# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src
  • 现在使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
$ catkin_create_pkg beginner_tutorials msg rospy roscpp
  • 这将会创建一个名为beginner_tutorials的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。

  • catkin_create_pkg命令会要求你输入package_name,如果有需要你还可以在后面添加一些需要依赖的其它程序包:

# This is an example, do not try to run this
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

建立Python脚本目录

$ mkdir scripts
$ cd scripts

内容如下:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
pass

 

 

Q2:

先安装pip

sudo apt-get install python-pip

 

import yaml
ImportError: No module named yaml

安装或更新yaml

wget http://pyyaml.org/download/pyyaml/PyYAML-3.12.tar.gz
tar -xvzf PyYAML-3.12.tar.gz
cd PyYAML-3.12
python setup.py install 

Q3:

Unable to immediately register with master node  master may not be running yet

先起SDK 就有master了,

如果是测试代码,可以直接先起  roscore 命令即可。

Q4:

如何选择queue_size值:
0 - 无限长的buffer,直到被取走,不扔掉。可能会导致取不过来,内存耗尽掉~不推荐。
1, 2, 3, - 基本上1秒能有10次数据处理能力的话(),这种小的buffer 就够了。对于只关心最新的值的情况,最适用。
10或更多 - 用户界面msg 是比较好的例子,这种东东不能丢失。另一个例子就是当你想要记录所有的值,这样的值又是高速发布的。
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值