60

我有一个带有Arduino Uno的机器人类型项目,长话短说,我正在尝试一些 AI 算法。但是,我需要使用NumPy / SciPy实现一些非常简单的高级矩阵算法,但它们在 C 或 C++ 中简直是一场噩梦。即使有图书馆,这也变得可笑了。

有什么办法可以在 Python 中完成这个项目吗?我想我听说过有关Mega具有此功能的一些信息,但我有一个 Uno,此时替换它不是一个选项(这会使项目倒退很多。)另外,我听说过一些有关使用 Python 进行通信的信息通过 USB 连接到 Arduino,但在运行时我无法插入 USB 电缆。我需要能够上传程序并完成它。

有什么选择吗,还是我刚刚走到了死胡同?

4

4 回答 4

22

今年PyConAU有一个关于将 Python 与机器人结合使用的讨论,名为Ah!我看到你有一台会“BING”的机器!格雷姆·克罗斯博士。

他推荐的在微控制器板上使用 Python 的唯一选择是PyMite,我认为它的名称也叫Python-On-A-Chip

它已被移植到一系列板上 - 特别是他提到了 Arduino Mega,您说这不是您的选择,但其他 Arduino 板上可能支持它。

但是,因为它是 Python 的“不包括电池”版本,所以在启动和运行 numpy/scipy 等时很可能会遇到真正的问题。

正如其他海报所暗示的那样,在 C 中实现可能是阻力最小的路径。

更新:再次,不是专门针对 Arduino,但pyMCU看起来在芯片上提供 python。作者表示,如果有足够的兴趣,他可能会考虑开发 Arduino 版本的 pyMCU。

于 2011-11-15T00:31:53.860 回答
9

我已经开始研究 C++ 的“小 Python”(称为Pyxie - Py CC-Pyc-C 上的一个游戏)编译器,其具体目的是将 Python 的一个健全的子集编译为 C++,以便它可以在 arduino 上运行.

在撰写本文时(0.0.16)还远未完成,但它目前可以编译一个非常小的 Python 子集——足以让 arduino “blink”示例运行。为了支持这一点,它有一个编译配置文件——本质上意味着“使用 arduino 工具链编译”。

它可以编译的程序如下所示:

led = 13

pinMode(led, OUTPUT)

while True:
  digitalWrite(led, HIGH)
  delay(1000)
  digitalWrite(led, LOW)
  delay(1000)

这会解析,执行分析(如类型推断等),编译为 C++,然后编译为十六进制文件,您可以将其加载到您的设备上。

在它有用之前还有很长的路要走,但它正在取得进展并且确实有路线图/等。

特别是与 Micropython(和 PyMite)的一个关键区别在于,它旨在编译到太小而无法运行任何实现的设备。(这也意味着它与 ShedSkin 之类的东西非常不同,后者虽然 Python 到 C++ 编译器针对更大的执行环境)

于 2015-08-03T13:03:15.403 回答
1

很难让任何类型的 Python 脚本直接在 Arduino uno 上运行。原因是它是一种解释性语言,因此除了纯文本脚本之外,您还需要板载解释器。arduino uno 中的所有内容可能都没有足够的内存。

您可以做的最好的事情是找到一种将 Python 脚本编译为本机机器代码的方法(这就是 C/C++ 的工作方式)。我已经看到一些项目可以为其他平台做类似的事情,但是(据我所知)没有一个项目能成功地为 Arduino uno 做到这一点。

您可以访问http://www.toptechboy.com/using-python-with-arduino-lessons/了解更多信息。

希望这会帮助你。谢谢!

于 2018-09-11T07:59:40.310 回答
0

这不是一个直接的解决方案,但在你的情况下,如果我是你,我会在我的电脑上编写 AI 程序,其余的在 Arduino 中编写。之后我会用我的 AI 程序编写一个烧瓶服务器。然后,从我的路由器端口转发到本地机器。最后,从 Arduino 向服务器发出请求。

于 2021-01-27T05:05:26.103 回答