在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]
Posted
技术标签:
【中文标题】在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]【英文标题】:What is the best way to communiate between C++ and Python on Hardware? [closed]在硬件上 C++ 和 Python 之间进行通信的最佳方式是什么? [关闭] 【发布时间】:2020-07-28 18:28:37 【问题描述】:设置:在 C++ 上运行的机器人和 Python 中的 RL 训练算法。机器人循环以 1kHz 运行(可以更高)。
目标:将机器人状态信息在线发送到 RL 训练,并将控制输入发送回机器人。
是否有实现 C++ 和 Python 进程之间来回通信的最佳方式(无需使用Robot-Operating-System)?
谢谢
【问题讨论】:
ros是谁,为什么不能参与?沟通的方式有很多种。如果一个程序运行另一个程序,通过 stdin/stdout 泵送东西可能就足够了(记得刷新缓冲区)。 Zeromq 是一个很棒的工具包。其中一个带有 REST 接口的迷你 Web 服务器非常棒。 什么是“ros”?一个进程是由另一个进程启动的,还是独立启动的?它们是否在同一台机器上运行? 1kHz 在现代硬件上算不了什么...我正在尝试考虑一种无法处理 1kHz 的 IPC 机制。我赞同调查 zeromq 的建议;它有一个简单的 API,有数十种编程环境的实现,并且应该非常快。 进程间通信可能是您正在寻找的术语 我指的是ros.org。这两个进程都是独立运行的。他们在同一台机器上。谢谢你。将调查 Zeromq。 【参考方案1】:就我个人而言,我会像已经提到的@tdelaney 和@cdhowie 那样做:使用IPC 套接字通信。但是,我认为使用 zeromq 或外部库来这样做会有点过头了,因为只使用 Python 标准库应该很好并且同样容易。根据您的应用程序,使用共享内存可能更有效,但设置起来更困难并且有限制(这两个进程必须在同一台机器上运行,等等)。已经有很多关于这个主题的帖子。这个post 非常接近您想要实现的目标,并且答案非常详细。
【讨论】:
但我无法发表评论。对我来说,它以某种方式回答了这个问题,因为我指向的帖子包含所有信息。 zeromq 当然是众多选择之一,但我不明白它是多么的矫枉过正。它很容易链接或导入 C++ 和 python 组件,它为您完成了大部分 IPC 繁重的工作。几行 zmq 代码替换了数百行 socket 代码。如果数据是带有换行符的 ascii 文本的单向流量,那么是的,一个简单的管道就可以了。如果它非常复杂并且需要消息传递接口,那更符合 zeromq。 是的,这确实取决于应用程序,我将它用于高级应用程序,所以我知道它非常方便。这里我假设由于作者提到ROS(机器人操作系统)和 1khz 通信,我猜它是为了成为机器人(真实或模拟)和控制器之间接口的一部分,可能运行相同硬件。所以通常数据只是一维或二维浮点数组,没什么特别的。但当然我可能是错的。 谢谢@milembar。对不起,我应该在问题上更清楚。我的情况和你描述的完全一样。我有一个在 C++ 上运行的机器人和一个在 python 中进行的 RL 训练,我想用实际的机器人状态更新数据。 是的,ROS 是一个很大的提示。就我个人而言,我和你做的一样,和我一起工作的人为我实现了一些共享内存。它非常有效,但要正确实施却非常棘手。如果你在 C++ 方面很先进,并且如果你想要一些非常可靠的持续时间,我建议你也这样做,但根据你的技能和现有的 C++ 代码库可能需要一周的时间来实现(Python 方面不应该是实际上是最困难的部分)。以上是关于在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Windows x64 上 32 位和 64 位应用程序之间的进程间通信