|
Глава 10. Блок "отъезд"Блок "отъезд" наделяет Бастера некоторым автономным управлением и превращает его в весьма независимое создание - Бастер теперь мчится по полу, то натыкаясь на стены и другие предметы, то отъезжая от них. Он может вести себя таким образом под управлением оператора или без него до тех пор, пока его аккумуляторы не разрядятся на 80%. Блок "отъезд" совершенно необходим для независимого поведения Бастера. Без него только оператор может отвести Бастер от какого-либо предмета, мешающего движению. Поэтому это действие наделяется наивысшим приоритетом в системе и занимает первое место в иерархии действий в блоке выбора команды (см. табл. 9.1 гл. 9). Будучи самым приоритетным, этот блок при работе блокирует все другие блоки, подающие команды на вход дешифратора команд. Общие принципы работыОсновными контактными поверхностями Бастера служат передняя, задняя и боковые поверхности корпуса. Например, лобовой удар в стену представляет собой контакт спереди, а наезд на предмет при движении назад дает контакт сзади. Боковые контакты обычно имеют место, когда машина движется вдоль стены. Если обращать внимание лишь на то, какие контактные поверхности сработали и отвлечься от всего остального, то можно выделить всего 16 возможных комбинаций, которые перечислены в столбце "состояние на входе" табл. 10.1. Действия, наиболее подходящие для каждого отдельного случая, приведены в столбце "ответ". Например, контакт только на левой стороне корпуса (ТОЛЬКО СЛЕВА) вызывает движение Бастера вперед с поворотом вправо. Половина комбинаций входных сигналов вызывает двигательные ответы, в результате которых Бастер отъезжает от препятствия. Все ответы этого типа длятся 2-5 с. Остальные комбинации представляют собой своего рода ловушки - ситуации, из которых Бастер не может выбраться под управлением описываемого блока. Предположим, например, что Бастер попал в наихудшую ситуацию, при которой сработали все четыре контактные поверхности. В этой ситуации СПЕРЕДИ/СЗАДИ/СЛЕВА/СПРАВА от Бастера можно ждать лишь того, что он остановит двигатели для экономии энергии и подаст сигнал, прося помощи - именно так он и поступает в этих аварийных условиях. В ответ на аварийные условия логические схемы блока формируют команду 0000 (RSTO) и сигнал тревоги, который запускает сирену. Так как во время аварийной ситуации Бастер находится под управлением блока "отъезд", ни одно из "естественных" действий Бастера не может быть реализовано. Единственный способ запустить его снова - отодвинуть вручную или заблокировать действие "отъезд" и вывести Бастера из ловушки, подавая команды с помощью панели ручного управления. После отпускания контактов Бастер автоматически выходит из режима отъезда. В столбце с надписью "вход" табл. 10.1 приведены 4-разрядные двоичные слова, показывающие состояние четырех основных контактных датчиков. F означает передний контакт, R - задний, RT - правый и LT - левый. Таблица 10.1. Логическая таблица истинности блока 'Отъезд' Слова В в столбце "команда" - управляющие слова, которые посылаются в блок выбора команды и затем поступают на вход дешифратора команд. Обратите внимание, что слова В соответствуют действиям, перечисленным в столбце "ответ", и управляющим словам, перечисленным в табл. 6.1. В колонке ВAL указывает аварийные (ALARM) ситуации. Технические характеристики блокаЛогические схемы, описываемые в настоящей главе, довольно успешно справляются с возложенными на них задачами. Тем не менее датчики контакта с твердыми предметами могут быть значительно усовершенствованы. В настоящее время я использую простую схему расположения контактов, которая недорога и надежна на 100%. Приведенные схемы расположения контактов следует рассматривать как возможные варианты; вы можете использовать их согласно описанию или придумать новую модификацию, если она совместима с логическими схемами. Логические схемы блока не так сложны, как они могли бы быть, так как первоначальные разработки требовали слишком больших расходов и я решил пожертвовать некоторыми возможностями, чтобы избежать затрат по их реализации. Результатом стал набор действий, который заслуживает некоторого пояснения. Единственный контакт слева или справа вызывает поворот, который уводит Бастер от предмета. В обоих случаях движение осуществляется вперед и нарушает общее направление движения Бастера, если до момента контакта он двигался назад. Однако эта смена направления редко вызывает какие-либо сложности, так как Бастер возвращается в исходное состояние после окончания действия "отъезд". Другой недостаток связан с тем, что блок подает команды в течение некоторого времени. Это время составляет от 2 до 5 с в зависимости от проведенной вами регулировки. В большинстве случаев действительно необходимо, чтобы команда выполнялась в течение некоторого времени, но при боковых контактах этого не требуется. Однако эта задержка во времени также не препятствует текущей активности Бастера: в случае бокового контакта он отъедет от стены несколько дальше, чем это нужно на самом деле. Последний недостаток проявляется тогда, когда одновременно срабатывают оба боковых контакта. Возможно, Бастер мог бы выбраться из такой ситуации, двигаясь медленно вперед или назад до тех пор, пока контакты с предметами не прекратятся, после чего он должен был бы развернуться, чтобы не попасть в такую ситуацию снова. Для такого управления требуется схема, задающая последовательность действий, а она оказалась слишком дорогой; следует также учесть, что Бастер редко попадает в такие ситуации. Взвесив все обстоятельства, я решил считать срабатывание двух боковых контактов аварийным состоянием, т. е. ловушкой. Последовательное срабатывание контактов не представляет для Бастера никаких сложностей. Предположим, Бастер натыкается на какое-либо препятствие и начинает отъезжать, на что требуется определенное время. Однако прежде, чем это время истечет, он натыкается на новое препятствие. Новое состояние контактов сбрасывает начало отсчета времени и вызывает новое действие, соответствующее новой комбинации контактов. Иными словами, любая исполняемая команда может быть сразу же заменена другой, как только возникает в этом необходимость. Как-то раз моя система Бастер II забрела в стенной шкаф для одежды. В течение некоторого времени Бастер выглядел очень растерянным, блуждая от одной стены к другой, однако в конце концов он нашел выход - правда, незадолго до того, как его аккумуляторы разрядились. Теоретически может показаться, что Бастер способен попасть в такие ситуации, когда, пытаясь отъехать от препятствий, он попросту "зацикливается" между двумя близко расположенными предметами. Например, наткнувшись передом на стену, Бастер будет отъезжать назад и поворачивать, натыкаясь при этом на другую стену. Это столкновение может вынудить его развернуться и снова наткнуться на первую стену. После этого он снова натыкается задом на вторую стену, затем опять на первую и так далее. Однако этот процесс не может длиться слишком долго. Бастер редко движется по одной и той же траектории дважды, даже получая одну и туже последовательность команд. Довольно большие механические люфты в приводах движения и поворота в конце концов меняют траекторию "зацикливания" таким образом, что Бастер на одну из стен больше не натыкается. При условии, что аккумуляторы не разрядятся, Бастер всегда сам выбирается из ситуации, не отмеченной как ловушка. Наделение этого блока высшим приоритетом ставит его в особое положение. Единственная возможность заблокировать реакцию Бастера на столкновение - вручную включить тумблер S1х на местной панели ручного управления. После включения блока в систему этот ключ будет помечен "блокировка отъезда", но и после этого тумблером следует пользоваться только для проведения специальных проверок. После наладки блока "отъезд" будет задействован и сигнал основного состояния, который был описан в предыдущей главе. Система Бастер II будет задавать машине режим движения вперед с максимальной скоростью до тех пор, пока не случится одно из двух: 1) оператор возьмет управление на себя или 2) Бастер наткнется на что-либо и перейдет в режим отъезда от препятствия. После окончания этого действия система автоматически вернется в основное состояние, и Бастер снова помчится вперед. Имея основное состояние и реагируя на столкновения, Бастер приобретает некоторые элементы независимости - характеристика, редко встречающаяся среди современных машин. Действительно, вам больше не нужно придумывать, как заставить Бастера сделать что-либо любопытное, - задача состоит в том, как удержать его от чрезмерной активности. Бастер становится похожим на возбужденного щенка: он забавен, чрезмерно активен и непредсказуем в своих действиях. Развлечение омрачается только неизбежной разрядкой аккумуляторов. Эта проблема в окончательном виде будет решена в системе Бастер III. Подробная теория работыНа рис. 10.1 приведена схема соединений в блоке "отъезд". Действие, управляемое этим блоком, начинается при замыкании одного или более контактных датчиков, в результате чего на входную плату блока поступают сигналы +5 В. Входная плата вырабатывает ряд логических сигналов, соответствующих сработавшим датчикам контакта. Затем шифратор преобразует этот набор сигналов в соответствующие управляющие слова. Выходная плата задает время исполнения команд, а при необходимости генерирует сигнал аварии. Рис. 10.1. Схема соединения в блоке 'отъезд' С выходной платы 4-разрядные управляющие слова поступают на вход D1 (высший приоритет) платы селектора команд с высоким приоритетом. Управляющий сигнал блока Bf обеспечивает передачу управляющих слов на вход дешифратора команд движения и поворота. Набор контактных датчиковПростейшая работоспособная конфигурация контактных датчиков приведена на рис. 10.2. В этом случае датчики располагаются на передней, задней и боковых поверхностях шасси Бастера. Датчики представляют собой снабженные рычажками микропереключатели с одной парой контактов. К каждому датчику прикрепляется длинный буфер, изготовленный из алюминиевой проволоки, предназначенной для сушки белья, благодаря чему увеличивается область чувствительности датчика. Буферы располагаются на уровне порядка 1,5 см от пола, так что они реагируют на соприкосновение как с низко расположенными предметами, так и с более высокими. Рис. 10.2. Логические уравнения для восьми контактных датчиков Как уже упоминалось в этой главе, имеются определенные трудности, связанные с разработкой и созданием практичной, безотказной системы обнаружения столкновений. В только что описанной системе чувствительность датчиков падает по мере приближения к краю буферов. Преодолеть это затруднение можно путем использования более коротких буферов и большего количества датчиков (см. рис. 10.2,б). Логические схемы рассчитаны на четыре входных сигнала, поэтому для сведения восьми выходных сигналов в усовершенствованном варианте расположения датчиков к четырем основным требуется некоторая схема. Логические микросхемы, изображенные на рис. 10.2,б, можно установить на небольшой печатной плате, которая затем закрепляется в любом удобном месте. В табл. 10.2 приведены логические уравнения работы этой небольшой схемы. Вторая трудность создания системы обнаружения столкновений состоит в том, что схема на рис. 10.2 не может реагировать на объекты, на которые наталкиваются только верхние части машины. Предположим, например, что Бастер заезжает под кухонный стул. Весьма вероятно, что при этом не будет задет ни один из низко расположенных датчиков, но стойка печатных плат может удариться в сиденье стула. Один из способов исправить этот недостаток состоит в том, чтобы разместить на поверхности стойки второй набор контактных датчиков, соединив их параллельно с нижними датчиками. Однако верхние и нижние датчики должны быть развязаны с помощью диодов, чтобы предотвратить короткое замыкание источника +5 В (В) (рис. 10.3). Рис. 10.2. Расположение и схемы контактных датчиков. а - набор из четырех датчиков; б - более чувствительный набор из восьми датчиков, который полностью совместим с входной логикой для четырех датчиков. ИС2, 3-3И-НЕ 7410 (Radio Shack 276-1807) Рис. 10.3. Способ параллельного подключения контактных датчиков верхнего уровня к имеющимся датчикам нижнего уровня. а - набор из четырех датчиков - одна из четырех одинаковых схем; б - набор из восьми датчиков - одна из восьми одинаковых схем По своему опыту знаю, что попытки разработать систему датчиков, способную обнаружить любую мыслимую опасность, могут довести конструктора до отчаяния. А если к тому же вам захочется установить "усы" для обнаружения уступов типа ступеньки, то вся конструкция покажется вам просто необъятной. Чтобы как-то ограничить себя, приходится в каком-то месте подводить черту, хотя это означает, что некоторые проблемы остаются нерешенными и, не исключено, что из-за этого Бастер однажды не свалится с лестницы. Входная плата блокаВходная плата, схема которой приведена на рис. 10.4, служит буфером входных сигналов, поступающих от контактных датчиков. Она выдает сигналы датчиков как в прямом, так и в инверсном виде. Рис. 10.4. Схема входной платы блока. R1-R16-4,7 кОм; ИС1-ИС3 - 6-НЕ 7404 (Radio Shack 276-1802) Рассмотрим снова ситуацию, когда Бастер наталкивается на стену передним контактным датчиком. В момент столкновения сигнал на входе F скачком возрастает от 0 до +5 В, а выход первого инвертора падает от +5 до 0 В. Таким образом, вывод 1-12 - выход F'. Этот сигнал инвертируется еще раз вторым инвертором, на выходе которого 1-2 появляется сигнал F, нарастающий от 0 до +5 В. Все восемь схем входной платы идентичны описанной схеме. Входы X используются для будущих экспериментов с другими типами датчиков контакта, положения и движения. До тех пор, пока входы Х3 и Х4 не потребуются, ИС 3 можно не устанавливать на печатную плату. ШифраторЧетыре основных логических сигнала контакта поступают с входной платы непосредственно на входы платы шифратора, схема которой приведена на рис. 10.5. Шифратор преобразовывает входную комбинацию сигналов датчиков контакта в соответствующие управляющие слова - команды, в конечном итоге определяющие, что должен делать Бастер, чтобы отъехать от препятствия. Рис. 10.5. Схема платы шифратора. ИС1 2-2-4И-НЕ 7420 (Radio Shack 276-1809), ИС3, 4 - 3-3И-НЕ 7410 (Radio Shack 276-1807) Логическая схема платы дешифратора реализует таблицу истинности, приведенную в табл. 10.1. Логические уравнения табл. 10.3 переводят таблицу истинности в такую форму, из которой ясно видно происхождение разрядов В8, В4 и В2. Обратите внимание, что на выходе шифратора отсутствует разряд В1. Это определяется тем, что выход блока "отъезд" В1 всегда равен 0. Этот постоянный сигнал формируется на выходной плате блока. Таблица 10.3. Логические уравнения шифратора Сигнал Bi появляется при замыкании любого контакта и исчезает в тот момент, когда Бастер отъезжает от препятствия. Основное назначение этого сигнала - задавать начало отсчета времени для времязадающих схем выходной платы. Выходная плата блокаВыходная плата задает определенную длительность реакций Бастера на столкновения. Например, при натыкании на стенку передом Бастер должен от 3 до 5 с двигаться назад, делая правый поворот. Что именно делать, определяет плата шифратора на основании комбинации входных сигналов, получаемых ею от входной платы блока. Когда Бастер отъезжает от предмета, все контакты размыкаются, но Бастер не должен останавливаться именно в этот момент, так как расстояние от предмета может составлять лишь несколько дюймов. Таким образом, блок "отъезд" должен выдавать команду, задающую отъезд от препятствия, в течение нескольких секунд, что исключает возможность того, что Бастер тотчас снова наткнется на препятствие. Другими словами, задающее реакцию управляющее слово, которое генерируется платой шифратора, должно запоминаться на несколько секунд после того, как контакты разомкнутся. Основой схемы запоминания служит 4-разрядный регистр- защелка (рис. 10.6). Три выхода В' платы шифратора поступают на первые три входа 4-разрядного регистра-защелки 7475 и появляются на выходах В8, В4 и В2, когда регистр переводится в состояние приема информации путем подачи положительного напряжения на выводы 3-4 и 3-13. Вход регистра 3-12 заземлен - это означает, что выход В1 всегда будет равен 0, что согласуется с форматом команд в табл. 10.1. Рис. 10.6. Схема выходной платы блока. ИС1, 4-4-2И-НЕ 7200 (Radio Shack 276-1801), ИС2 - сдвоенный таймер 556 (Radio Shack 276-1728), ИС3 - 4-разрядный регистр-защелка 7475 (Radio Shack 276-1806) Регистр воспринимает входные сигналы, когда на выводы 3-13 и 3-4 подан высокий потенциал, и находится в режиме хранения при низком уровне на этих выводах. Любое изменение входных сигналов, происходящее в то время, когда регистр находится в режиме хранения, не проходит на выходы (см. пример на рис. 10.7). Рис. 10.7. Работа регистра-защелки. а - новое управляющее слово, поступающее на входы 'считывается' прямо на выход; б - код хранится в регистре; в - код на выходе не меняется, несмотря на новое состояние входов; г - на входы поступают новые значения, но регистр по-прежнему хранит старый код; д - новые значения 'учитываются' прямо на выход; е - новый код хранится в регистре Управляющий сигнал регистра поступает с выхода F1 - первой из двух времязадающих схем выходной платы блока. При работе F1 высокий уровень на ее выходе устанавливает регистр в режим приема информации, и любое двоичное слово, поступающее на входы регистра, появляется и на выходах. В конце работы F1 ее выход становится равным 0, и в регистре остается последнее слово, поступившее на его входы, пока схема F1 не будет запущена снова. F1 запускается инвертированным сигналом Bi, который, как было описано в предыдущем разделе, сигнализирует о замыкании какого-либо контакта. Из этого следует, что отсчет времени схемой F1 всегда запускается при замыкании контактных датчиков. Временной интервал работы F1 определяется величинами R1 и С2. Приведенные на рис. 10.6 величины задают длительность порядка 0,1 с. Таким образом F1 задает считывание в регистр состояния контактных датчиков в конце 0,1 - секундного интервала времени с момента первого контакта. Схема F1, однако, лишь управляет считыванием состояния датчиков в 4-разрядный регистр-защелку. Длительность реакции на столкновение задается схемой F2. Она начинает отсчет времени с конца интервала, определяемого F1. Длительность работы F2 определяется величинами R2, R3 и С4. С помощью переменного резистора R3 вы можете установить длительность интервала, соответствующую конкретным параметрам вашей системы. Другим выходным сигналом является управляющий сигнал блока Bf, который обеспечивает прохождение 4-разрядного управляющего слова через схемы селектора команд (гл. 8 и 9) на вход дешифратора команд движения и поворота. Bf генерируется выходной платой путем логического сложения сигнала Bi с выходом схемы F2. Таким образом управляющее слово, вырабатываемое блоком, поступает на вход дешифратора команд с момента срабатывания любого из датчиков до истечения интервала времени, задаваемого F2. В случае аварийной ситуации благодаря Bi сигнал Bf сохраняется и после истечения этого интервала времени. На рис. 10.8 приведена временная диаграмма работы выходной платы блока. Любое столкновение, требующее двигательной реакции, обычно порождает "нормальный цикл отъезда". При появлении сигнала Вi, указывающего на замыкание контакта, на выходе F1 на 0,1 с появляется высокий потенциал, дающий некоторое время для запоминания в регистре команды, вызвавшей реакцию. В это же время появляется сигнал Bf, подающий команду на вход дешифратора команд. Рис. 10.8. Три типа временных диаграмм: нормальная, прерванная и аварийная Исчезновение сигнала F1 точке 1 на рис. 10.8 запускает F2, "защелкивая" команду и начиная отсчет времени ее исполнения. По мере того как Бастер будет исполнять занесенную в память команду, он отъедет от препятствия и сигнал Bi исчезнет (точка 3 на рис. 10.8). На выходе Bf по-прежнему сохраняется высокий уровень. В конце интервала исчезнет F2 (точка 4), а вместе с ним и Bf. Система выходит из-под управления блока "объезд" и переходит в новый режим в соответствии с таблицей приоритетов. На рис. 10.8 показано также, что произойдет, если во время реакции на первое столкновение Бастер наткнется еще на что-то. Вторичное срабатывание датчиков в точке 8 прервет текущий ответ, так как в регистр запишется и будет храниться в нем новое слово. Схема F2 также сбрасывается, и с этого момента все будет осуществляться как в нормальном цикле. Аварийный цикл на рис. 10.8 показывает, что происходит в аварийной ситуации - считается, что Бастер попал в ловушку. Одновременно со срабатыванием датчика появляется сигнал Bi, но так как Бастер не движется, он так и останется до тех пор, пока вы не поможете Бастеру. В этот момент (точка 15 на рис. 10.8) сигнал Bi исчезнет, и действие закончится. Сигнал аварийного состояния BAL появляется в любой из аварийных ситуаций, показанных в табл. 10.1. Однако он не используется до тех пор, пока не будет изготовлена и установлена плата звукового сигнала, рассматриваемая в гл. 11. Установка и проверка блока "отъезд"Сконструируйте один из наборов контактных датчиков, приведенных на рис. 10.2 и 10.3, и соберите на трех платах все схемы. Осуществите соединения в соответствии со схемой распайки на рис. 10.1. Пометьте тумблер S1x на местной панели ручного управления как "блокировка отъезда". Работу блока следует проверять с отключенными двигателями движения и поворота. По светодиодам панели индикации можно следить за командами, поступающими на вход дешифратора команд от блока "отъезд". Предварительная проверка блокаЭтап 1. Установите следующие состояния тумблеров на все время проведения предварительной проверки: "Местный/дистанционный": местный. Это положение тумблеров передает управление местной панели ручного управления. "Блокировка отъезда": выкл. Это разрешает работу блока. "Подача местной команды": вкл. Это разрешает поступление команд от панели управления на вход дешифратора команд. На панели управления набрано управляющее число 1111 (FFAS). Это подает команду 1111, если более приорететный блок "отъезд" не работает. Все остальные тумблеры местной панели ручного управления, за исключением S2x и S3x;, выключены. В этот момент все четыре индикатора должны светиться. Система воспринимает управляющее слово 1111 от панели управления, так как в этот момент она является самым приоритетным блоком. Этап 2. Отрегулируйте потенциометр, задающий длительность реакции, следующим образом. Установите регулировку на максимальную длительность, повернув движок потенциометра до предела по часовой стрелке. На мгновение замкните передний контактный датчик и заметьте реакцию панели индикации. Индикаторы должны показывать двоичный код 0010 в течение 5 с, после чего высветить 1111. Если реакция была иная, проверьте все логические схемы и распайку блока. Этап 3. Проверьте все указанные в табл. 10.1 не аварийные ситуации. Панель индикации должна в каждом случае показывать соответствующие реакции блока, после чего высвечивать 1111. Для проверки систем с набором из восьми контактных датчиков можно воспользоваться логическими уравнениями табл. 10.2. Этап 4. Проверьте аварийные ситуации, подсоединив вольтметр к выходу BAL на выходной плате блока. Имитация аварийной ситуации путем замыкания соответствующих комбинаций контактов влечет за собой следующие изменения: 1) панель индикации показывает 0000 (все индикаторы выключены); 2) напряжение на выходе BAL возрастает от 0 до +5 В. Показания панели индикации должны измениться от 0000 на 1111 в течение 3-4 с после отпускания контактов. Этап 5. Проверьте работу тумблера "блокировка отъезда" путем его включения. Тумблер работает нормально, если панель индикации показывает 1111 даже после срабатывания датчиков. Выключите тумблер "блокировка отъезда", прежде чем проводить дальнейшие проверки и эксперименты. Проверка работы блока на полуЗадайте команду 0000 (RSTO), чтобы остановить все действия, и подайте питание на двигатели движения и поворота. Полностью зарядив аккумуляторы, поставьте Бастера на пол и направьте его на стену. Задав команду 1111 (FFAS), следите за движением Бастера. Столкнувшись со стеной, он должен начать двигаться назад, поворачивая при этом вправо. Если длительность реакции установлена правильно, Бастер должен отодвинуться от стены и стать почти параллельно ей к тому моменту, когда система передаст управление на команду 1111. Если время слишком велико, Бастер уткнется задом в ту же стену раньше, чем блок "отъезд" прекратит свою работу. В этом случае остановите машину (задав 0000) и поверните движок потенциометра слегка против часовой стрелки. Если, напротив, время будет слишком мало, Бастер наткнется на стену через несколько секунд после того, как он отъехал от нее. В этом случае следует заменить резистор R2 на выходной плате блока более высокоомным. Включение основного состоянияБастер теперь готов к работе, и для реализации всех его возможностей нужно включить в систему основное состояние. До настоящего момента в процессе проверки команда 1111, которая подавалась с ручной панели управления, имитировала основное действие. Тем не менее желательно иметь возможность отключить ручное управление, если Бастер сможет выполнить эту команду самостоятельно. Отсоедините выход тумблера S'8f от платы буфера и соедините проводом выход платы управления селектором GDD со входом буфера S8f. Заизолируйте конец провода, идущего от тумблера, чтобы он не мог закоротить соседнюю схему. Наконец, соедините вместе все входы D8 платы селектора команд с низким приоритетом и подключите их в наиболее удобном месте к источнику +5 В. Благодаря этому сигнал GDD будет подавать команду 1111 (если Бастеру не задано что-либо другое). Теперь Бастер готов к демонстрации; он мчится с полной скоростью вперед и самостоятельно отъезжает от предметов. Он может также выполнять команды оператора, которые подаются с помощью панели ручного управления, когда включен тумблер "подача местной команды". |
|
|||
© ROBOTICSLIB.RU, 2001-2019
При копировании материалов проекта обязательно ставить ссылку на страницу источник: http://roboticslib.ru/ 'Робототехника' |