Архитектура аппаратной части и ее функции.

Как уже было упомянуто, в качестве “идеи-максимум” было принято создание системы, достаточно сложной, чтобы проявления ее активности могли создать иллюзию “разумности” в глазах… ну, не знаю… какого-нибудь гуманитария… Типа, добиться от него реакции, хотя бы на уровне: “О, майлорд! Эта вещь одержима демонами! Сжечь ее!


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

Предположим, что у робота есть две некие краеугольные сущности: “мегамозг” (далее, просто “мозг”) – на самом верхнем уровне его бытия и “устройство” – на его самом нижнем уровне того же незатейливого бытия.

Обе эти сущности есть просто по факту. Сам робот – физический объект, механизм. Соответственно, по сути своей – комплекс устройств. И устройства этого механизма должны работать согласованно, должны чем-то управляться. Центральным компьютером, кучей реле, коробкой передач с шестеренками, перфорированной бумажной лентой, медным барабанчиком с пимпочками – абсолютно не важно, что это будет. Хоть голодный раб, приставленный к шеренге рычагов. Оно и будет “мозгом” этого механизма.

Мозг – один. Он сам нихрена не делает, но зато думает, принимает решения и “дергает рычаг”, когда нужно. Устройств будет много. Они не думают вообще, решений не принимают никаких, зато очень-очень быстро что-нибудь делают.

Проводя аналогии с любым из нас, можно сказать, что “мегамозг” – это наше сознание. А “устройство” – какой-нибудь палец на руке, например.

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

Чтобы избежать подобной ситуации, у нашего сознания есть “посредники-исполнители”. Все вот эти “спинные мозги” и прочее “подсознание”.

Т.о., в базовой схеме робота появляется новая сущность – “контроллер”. Их тоже может быть много. Но меньше чем устройств, т.к. один контроллер может управлять небольшой группой устройств (или только одним):

Одиночных или множественных, но таких связок все равно еще слишком много для того, чтобы оставлять мозгу время на размышления о Вечном. Как логическое продолжение развития идеи: объединить все контроллеры в группы, управляемые другими контроллерами.

И вот так, в общей схеме появляется новая сущность – “супер-контроллер”. Их тоже может быть несколько, но существенно меньше чем контроллеров. Потому, что это, обычно, весьма мощные и производительные устройства, способные управлять группой из дюжины контроллеров не поперхнувшись. Параллельно, даже, могут и сами быть контроллерами для каких-то конечных устройств напрямую.

Да, что там говорить – любой такой супер-контроллер, уже сам по себе почти что “мегамозг”! Если бы не необходимость синхронизации их работы под неким единым началом, то можно было бы на этом месте и остановиться. Для простой, какой-нибудь, конструкции, части которой действуют независимо, этого хватит. Но не в моем случае. Поэтому, супер-контроллер здесь идет всего-лишь вторым эшелоном в иерархии:

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

Мозг принимает решения и сливает их на уровень супер-контроллеров. Для него это будет всего три-пять устройств, взаимодействие с которыми для него будет вообще ни о чем. Слил в них инструкции и занялся своими делами: распознаванием этикеток на бутылках водки и анализом картинок с порнхаба. Там, следующие в иерархии, уж сами как-нибудь разберутся, сами напрягут других пигмеев, все сделают, что надо, и потом бибикнут мозгу, когда все будет готово.

И, нет, я не собираюсь “дробить” систему на еще большее количество составляющих, добавляя в нее контроллеры, управляющие контроллерами, управляющие контроллерами и т.п.

По текущим раскладам, выходит, что механической собачке нужно будет не более трех-четырех супер-контроллеров, чтобы управиться с абсолютно всем своим внутренним зоопарком, сколь бы обширным он не оказался.

Но не буду пока загадывать… Возможно их понадобится чуть больше – неясно, как оно там ажно с тремя экранами на борту будет справляться… Основной то, который на боку – прямая ответственность мозга. Хрен с ним. Но там есть еще парочка второстепенных экранов на спине, возле кнопочной панели… И хвост еще, блин, этот, на отшибе вдали от основных “нервных узлов”…

Короче – посмотрим. Даже, если этих супер-контроллеров будет десять штук (чего наверняка не будет, но – допустим). Это существенно меньше, чем то количество устройств со своими контроллерами, которые я успел нафтыкать в одну только голову.



В настоящий момент, 15 индивидуальных устройств уже работают в составе робота и жаждут поделиться собранной информацией хоть с кем-нибудь. Или сделать что-нибудь забавное. А, ведь, “стрижка только началась”… Но эта первая группа уже полностью отлажена и делает в точности то, что я хочу.

Увы, пока все еще именно “я” – как временная замена “мегамозгу”. Это мой “мегамозг” из мяса сейчас принимает решения о действиях, сливает их супер-контроллеру, получает ответы о результатах выполнения этих действий и принимает на их основе новые решения.

НО! Я уже избавлен от необходимости управлять устройствами напрямую. Не раздаю им вручную весь этот годзиллион комманд, не пытаюсь непосредственно контролировать действие каждого устройства, переводить их скрежетания в понятную для себя форму и т.п..

Моя работа с ними это:
Ствол вверх на 100 градусов с максимальной скоростью“.

Простой вызов команды в консоли на “имитаторе мегамозга” который посылает в i2c-шину 4 байта значений:

./likedo 101 21 100 0 // [ID супер-контроллера] [ID команды] [угол] [скорость]

Вот и вся моя работа, как ВРИО “мегамозга” сейчас. Вот и вся работа которая будет у “мегамозга” для управления устройством в будущем. Все остальное делает супер-контроллер, управляющей всей последующей цепочкой в иерархии компонентов.

Что все эти байты означают на его электронном уровне, как перевести их в импульсы для обмоток серво-моторов, когда крутить, сколько крутить, в какую сторону, делать проверку не выходит ли это за пределы хода моторов, коэффициенты, поправки, добавление команд в общую очередь на исполнение устройствами – это уже не моя проблема… Во многих случаях мне не нужно даже подтверждение о выполнении, т.к. это никак не влияет на последующие действия (прогундосить первые такты гимна Галифрея пищалкой, например)

Трактор – железный. Вот пускай он и работает…


О том, что все эта сферическая архитектура в вакууме означает в переводе на “пощупать”…

Устройства – понятно. Это всякие сервы, моторы, датчики, сенсоры, кнопки, динамики и прочий электронный шлак.

Единственное, что следует отметить: не имеет значения насколько устройство простое. Оно все равно – “устройство” в рамках разработанной схемы. Фоторезистор с единственным сопротивлением в цепи, подключенный напрямую к супер-контроллеру – устройство. Моторчик с лимит-свичем – ДВА устройства. Да, пускай они собраны в одном корпусе их их работу контролирует встроенная в тот же корпус крошечная платка с парой диодов. В рамках иерархии это: “устройство” мотор + “устройство” лимит-свич + “контроллер” из пары диодов.

Контроллеры, в данном конкретном случае… Этим термином я обзываю все, что управляет непосредственно устройством (устройствами), но при этом не общается с мозгом напрямую.

Зачастую, устройство и его контроллер – одна деталь. Например, сенсор звука. Его микрофон для меня – “устройство”. А плата, к которой он присобачен, которая его активность регулирует и превращает в цифровой и аналоговый сигналы – это для меня егойный “контроллер”.

Опять же, я тут сознательно не оперирую понятиями “просто”-“сложно”. Это приведет к путанице из-за слишком высокой относительности этих терминов. Устройство – делает. Контроллер – управляет действием. Их общая связка, сколь бы примитивной она ни оказалась в итоге – не будет устройством. Она останется связкой контроллер+устройство. Лично мне так удобнее о них думать. Избавляет от необходимости введения новых сущностей, типа “сложное устройство”, “простое устройство”, “устройство с контроллером”, “устройство с квантовым приблизитором на быстрых фрионах”…

Далее, вверх по иерархии… Супер-контроллеры. Те, кто общаются с мозгом напрямую. Они ЕДИНСТВЕННЫЕ, кто общается с мозгом напрямую. “Большой” или “маленький”, “сложный” или “простой” – не имеет значения. Если общается с мозгом напрямую, то он – супер-контроллер. И все тут. Даже, если в точности такая же деталь есть где-то еще, но она не общается с мозгом напрямую, то она и не будет супер-контроллером. А ее буквальная копия, которая общается – будет.

Если с самим “мегамозгом” не все еще определено однозначно, то в плане супер-контроллеров нет смысла, ни изобретать велосипед, ни вообще долго о чем-то думать. На эту роль без затей было выбрано обширнейшее семейство микроконтроллеров Arduino и их клонов.

Т.е. все вот эти нынешние “гига”, “мега”, “уно”, “нано”, “микро”, “пука”, “жожо”, “чочо” и прочие “пяни”. Трудно найти сейчас что-нибудь сопоставимое со всем этим по широте выбора, функционалу, доступности, цене и богатству информации.

Очень хороший и наглядный пример того, что я описываю. Вот, самая классическая система для управления CNC-роботом (возможно, фрезером):

В самом низу бутерброда – ардуина (UNO, похоже). В моей иерархии это – “мегамозг”. На ней сверху установлено то, что в моей иерархии устройств обзывается “супер-контроллером”. Он единственний во всем этом бутерброде, кто напрямую принимает глобальные команды от ардуины-мегамозга. Обрабатывает их и передает тому, что я называю “контроллерами”. Это вон те маленькие красные платки на самом верху – драйверы моторов. Ну и с них уже все по проводам уходит на моторы – то, что я называю “устройствами”. Просто, компактно и изящно.

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


С архитектурой аппаратной части в общих чертах разобрались. Теперь, что касается выполняемых ею функций.

Иллюстрировать тут нечего, дальше одно сплошное бла-бла-бла… Хотя могу еще “смифных кортиночек с катятами” из гугля притащить, чтобы буквы разбавить… По теме того, о чем пойдет речь далее:

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

Но будет во всем этом и “подводная часть”. Ибо нельзя создать “иллюзию жизни”, производя лишь одни прямые сознательные действия.

Поведение чего-то живого или, пускай, только имитация такого поведения для чего-то _не_живого – это не важно на самом деле. Общим для этого всего является само поведение, как таковое. А оное складывается не только из прямых осознанных действий и реакций, но – возможно, даже, в большей степени – из миллионов мелких бессознательных действий и реакций.

Инстинктивные действия, рефлексы – это и есть “подводная часть”. И их будет у моей девочки! И, по ходу, эта часть функций вырисовывается, как подводная часть айсберга – куда более обширная, чем функции прямого взаимодействия мозга с устройствами.

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

Чтобы начинающийся бардак не вышел из под контроля окончательно, пришлось этот момент формализовать и придерживаться некоей единой схемы проявления “рефлексов”.


Была разработана и утверждена к использованию следующая общая система рефлексов, доступных роботу:

  • Условные рефлексы. “Надводная часть айсберга”. Прямые действия, происходящие под полным контролем мозга.

Например, перемещаться по дому, не натыкаясь на стены. Что-то выполнять по щелчку пальцев человека. Распознавать изображения камер. И т.п…

Фактически, эти условные рефлексы и будут всем “сознанием” робота. Никакого ИИ или живого мозга у него же нет и не планируется. Прямое управление человеком, и то – в минимальном объеме. Так, что, все “сознание” этого робота – буквально есть один сплошной набор описанных в программе условных рефлексов…

Что-то напоминает? Правильно! И я уже это говорил много раз – этот робот будет девочкой 🙂

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

  • Условно-безусловные рефлексы. “Полубессознательные действия”.

Например, навострить ухо в сторону громкого звука. В этом случае мозг не контролирует действия самого уха и его движения. Мозг об этом действии вообще не знает, если только сознательно не обратит на него свое внимание. Такое действие инициируется “само-собой” просто по факту срабатывания устройств. Оно происходит всецело за пределами сознания.

Единственное, что может мозг с этим поделать – косвенно подавить такую реакцию в случае необходимости. Например, заблокирует к хренам весь мотор уха в случае срабатывания настоящего условного рефлекса: “затаиться, соблюдать неподвижность“.

Формализация: условно-безусловными рефлексами называются действия, выполняемые только и исключительно за пределами мозга, но могут им контролироваться в той или иной степени.

  • Безусловные рефлексы. Действия, которые робот не может не сделать в принципе. Его мозг не может, ни контролировать выполнение этих функций, ни подавлять их. Ни прямо, ни косвенно.

Если неожиданно тюкнуть робота пальцем по носу – он вздрогнет. Он не может не вздрогнуть. Ни супер-контроллер, ни мозг, ни, даже, сам лично я – никак не можем на это повлиять. Это – абсолютно и безоговорочно безусловный рефлекс.

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


Все эти условности поведения сознательно вносятся по ходу написания программ управления.

Если вылезает какая “условность”, которая не была заложена сознательно, то она считается ошибкой и подлежит исправлению.

Так, например, голова начала внезапно щелкать пищалкой, если я ронял рядом отвертку об стол. Такое в программу не закладывалось. Выглядело очень прикольно, конечно… И даже закралась крамольная мысль, а не начало ли там зарождаться что-то новое внутри его головы, чего не было напрямую описано кодом… Сознание?

Ага – щазз! Кривые руки там зародились и поселились. Дело было в плохо пропаянном контакте на разъеме. Уронил отвертку -> вибрация по столу -> в каркас -> на разъем -> контакт коротнул -> пищалка щелкнула. Вот и вся “жизнь”.

Такие приколы, сколь бы прикольными они ни были, рано или поздно перерастают в не очень прикольные приключения. А их нам не нать… Поэтому, все, что не описано кодом надо немедленно отловить и подавить в зародыше.


Не имею ни малейшего представления во что все это выльется и чем закончится. Поможет ли все это превратить мою механическую собачку в нечто большее, чем просто “машинка на радиоуправлении” – время покажет…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.