python - 使用 ROS 与其他方法(有关此“其他方法”的更多详细信息,请参阅帖子)
问题描述
所以我正在和一个朋友一起开发一个机器人(使用树莓派)。我们正在研究的这个机器人将是一艘自主船。现在,对于 Raspberry Pi,我们使用的 Raspbian 映像已经很好地安装了 ROS(特别是 ROS Kinetic),并且我已经确认 ROS 可以正常工作。
对于我们的机器人船,我们希望在其中包含不同的功能:
- 获取 GPS 位置
- 通过水听器获取音频并处理音频以检测特定频率范围(即,我希望船能够检测到何时通过水听器清楚地听到 8500-9000 Hz 的声音)
- 能够通过 XBee 进行通信
所以我过去用过ROS,对发布和订阅主题的概念很熟悉。但是,我的朋友说 ROS 会导致性能问题,因为 ROS 有一些“开销”,声称 ROS 会减慢我们的音频处理速度之类的。
相反,他提出了以下替代方法:
- 在不同的 Python 文件中包含我们机器人的 3 个方面(如上所述)中的每一个。
- 当 Raspberry Pi 启动时,让所有 Python 文件自动运行。
- 为了相互传递信息(本质上是“模仿”ROS 的发布/订阅功能),Python 文件将写入不同的文本文件(以“发布”值)并从这些文本文件中读取(以“订阅”),并且这些文本文件包含的值将在每次更新新值时被覆盖。
那么……哪种传递信息的方法对我们的机器人来说更好呢?
- 使用 ROS
- 使用我朋友提出的上述文件写入/读取方法
- 别的东西
哦,还有我应该提到的其他事情:
- 我知道怎么用ROS,我朋友不知道
- 我的朋友实际上还没有完成编写文件写入/读取想法的所有代码,而 ROS 已经全部设置好,可以在 Raspberry Pi 上继续使用
虽然我可以找到很多列出 ROS 各种优点的网站,但我找不到任何可以将 ROS 与我上面提到的朋友的方法进行比较的任何内容。
解决方案
ROS 有 nodelet,它允许多个节点存在于同一个进程中并在没有复制开销的情况下相互通信——因此比写入文件产生的开销更少。
推荐阅读
- python - 如何使用pyplot在曲面图后面画一条线
- sql - SQL 查询表以返回跨多列找到的最常见值的最有效方法?
- c++ - 如何复制函数回调?
- php - 如果购物车中有两个产品类别,则设置通知
- python - standard_init_linux.go:207: exec 用户进程导致“exec 格式错误”
- python-3.x - 查找特定数据类型的数据帧的索引
- android - BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED:并重新验证购买
- python - 如何使用 python 中的 aws-cdk 设置 Amazon S3 通知以在您的存储桶中发生某些事件时接收通知?
- node.js - 如何使用特定的 Node 解释器运行 NPM?
- javascript - 如何在不刷新页面的情况下将值从 jsp 页面发送到数据库