2011-11-13 163 views
48

我有一個Arduino Uno一個機器人類型的項目,並作出長話短說,我正在與一些AI算法實驗。然而,我需要使用NumPy/SciPy來實現一些非常簡單的高級矩陣算法,但它們在C或C++中完全是一場噩夢。即使有這些圖書館,這只是變得荒謬。有沒有辦法將Python代碼「編譯」到Arduino(Uno)?

有沒有什麼辦法可以做到在Python這個項目?我想我聽說Mega具有這種能力,但我有一個Uno,並且在這一點上替換它並不是一個選項(這會使項目返回相當多)。另外,我聽說了有關使用Python進行通信的一些問題通過USB連接到Arduino,但是當它正在運行時,我無法插入USB電纜。我需要能夠上傳程序並完成它。

是否有任何選擇了那裏,或者有我只是走進了死衚衕?

+2

這是XY問題嗎?你想知道如何在Arduino上有效地使用矩陣(使用C++),還是想知道如何編譯python? – Pubby

+2

我可能會誤解,但這不僅僅是將python編譯爲avr-c的問題嗎? – danem

+0

這更多的是線性代數擬合問題。我正計劃實施一些最小二乘擬合,以確定發送給設備的功率與從傳感器接收到的輸入之間的關係。我必須實現這個算法的多個階段 - 如階段1 =移動那裏;階段2 =搶東西;等等。這些階段中的每一個都有不同的輸入和輸出組合,所以我正在使用的矩陣的大小將不會以通常的方式在「C」中定義。 –

回答

19

Dr. Graeme Cross在本年PyConAU有一篇關於使用Python與機器人技術的討論Ah! I see you have the machine that goes 'BING'!

他推薦在微控制器板上使用Python的唯一選擇是PyMite,我認爲它的名字也是Python-On-A-Chip

它已被移植到一系列的電路板 - 具體而言,他提到了Arduino Mega,你說的不是你的選擇,但它有可能在其他Arduino電路板上得到支持。

然而,因爲它是一個Python的「不包括電池」的版本就非常有可能,你將有一個真正的問題越來越numpy的/ SciPy的等運行起來了。

正如其他海報建議,在C實現可能是阻力最小的路徑。

更新:再次,不專門爲Arduino,但pyMCU看起來提供蟒蛇芯片。作者說,如果有足夠的興趣,他可能會考慮開發一個Arduino版本的pyMCU。

+8

「Micro Python」的一個新的kickstarter項目也許會引起一些人的興趣。 (http://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers) –

+0

我相信微型Python項目使用了一個特殊的板子,並沒有移植到Arduino。他們確實有Python 3 .. – Gadi

3

我已經開始在C++上編寫「Little Python」(稱爲Pyxie - Py CC-Pyc-C上的一個播放)編譯器,其目的是編譯Python的一個合理的子集,使其可以運行在一個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++編譯器的目標是更大的執行環境)

+1

非常酷!我期待着看到這是如何隨着時間的推移而演變的。 – kevinsa5

相關問題