#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.
- PyPI — http://pypi.python.org/pypi/pyxie
- Домашняя страница — http://www.sparkslabs.com/pyxie/index.html
В частности, ключевое отличие от 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 к серверу.