Есть ли способ «скомпилировать» код Python на Arduino (Uno)?

#python #arduino #pyserial

#python #arduino #pyserial

Вопрос:

У меня есть проект типа робототехники с Arduino Uno, и, короче говоря, я экспериментирую с некоторыми алгоритмами искусственного интеллекта. Однако мне нужно реализовать некоторые высокоуровневые матричные алгоритмы, которые были бы довольно простыми с использованием NumPy / SciPy, но они являются полным кошмаром на C или C . Даже с имеющимися библиотеками это становится просто смешным.

Есть ли какой-либо способ, которым я могу выполнить этот проект на Python? Кажется, я что-то слышал о том, что у Mega есть такая возможность, но у меня есть Uno, и заменить его на данный момент не представляется возможным (это отбросило бы проект совсем немного назад). Кроме того, я слышал кое-что об использовании Python для связи с Arduino через USB, но я не могу подключить USB-кабель, пока эта штука работает. Мне нужно иметь возможность загрузить программу и покончить с ней.

Есть ли какие-либо варианты, или я просто зашел в тупик?

Комментарии:

1. Это проблема XY? Вы хотите знать, как эффективно использовать матрицы на Arduino (используя C ) или вы хотите знать, как скомпилировать python?

2. Возможно, я ошибаюсь, но разве это не просто вопрос компиляции python в avr-c?

3. Это скорее проблема подбора линейной алгебры. Я планирую реализовать некоторые методы наименьших квадратов для определения взаимосвязи между мощностью, передаваемой на устройства, и входными данными, получаемыми от датчиков. Я должен реализовать этот алгоритм для нескольких этапов — как на этапе 1 = переместить туда; этап 2 = захватить что-нибудь; и т.д. Каждый из этих этапов имеет различную комбинацию входов и выходов, поэтому I размер матриц, с которыми я работаю, не будет определен обычным способом в «C.»

4. Вероятно, это возможно реализовать на C, просто это становится больше проблем, чем того стоит. Я надеялся сделать это достаточно универсальным для публикации в sourceforge для других проектов искусственного интеллекта.

5. Ах, кто-то из моей местной группы python только что рассказал о библиотеке для работы с python-> arduino.. Я попытаюсь откопать его для вас. Редактировать: нашел это. Не уверен, действительно ли это полезно. myhdl.org/doku.php

Ответ №1:

В этом году в PyConAU был разговор об использовании Python в робототехнике под названием Ah! Я вижу, у вас есть машина, которая запускает «BING»! доктор Грэм Кросс.

Единственным вариантом, который он рекомендовал для использования Python на плате микроконтроллера, был PyMite, который, я думаю, также называется Python-On-A-Chip.

Он был портирован на ряд плат — в частности, он упоминает Arduino Mega, который, как вы сказали, вам не подходит, но, возможно, он поддерживается на других платах Arduino.

Однако, поскольку это версия Python «батарейки в комплект не входят», более чем вероятно, что у вас возникнет реальная проблема с запуском numpy / scipy и т.д.

Как предлагали другие постеры, реализация на C может быть путем наименьшего сопротивления.

Обновление: опять же, не специально для Arduino, но pyMCU, похоже, предоставляет python на чипе. Автор заявляет, что он может рассмотреть возможность разработки версии pyMCU для Arduino, если возникнет достаточный интерес.

Комментарии:

1. Новый проект kickstarter для «Micro Python» также может представлять интерес для некоторых людей. ( kickstarter.com/projects/214379695 /… )

2. Я полагаю, что проект Micro Python использует специальную плату и не был перенесен на Arduino. Хотя у них есть Python 3..

Ответ №2:

Я начал работу над компилятором «Little Python» для C (называемым 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 , который затем компилируется в шестнадцатеричный файл, который вы можете загрузить на свое устройство.

Предстоит пройти долгий путь, прежде чем он станет полезным, но он продвигается, и у него есть дорожная карта / etc.

В частности, ключевое отличие от Micropython (и PyMite) заключается в том, что он предназначен для компиляции на устройствах, слишком маленьких для запуска любой реализации. (Это также означает, что он сильно отличается от таких вещей, как ShedSkin, которые, в то время как компилятор Python для C предназначен для более крупных сред выполнения)

Комментарии:

1. Очень круто! Я с нетерпением жду, чтобы увидеть, как это развивается с течением времени.

Ответ №3:

Будет сложно запустить какой-либо скрипт Python непосредственно на Arduino uno. Причина в том, что это интерпретируемый язык, поэтому вам понадобится встроенный интерпретатор в дополнение к обычному текстовому сценарию. Вероятно, для всего этого в arduino uno не хватит памяти.

Что вы можете сделать лучше всего, так это найти способ скомпилировать скрипт Python в машинный код (вот как работает C / C ). Я видел проекты, делающие что-то подобное для других платформ, но (насколько я знаю) ни один из них пока не делает это успешно для Arduino uno.

вы можете посетить http://www.toptechboy.com/using-python-with-arduino-lessons / подробнее.

хотелось бы, чтобы это помогло вам. Спасибо!

Комментарии:

1. этот ответ удивительно похож на: arduino.stackexchange.com/a/116

Ответ №4:

Это не прямое решение, но в ваших обстоятельствах, если бы я был вами, я бы написал программу искусственного интеллекта на своем компьютере, а все остальное на Arduino. после этого я бы написал сервер flask с моей программой искусственного интеллекта. а затем перенаправить порт с моего маршрутизатора на локальный компьютер. наконец, сделайте запросы от Arduino к серверу.