2011-11-13 30 views
48

Tôi có một dự án kiểu robot với Arduino Uno và để tạo một câu chuyện dài, tôi đang thử nghiệm một số thuật toán AI. Tuy nhiên, tôi cần phải thực hiện một số thuật toán ma trận mức cao sẽ khá đơn giản bằng cách sử dụng NumPy/SciPy, nhưng chúng là một cơn ác mộng hoàn toàn trong C hoặc C++. Ngay cả với các thư viện trên mạng, điều này chỉ là vô lý.Có cách nào để "biên dịch" mã Python vào Arduino (Uno) không?

Có cách nào tôi có thể thực hiện dự án này bằng Python không? Tôi nghĩ rằng tôi đã nghe điều gì đó về việc Mega có khả năng này, nhưng tôi có một Uno, và thay thế nó không phải là một lựa chọn tại thời điểm này (mà sẽ thiết lập dự án trở lại một chút.) Ngoài ra, tôi nghe nói về việc sử dụng Python để giao tiếp với Arduino qua USB, nhưng tôi không thể có cáp USB trong khi điều đang chạy. Tôi cần để có thể tải lên chương trình và được thực hiện với nó.

Có bất kỳ tùy chọn nào ở đó không hoặc tôi đã đạt đến điểm chết không?

+2

Đây có phải là vấn đề XY không? Bạn có muốn biết làm thế nào để sử dụng ma trận hiệu quả trên Arduino (bằng cách sử dụng C + +) hoặc bạn có muốn biết làm thế nào để biên dịch python? – Pubby

+2

Tôi có thể bị nhầm lẫn, nhưng đây không phải là vấn đề biên dịch python thành avr-c sao? – danem

+0

Đây là một vấn đề phù hợp với đại số tuyến tính. Tôi đang lên kế hoạch triển khai một số ô vuông nhỏ nhất để xác định mối quan hệ giữa sức mạnh được gửi đến các thiết bị và đầu vào mà nó nhận được từ các cảm biến. Tôi phải thực hiện thuật toán này cho nhiều giai đoạn - như trong giai đoạn 1 = di chuyển ở đó; giai đoạn 2 = lấy một cái gì đó; vv Mỗi giai đoạn có một sự kết hợp khác nhau của đầu vào và đầu ra, vì vậy tôi kích thước của ma trận tôi đang làm việc với sẽ không được định nghĩa theo cách thông thường trong "C." –

Trả lời

19

Có một cuộc trò chuyện về cách sử dụng Python với rô bốt tại năm nay PyConAU được gọi là Ah! I see you have the machine that goes 'BING'! bởi Dr. Graeme Cross.

Tùy chọn duy nhất anh đề nghị sử dụng Python trên bảng vi điều khiển là PyMite mà tôi cho rằng cũng có tên là Python-On-A-Chip.

Nó đã được chuyển đến một loạt các bảng - đặc biệt là ông đề cập đến Arduino Mega mà bạn nói không phải là một lựa chọn cho bạn, nhưng nó có thể nó được hỗ trợ trên bảng Arduino khác.

Tuy nhiên, vì đây là phiên bản "không được bao gồm pin" của Python, nhiều khả năng bạn sẽ gặp phải vấn đề thực sự khi chạy và chạy v.v.

Như các áp phích khác đã đề xuất, việc triển khai trong C có thể là con đường ít kháng cự nhất.

Cập nhật: một lần nữa, không dành riêng cho Arduino, nhưng pyMCU sẽ cung cấp python trên chip. Tác giả nói rằng ông có thể xem xét việc phát triển một phiên bản Arduino của pyMCU nếu có đủ sự quan tâm.

+8

Một dự án kickstarter mới cho "Micro Python" cũng có thể được một số người quan tâm. (http://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers) –

+0

Tôi tin rằng dự án Micro Python sử dụng một bảng đặc biệt, và không được chuyển sang Arduino. Họ có Python 3 mặc dù .. – Gadi

3

Tôi đã bắt đầu làm việc trên "Little Python" cho C++ (được gọi là Pyxie - trình phát trên Py CC-Pyc-C), với mục đích cụ thể là biên dịch một tập hợp con sane của python thành C++ sao cho nó có thể chạy trên một Arduino.

Điều này hoàn toàn xa tại thời điểm viết (0.0.16), nhưng hiện tại nó có thể biên dịch một tập con rất nhỏ của python - đủ cho ví dụ "chớp mắt" arduino để chạy. Để hỗ trợ điều này, nó có một hồ sơ biên dịch - về cơ bản có nghĩa là "biên dịch bằng cách sử dụng chuỗi công cụ arduino."

Một chương trình nó có thể biên dịch trông như sau:

led = 13 

pinMode(led, OUTPUT) 

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

này phân tích, thực hiện phân tích (như kiểu suy luận, vv), biên dịch C++, sau đó được biên soạn vào một tập tin hex, mà bạn có thể tải vào thiết bị của bạn.

Có một chặng đường dài để đi trước hữu ích, nhưng nó đang tiến triển và có lộ trình/v.v.

Đặc biệt một sự khác biệt quan trọng từ Micropython (và PyMite) là nó được thiết kế để biên dịch với các thiết bị quá nhỏ để chạy hoặc thực hiện. (Điều này cũng có nghĩa là nó rất khác với những thứ như ShedSkin trong khi một trình biên dịch Python đến C++ nhắm vào môi trường thực thi lớn hơn)

+1

Rất mát mẻ! Tôi rất mong được thấy điều này diễn ra theo thời gian như thế nào. – kevinsa5

Các vấn đề liên quan