Роботы в нашей жизни: как машины помогают человеку

Робот из пластиковых бутылок

Делать робота можно и из самого простого материала – пластиковых бутылок. Для поделки приготовьте:

  • непрозрачную бутылку из-под колы;
  • игрушечное ведерко из набора детской посуды;
  • две вилки;
  • три крышечки от пластиковых бутылок;
  • два колеса от игрушечного автомобиля, соединенные шасси.

Снизу по бокам бутылки проделываем два отверстия, в которые продеваем шасси и прикручиваем колесики. Сгибаем две вилки – это руки – и крепим к туловищу сзади на болты. На голову надеваем ведерко, к которому прикрепляем две крышечки побольше – это глаза, и одну поменьше посередине – это рот. Украшаем робота, как подскажет фантазия.

Платформа EZ-Board. Искусство роботостроения

Конечно, как ни крути, а наборы Robot Kits все-таки являются готовыми к употреблению конструкторами. Следуя инструкции, с их помощью можно получить механизм, действие которого запрограммировано разработчиками набора.

Платформа EZ-Board — уникальная во всех отношениях робототехническая платформа.

И чтобы запрограммировать работу со всем этим богатством, вовсе не требуется быть семи пядей во лбу. Программная среда EZ-Builder позволяет разрабатывать скрипты, управляющие роботом, без единой строчки кода. Точнее говоря, код, конечно же, есть, только вот от «программиста» он скрыт. А доступны ему простые в освоении инструменты подключения и изменения параметров многочисленных датчиков и приводов.

Используя платформу EZ-B, энтузиасты оживили игрушечных WALL-E.

Если же в программировании вы ас, то EZ-Robot предложит вам среду EZ-B SDK, основанную на Microsoft Visual Studio и работающую с компилятором .Net 3,5.

Пылесос Roomba сам по себе является роботом, но, дополненный платой EZ-B, он получает массу дополнительных возможностей.

Игрушки в его «лаборатории» в буквальном смысле слова оживают. Особое впечатление производит тюнингованный робот-пылесос Roomba от компании iRobot, получивший благодаря DJ Sures зрение и способность распознавать голосовые команды.

Пробуйте!

Рассмотренные робототехнические платформы — лишь малая часть того, что придумали любители роботов по всему миру.

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

Именно эту цель и преследуют наборы Robot Kits и открытые аппаратные робоплатформы. Они, возможно, ваш первый шаг к будущему хобби на всю жизнь или даже любимой профессии.

Troubleshooting

По возвращении домой меня ждал неприятный сюрприз, и хорошо, что он случился до публикации этого обзора, потому что теперь мы сразу обговорим troubleshooting. Решив попробовать подвигать рукой по максимальной амплитуде, удалось добиться характерного треска и отказа функциональности механизма мотора в локте. Сначала это меня огорчило: ну вот, новая игрушка, только собрана — и уже больше не работает.

Но потом меня осенило: если ты сам её только что собрал, за чем же дело стало? =) Я же прекрасно знаю набор шестерёнок внутри корпуса, а чтобы понять, сломался ли сам мотор, или просто недостаточно хорошо был закреплён корпус, можно не вынимая моторчика из платы дать ему нагрузку и посмотреть, продолжатся ли щелчки.

Вот тут-то мне и удалось почувствовать себя настоящим

робо-мастером!

Аккуратно разобрав «локтевой сустав», удалось определить, что без нагрузки моторчик работает бесперебойно. Разошёлся корпус, внутрь выпал один из шурупов (потому что его примагнитил моторчик), и если бы мы продолжили эксплуатацию, то шестерёнки были бы повреждены — в разобранном виде на них была обнаружена характерная «пудра» из стёршейся пластмассы.

Очень удобно, что робота не пришлось разбирать целиком. И классно на самом деле, что поломка произошла из-за не совсем аккуратной сборки в этом месте, а не из-за каких-то заводских трудностей: их в моём наборе вообще обнаружено не было.

Совет:

первое время после сборки держите отвёртку и плоскогубцы под рукой — могут пригодиться.

Я в ужасе и собираюсь передумать. Нельзя попроще?

Жестяная банка. Специально для тех, кто никогда не держал в руках сварщика, но очень хочет попробовать свои силы в робототехнике, существуют специальные конструкторы, которые позволяют делать то же самое, но быстрее. Самая известная и популярная — Arduino. Его главное преимущество в том, что это не просто игрушка, а целая экосистема: множество обучающих материалов и инструкций, видеокурсы, огромное сообщество пользователей — вы можете задать любой вопрос, от новичка до самого продвинутого. Есть и другие платформы, например суперпростой конструктор Lego Mindstorms.

Состав комплектов может быть самым разным, но в каждом есть готовая печатная плата с уже установленным микроконтроллером и всеми дополнительными деталями, необходимыми для решения простых типовых задач. Обычно карту можно подключить напрямую к компьютеру через USB. И тогда среда разработки производителя поможет вам сразу сделать первые шаги в программировании роботов. Например, зажечь лампочку на доске.

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

Участники программы «Робототехника», которую поддерживает фонд Олега Дерипаски «Вольное дело», после нескольких лет обучения могут создавать гораздо более сложные проекты и находить инженерные решения для самых разных задач. Например, разрабатываются системы автоматического раздельного сбора. Если вам кажется, что все это очень сложно, вы правы, но научиться этому может каждый.

Робот из «Лего»

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

Собирать подобный конструктор любят практически все дети от 3 до 10 лет. В особенности детский интерес увеличивается, если из деталей можно собрать робота. Итак, чтобы собрать двигающиегося робота из «Лего», необходимо приготовить детали, а также миниатюрный мотор и блок управления.

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

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

Как создать робота?

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

Бытовые роботы

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

Машина может почистить бассейн, выпечь блинчики, покормить ребёнка с ложечки или погладить бельё.

Пылесосы

В качестве примера можно привести LG Hom-Bot Square – робота, который убирается даже вдоль стен и в углах. Никаких лишних покупок не требуется: все насадки уже в комплекте. Такой помощник работает беззвучно, тщательно всасывает пыль, обходит препятствия и делает влажную чистку.

Газонокосильщик

Пример – RoboMower, который выпускается почти 25 лет компанией Friendly Robotics. Находка для владельцев загородного участка. Вы экономите время, а ещё не беспокоитесь о шуме обычной косилки.

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

Автоматизированный туалет для котов Litter Robot

Нестандартный бытовой робот. Компания Automated Pet Care Products предлагает его тем, кому надо оставить животное на несколько суток. Когда питомец закончил свои дела в лотке, машина убирает содержимое в нижний поддон, обновляя наполнитель. Litter Robot безопасен и обходится хозяевам примерно в $1 000.

Датчики препятствий

Чтобы наш робот мог ориентироваться и не врезался во всё, мы установим на него два инфракрасных датчика. Самый простейший датчик состоит из ик-диода, который излучает в инфракрасном спектре и фототранзистор, который будет принимать сигнал с ик-диода. Принцип такой: когда перед датчиком нет преграды, то ик-лучи не попадают на фототранзистор и он не открывается. Если перед датчиком препятствие, тогда лучи от него отражаются и попадают на транзистор – он открывается и начинает течь ток. Недостаток таких датчиков в том, что они могут по-разному реагировать на различные поверхности и не защищены от помех — от посторонних сигналов других устройств датчик, случайно, может сработать. От помех может защитить модулирование сигнала, но пока мы этим заморачиватся не будем. Для начала, и этого хватит. 

Как построить из LEGO?

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

Робот, построенный из конструктора LEGO, лишён обилия лестничных проходов, а также дополнительных запчастей, не относящихся к стандартным блокам. Инструкция по сборке робота из деталей LEGO в целом сходна с предыдущей: части конструкции собираются начиная с самой нижней: ноги, туловище с руками, шея и голова.

О том, как сделать робота из конструктора, смотрите далее.

Конструкция

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

Кисть вместе со всеми пальцами я сделал по образцу вышеупомянутого художника. А конструкцию предплечья уже разрабатывал самостоятельно с подгонкой под имеющиеся материалы и технические возможности. Здесь приведу модель этого узла.Микроконтроллер взял взаймы у коллег по работе. Мне попалась отладочная плата с МК STM32L152. Для моих целей этого было более чем достаточно. Навыков программирования такого железа я не имел, поэтому вооружившись интернетом удалось на базе IDE Cocos создать рабочий алгоритм для управления механической рукой. Суть алгоритма проста: 5 входов контроллера настроены как аналоговые входы и при изменении сигнала на входе соответствующим образом меняют ширину управляющего импульса для сервопривода.Для таких целей этот модуль подходит с избытком по необходимой периферии. Но другого под рукой просто не было.

В качестве сервоприводов были выбраны MG995 с металлическим редуктором и с достаточно высоким вращательным моментом порядка 10 кг/см. Диапазон ширины импульса такого привода составил — 500 … 2500 мкс, угол поворота -90 … +90°.

Робот из картонных коробок

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

  • три коробки из картона разных размеров;
  • фигурную упаковку от какой-нибудь запчасти;
  • две круглые формы для кексов из фольги;
  • синельную проволоку;
  • два картонных рулона от пищевой фольги;
  • две основы от новогодней хлопушки;
  • две бобины от скотча;
  • два CD-диска.

Приступаем к сборке нового изделия. Прежде всего, коробки следует вывернуть наизнанку, чтобы убрать с глаз долой различные надписи. Можете не выворачивать, но тогда придется обклеить коробки цветной бумагой или фольгой. Самую маленькую коробку – голову – соединяем с самой большой – туловищем при помощи бобины от скотча – шеи. Можно воспользоваться клеем, а можно работать двусторонним скотчем.

Теперь приделываем роботу штанишки – к туловищу приклеиваем коробку средних размеров.

Руки – рулоны от пищевой фольги – и ноги – основы от новогодних хлопушек – привязываем веревками. Посередине на грудь приклеиваем для объемности фигурную упаковку, а штанишки украшаем двумя дисками.

На лицевой стороне головы прорезаем два круга и вставляем в отверстия формы для кексов – это наши глаза. Рот и сигнальные антенны на макушке делаем из закрученной проволоки.

Оставшуюся бобину из-под скотча разрезаем пополам и приклеиваем по бокам головы – это уши нашей игрушки.

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

Нейронаука для роботов

По своему устройству роботы нередко копируют человека

Это касается той части роботов, которым важно имитировать человеческие действия и поведение — индустриальным машинам нейронауки не так важны

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

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

Известный во всем мире робот Pepper из Японии — пример робота, внешне похожего на человека

(Фото: Unsplash)

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

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

Индустрия 4.0

Что такое компьютерное зрение и где его применяют

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

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

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

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

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

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

Современные исследования

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

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

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

Полезные советы

Для того чтобы работа приносила вам только радость, прочитайте эти нехитрые советы:

  1. Не приклеивайте коробки друг к другу с помощью клея ПВА — он размачивает картон и не дает изделию хорошо держаться. Также не стоит прибегать к помощи клея-карандаша — он слишком ненадежный. Оптимальным решением будет клей — момент или клеевой пистолет.
  2. Дайте хорошо просохнуть слою с водоэмульсионной краской, прежде чем покрывать изделие краской из баллончика.
  3. Обрабатывайте своего робота краской из баллончика только на улице, балконе или в подъезде, чтобы не допускать вдыхания большого количества вредных испарений.

Схемы создания из металлического конструктора

Сборка робота из металлического конструктора начинается с изготовления маленьких и несложных моделей. Постепенно, по мере роста и дальнейшего развития ребёнка, подростка, задачи усложняются, собираемые роботы растут в численности используемых деталей. Профессиональные сборки робототехники включают в себя больше тысячи деталей из нескольких одинаковых и/или разных комплектов. Чтобы собрать такого робота, могут потребоваться солнечные панели, аккумуляторы, двигатели, возможно, датчики и микроконтроллеры: чем шире и разнообразнее оснастка, тем «умнее» собранная установка, что шаг за шагом приближает юного любителя мастерить к серьёзному роботоконструированию. Для создания простейшего (немеханизированного) робота из стального конструктора выполните следующие шаги.

  1. Используйте две загнутые с обоих торцов металлические пластины. Прикрепите к ним с одной из сторон – сверху, с одного из торцов более короткую, не загнутую. Все соединения выполняются винтово-гаечными соединениями.

  2. К нижним торцам – стопам робота – сзади привинтите маленькие (до 1 см) уголки. Длина ног – до 10 см, но это поможет роботу стоять на них уверенно.

  3. Начните собирать туловище: прикрепите к горизонтальной перекладине продольный уголок с треугольным построением из сплошной стали. В верхушке имеются посадочные отверстия.

  4. Прикрепите к треугольной пластине заднюю прямоугольную – это будет спина роботоконструкции.

  5. В центральной части к задней планке сверху прикрутите полоску стали на два отверстия – она послужит шеей конструкции. Затем спереди наденьте и затяните переднюю планку – она послужит как бы грудью и животом (передняя часть туловища робота).

  6. В качестве рук установите гнутые металлические полосы с вырезанной центральной канавкой. Привинтите их по бокам туловища.

  7. В качестве головы – меньшая по размеру, чем внизу, рядом с бёдрами, треугольная деталь на три отверстия. За нижнее – центральное – отверстие привинтите её к шее. Макет готов, осталось лишь загнуть боковые пластины спереди, чтобы в них зажать, к примеру, карандаш, установленный вертикально.

  8. Получился «канцелярский» робот – держатель для карандаша. Если доработать конструкцию, то к рукам можно привинтить посудину, в которой карандаши и ручки стояли бы вертикально.

  9. Конструкция может быть и массивной, собранной «по-взрослому», из профстали: применяются квадратные и прямоугольные профтрубы, круглые (обычные трубы), уголки. А также используются шарикоподшипниковые комплекты, шестерёнки, полосы и пластины, и другие элементы. Робот с шестерёнками имеет смысл моторизовать, а для большей сферы использования данная установка оснащается электронно-механическим управлением с программным блоком. Такая работа вполне по силам подростку лет 13-14, осваивающему работу на токарном и фрезеровальном станках.

Создание каркаса

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

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

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

Возможно другие проекты могут привлечь внимание из-за их сложности

Шаг 4. Весовые нагрузки

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

Опытным путём я узнал, что оптимальный вес боковых весовых нагрузок составил около 300 г, а средней – около 530 г. Эти значения отлично подошли для размеров создаваемого мною робота. После того как мне стал известен вес, мне нужно было понять, какому объёму гипса он соответствует. Я провел ряд экспериментов с гипсом и рассчитал значение плотности: Rho = 1,435 кг/л.

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

При расчёте объёма, необходимого для печати пластиковых оболочек, я применил расчётное значение плотности, после чего запустил 3D-печать оболочек соответствующего объёма.Теперь ценный совет: для распечатки весовых нагрузок я использовал полилактидный пластик. Это не водонепроницаемый материал, поэтому незатвердевший гипс может просачиваться через трещины в 3D-печати. Чтобы избавиться от этой проблемы, я с помощью кисти нанёс слой воска (для этого пришлось зажечь восковую свечу) на внутреннюю поверхность 3D-отпечатка. Теперь оболочка стала водонепроницаемой, и гипс будет надёжно удерживаться внутри неё вплоть до затвердевания.

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

Шаг 5: Программа управления роботом

Главной программой, управляющей роботом, является программное обеспечение контроллера Arduino Nano. Контроллер обрабатывает входные команды, передаваемые через USB, осуществляет точные расчёты движения, посылает импульсные команды шаговым двигателям, а также перемещает манипулятор робота вверх и вниз либо для рисования линии, либо для простого перемещения по прямой.

На первом этапе можно загрузить файлы GERBER, разработанные мной для «мозга» робота, которые я заказал на сайте JLCPCB.com, любезно предоставившего спонсорскую поддержку этому проекту. На печатную плату нанесена понятная маркировка, для её изготовления используются стандартные компоненты. Процесс пайки предельно прост. Чтобы обеспечить простоту подключения/отключения двигателей, я припаял штыревые головки к шаговому двигателю и сервоприводу. Я припаял соответствующие штыревые головки к проводам сервопривода и двум шаговым двигателям.

  1. Программируемый контроллер Arduino Nano.

  2. 2 бесшумных шаговых двигателя TMC2130.

  3. 4 цилиндрических алюминиевых конденсатора по 10 мкФ.

  4. 1 конденсатор 1206 на 330 мкФ.

  5. 1 конденсатор 1206 на 100 мкФ.

  6. 1 линейный регулятор напряжения LM7805 TO-252.

  7. 2 диода Шоттки MDD SS14, DO-214.

  8. Нажимная кнопка 6,0×3,5 мм. Сейчас эта кнопка не задействована, я просто добавил её в конструкцию, так как она может понадобиться позже.

  9. 2 четырёхштырьковые гнездовые головки JST.

  10. 1 трёхштырьковая гнездовая головка JST.

Для подачи питания на электронные компоненты я использовал зарядное устройство для ноутбука, выдающее напряжение 19,5 В, но вполне можно использовать любой имеющийся блок питания, при условии, что он выдаёт от 7 до 35 В и не менее 1,5 А.

После завершения пайки загрузите в Arduino код (см. первый шаг).

Важное замечание: не забудьте подключить мою библиотеку fork of the stepper, которую можно загрузить из моего хранилища github. Мне пришлось исключить ненужную функцию, вызывавшую ошибку – линии рисовались не прямо, а с точкой перелома

Если бы вы знали, сколько времени у меня ушло на поиск этой неисправности и отладку!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector