Оглавление:

Самообучающийся хаотический робот: 3 шага
Самообучающийся хаотический робот: 3 шага

Видео: Самообучающийся хаотический робот: 3 шага

Видео: Самообучающийся хаотический робот: 3 шага
Видео: Как из хаоса рождается порядок? [Veritasium] 2024, Ноябрь
Anonim
Самообучающийся хаотический робот
Самообучающийся хаотический робот

Вас интересует машинное обучение, ИИ и роботы? Вам не нужно работать в каком-нибудь модном университете. Это описание моего хаотичного робота. Это очень простой робот, который демонстрирует, как использовать самообучающийся код и как реализовать его на платформе Arduino, в данном случае - Arduino. Это очень дешевая платформа!

Код развивает робота так, чтобы он учился ползать. Он получает обратную связь от мыши, которую тащат назад. Код «генетический». Это означает, что некоторые особи проходят тестирование, а самые лучшие остаются и у них будут дети. Это означает, что код эволюционирует.

Шаг 1. Аппаратное обеспечение, также известное как робот

Аппаратное обеспечение AKA the Robot
Аппаратное обеспечение AKA the Robot
Аппаратное обеспечение AKA the Robot
Аппаратное обеспечение AKA the Robot
Аппаратное обеспечение AKA the Robot
Аппаратное обеспечение AKA the Robot

Тебе нужно:

- 1 Arduino Due

- 8 микросерво

- 1 мышь PS / 2

- 1 сменщик

- какой-то вариант сенсорного экрана или аналогичный, мне надоел сенсорный экран и сварил свой.

-провода

-внешний источник питания 5В для сервоприводов

- немного металлолома, немного клея и немного стальной нити. И лента!

Так что положите Due на пол. Оберните сервоприводы кольцом вокруг него. Сложите их вместе с помощью металлолома, клея и ниток. Это часть хаоса! Поскольку он хаотичен по своей конструкции, невозможно определить, как его переместить, чтобы заставить его ползать. Вот почему самообучающийся код - лучший способ!

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

Подключите сервоприводы к должному, в моем случае они подключены к D39, 41, 43, 45, 47, 49, 51, 53.

Подключите сервоприводы к внешнему источнику питания 5 В. Для этого соорудите какой-нибудь щиток или используйте щиток датчика или что-то подобное. НЕ питайте сервоприводы от вывода 5V dues, этого недостаточно, Due сгорит. Я использовал небольшую плату-прототип, чтобы распределить напряжение 5 В на все сервоприводы. На этой плате также находится переключатель уровня для тактовой частоты мыши PS / 2 и линий передачи данных. Плата также питает мышь 5В. Не забывайте подключать заземление от внешнего источника питания к заземлению Arduino! На схеме показано, как все это соединить.

Подключите PS / 2 к источнику питания (5 В) и заземлению. Подключите линию синхронизации и данных PS / 2 к Due через переключатель уровня. (должен идти 3,3 В, PS / 2 идет 5 В). Подключите часы на D12 и данные на D13.

Для получения подробной информации о протоколе PS / 2 это очень хорошее руководство:

www.instructables.com/id/Optical-Mouse-Od…

Библиотека PS / 2 от jazzycamel, которую я использовал:

Шаг 2: Код

Код
Код

Сначала позвольте мне сказать: я НЕ программист. Некоторые части очень обширны, опытный программист, конечно, может сократить их и так далее.

Код является самообучающимся, и это суть проекта. Это самое интересное! Это означает, что робот развивается и становится все лучше и лучше, в этом случае он все лучше ползет. Самое удивительное в этом то, что робот будет развиваться во всем, что вы ему ответите. В этом случае он перетаскивает мышь PS / 2, и чем дольше она перетаскивается, тем больше очков она получает.

Это также означает, что вы можете использовать этот код, чтобы научить своего робота делать что-то еще, если это измеряется и передается обратно роботу!

Как видно на изображениях, мышь тянется на тонком шнурке. Сначала втащил мышку-кабель. Однако кабель довольно жесткий, поэтому робот научился встряхивать мышь, а не тянуть ее. Встряхивание приводило к звездным часам…

Код использует 50 человек. Ядро этого - массив 50x50 байт.

Индивидуум - это массив байтов. Когда человек используется для запуска робота, этот человек отправляется в функцию в коде, называемую «tolken».

В начале цикла есть 8 переменных m1, m2, m3, m4, m5, m6, m7 и m8 (по одной для каждого сервопривода). В этом роботе все они имеют постоянные начальные значения. В «tolken» mś преобразуются в цикл case / swich в зависимости от значений индивида. например, значение «1» выполняет следующее: m1 = m1 + m2.

Если индивидуум: 1, 2, 3, 0, 0, 0, 0….. тогда mś будет преобразовано следующим образом:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Толкен представляет собой список из 256 различных математических операций, поэтому каждое возможное значение массива индивидов представляет собой математическое изменение значений m.

Процесс толкена выполняется 4 раза, считывание показаний происходит между каждым кругом, генерируя четыре различных мотор-кода для каждого «m». Моторкоды - это значения, которые позже отправляются на сервоприводы.

На каждом этапе развития 4 человека соревнуются в ползании. Двое лучших будут родителями двух младенцев, младенцы заменят двух худших. Когда рождаются дети, сращивание «генетического кода» от одного родителя обменивается на кусок от другого родителя, в результате чего создаются два новых особи.

Если ни один индивид вообще не работает, произойдет мутация индивидов, чтобы порождать новых.

Вы можете найти код на GitHub:

Шаг 3: Как тренировать?

Это сложная часть. Чтобы тренироваться правильно, вам нужно «сбрасывать» его после каждого бега. Это означает, что вы должны каждый раз ставить его в одно и то же положение.

Я поместил несколько контрольных точек в код, чтобы гарантировать, что робот находится в исходном положении.

Так что выровняйте робота и дайте ему поработать.

Он проверяет 4 человек, а затем выбирает двоих из лучших, которые станут родителями. После замены худшего на младенцев он распечатывает некоторые данные о производительности людей. Он также печатает массив 50x50. Целесообразно скопировать это на лист Excel или аналогичный. (или напишите необходимый код в процессе обработки). Если время сбрасывается (это происходит по разным причинам), вы не потеряете свою тренировочную работу. Вы можете скопировать / вставить массив в код и продолжить обучение, если вы его оставили.

Мой робот научился ползать через пару часов. Скачайте видео, чтобы посмотреть, как оно ползет. Это пошло не в том направлении, в котором я думал!

Также попробуйте разные этажи! Лучше всего мой робот показал себя на нейлоновом ковре.

Возможные улучшения:

1. Было бы лучше иметь отдельный нано, чтобы считывать данные с мыши PS / 2 и передавать обработанное расстояние, пройденное через последовательный порт, в нано. Чтение моей мыши PS / 2 немного шаткое. Это причина того, что мышь читает / очищает части кода.

2. какой-то испытательный стенд, который вернул робота в исходное положение, ускорил бы обучение.

3. Думаю, будет разумнее тренировать его немного медленнее, чем я. Более медленное обучение гарантирует, что его тренируют «в правильном направлении». Возможным способом могла быть средняя производительность нескольких тестовых прогонов.

Рекомендуемые: