Pull to refresh

Про неправильное использование вентиляторов, глобусов и сов или как НЕ нужно входить в It

Small Basic *Robotics
Sandbox
Про сов и глобусы

Подразумевается фраза "натянуть сову на глобус", смысл ее я полагаю вы понимаете

Небольшое обоснование

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

Как я начинал

Я участвовал в WRO с 8 или 9 класса, начал заниматься робототехникой (как бы это не звучало пафосно) класса с 5. Почти всегда это было на наборах от LEGO​ MINDSTORMS​ - сначала на Nxt, потом (когда вышел новый) на Ev3.

Робот для старшей категории 2019 года, ссылка https://www.luzernerzeitung.ch/amp/zentralschweiz/zug/bildstrecke/vorausscheidung-fuer-die-world-robot-olympiad-in-rotkreuz-ld.1118340
Робот для старшей категории 2019 года, ссылка https://www.luzernerzeitung.ch/amp/zentralschweiz/zug/bildstrecke/vorausscheidung-fuer-die-world-robot-olympiad-in-rotkreuz-ld.1118340

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

Но вот для "сложных" олимпиад (раскрою смысл позднее), набор, я считаю, не подходит от слова совсем.

Про WRO

Это такая мировая олимпиада по робототехнике (собственно расшифровка World Robot Olympiad). На данный момент имеет несколько категорий Wedo (для начальной школы), младшую, среднюю, старшую (для более "сознательных школьников" - деление по возрастам) и футбол (почти как RoboCup но без Arduino). Есть еще студенческая категория, но она представлена в России достаточно грустно.

Категорию по роботу определить не смог, но вот ссылка https://pikabu.ru/story/wro_2017_rossiyskie_predstaviteli_vzyali_tret_vsekh_medaley_5483589
Категорию по роботу определить не смог, но вот ссылка https://pikabu.ru/story/wro_2017_rossiyskie_predstaviteli_vzyali_tret_vsekh_medaley_5483589

Про категории

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

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

Для начала про датчики (на примере датчика цвета/освещенности - здесь они меняют свой режим) - здесь есть выбор - брать и использовать стандартные идущие из коробки - работают по uart, в целом летают як истребитель (по местным меркам), но вот расстояние у них не очень из-за чего вам нужно будет регулярно подъезжать "близко" к объектам поля чтобы понять их цвет, а следовательно терять время на развороты и прочее.

Или использовать датчик сторонней фирмы (да, разрешена ровно одна) - использует он уже i2c причем почему-то просадка будет очень большой - условно у вас всего 10 считываний в секунду и при этом расстояние чутка больше. Может он стоит как и оригинал? - Нет, он стоит как крыло от самолета (в оригинале - 50$, в России умножайте на 1.5-2) в результате - вам нужно заморочиться, чтобы он давал преимущества.

Почему нет чего-то среднего я не понимаю (только если не вспомнить что фирма изготовитель второго являлась спонсором олимпиады). И так во всем.

Сборка робота

Как вы думаете насколько опыт сборки робота на Лего релевантен (ни на сколько ). Но может это хоть делать очень удобно? - Нет, регулярно вам нужны будут оси (детали имеющие форму вытянутого креста) не на стандартные размеры (обычно целые числа, измеряющиеся в отверстиях балок), а на условно 4.5, и что делать в таком случае остается непонятным (точно знаю что кто-то подпиливает и не говорит на олимпиаде про это, но у меня опыта в таком, возможно к сожалению, нет).

Про программирование

Вы собрали робота - 1/4 пути определенно пройдена - остается заставить его двигаться. (здесь важно помнить про сложные алгоритмы, так как по линии, представим, что робот уже ездит).

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

про их отправку

Я как-то раз попытался их отправить авторам программы (за год написания кода накопилось штук 100-200), кое-как нашел кому написать и первым делом получил ответ - попробуйте перепрошить блок, убедитесь что кабель работает и коронное - а вы пробовали перезапускать. Но поскольку я человек скромный - я дописался до инженера который занимается поддержкой данного ЯП - скинул репорты (пообщались мы достаточно мило), но падать программа даже после обновления не перестала

простая программа печатающая Hi на экран
простая программа печатающая Hi на экран

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

Форматирование кода поддерживать сложно - вы регулярно путаетесь в проводах (на картинке желтые - типо местного знака равно). Для логики все еще хуже - там только блоки которые кушают 2 переменные (стоит сказать что типизация достаточно строгая - условно int (если в переменной лежит только 1-0 я не смогу прировнять к bool, но bool к int смогу)). Со строками вообще нельзя нормально работать - только конкатенация.

Из забавного - цикл работает намного медленнее чем он должен (как будто VM ищет потом сама адрес возврата) - был бы goto поверьте, все бы использовали его (если бы работал быстрее). Причем вы регулярно можете выстрелить в ногу скорости исполнения, так как скорость выполнения кода зависит от всего, кроме вашей прямой логики программиста (Местная VM которая исполняет код работает на си, но ее скорость скорее коррелирует с температурой на Венере, чем со знаниями Computer science).

Параллельные вычисления

Выглядят в коде они примерно так (тут правда мы параллельно двигаем моторами):

https://infourok.ru/uchebnometodicheskie-materiali-robototehnika-dlya-mindstorms-education-ev-2376203.html
https://infourok.ru/uchebnometodicheskie-materiali-robototehnika-dlya-mindstorms-education-ev-2376203.html

И казалось бы - всего-то параллельно считаем условно сколько раз инкрементировалась переменная пока мы куда-то едем. Вот только ядро одно... И при этом помимо того, что приоритетов нет (я может хочу больше выч. мощностей отдать на езду), так еще и опять падает производительность далеко не в 2 раза (я бы даже сказал, что не в 3), так как VM опять что-то странное делает)

Ну и еще нет системы контроля версий - мы просто использовали google-диск для синхронизации папок, но совместно писать код не получится.

Пора менять ЯП

Логичная же мысль - не хочешь стандартный - возьми что-то более интересное, например что-то текстовое. Я подумал так же и начал искать, тогда (это был год 17) я нашел только Basic. Теперь я знаю Small basic в редакции авторов компилятора. (Мама я умею прогать на Basic, только не бей). На данный момент их больше, но просто представьте - вам в школе скорее всего преподают Паскаль (у меня были плюсы, спасибо вам Василий Анатольевич) и вы просто пересаживаетесь с одного мертвого учебного языка на другой.

Для правдивости стоит сказать, что тогда была еще Java - но после запуска программы нужно подождать секунд 15 пока виртуальная машина загрузит данные и тд. Людей на нем в старшей я не видел (но они точно были).

Про равенство участников

Все это самое смешное - все ограничения олимпиады трактуются используя фразу "Все равны". Особенно так отвечают про отмену ограничения на использование только Lego - ведь Arduino/Raspberry стоят дороже, чем набор Lego и датчики (нет)

Важное уточнение

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

Про футбол

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

https://team-project.university.innopolis.ru/rro
https://team-project.university.innopolis.ru/rro

Но тут вас ждет приятный бонус - для участия вам нужно 2 датчика от сторонней фирмы (на данный момент на офф сайте стоит ~50$) на каждого робота и мячик (~60$) и два набора Лего. Таким образом вы вкладываете ~250 долларов чисто на то, чтобы принять участие (не включая стоимость наборов). Все датчики работают на i2c так что на сложные вычисления у вас просто нет времени - пока вы досчитаете - мяч уже у вас в воротах.

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

И ладно бы если бы датчики были бы нормальными - компас сбивает любая наводка, например мне мешала чугунная труба идущая в коробе в стене. (я молчу про арматуру в конструкции здания) Инфракрасный датчик (используется для определения положения мячика - "сектор" - расположение относительно прямой оси и сила - расстояние) вообще ни рыба ни мясо - у него всего 10 секторов, 5 - перед имеет размер в градусов 90, остальные 90 - 150 градусов распределены примерно равномерно по секторам.

Про техническое строение инфракрасного датчика

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

Из конструкции вы сами понимаете регулярно вместо 4 вы будете получать 3 или 5, а из-за экранирования датчика сзади - 0 просто невозможно использовать. За такие деньги вы получили вещь из которой просто невозможно сделать что-то интересное.

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

И почему же это плохо?

В результате дети вынуждены вкладывать силы, которые они не всегда могут безопасно для себя вкладывать. Летом я тратил обычно 60-70 часов в неделю, как вы понимаете, не для каждого взрослого человека +- 3 месяца в таком режиме это безопасно. А тут ребенок, который еще развивается и вместо общения с друзьями, просто втыкания в стену или еще чего-то он жжет свои же нервы.

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

Ну может хоть льготы есть?

Нет (кажется есть в МФТИ, но это они сами себе сделали). Таким образом выпустившись из школы, призер может сжечь вместе с тетрадками еще и дипломы, и посмеяться над собой.

Вот именно так выглядит натягивание сов на глобусы в мире WRO, где все равны.

Спасибо.

Tags:
Hubs:
Total votes 17: ↑16 and ↓1 +15
Views 6.9K
Comments Comments 22