![](https://habrastorage.org/getpro/habr/upload_files/fae/ce8/ca1/faece8ca119cbf9c1a7fddcf5ec41e7f.png)
«Запатентовано» уже немало способов шахматного жульничества: кто-то использует телефоны, примотанные к ногам скотчем, и штуки вроде пультов от телевизора, другие просто выходят в туалет, чтобы подсмотреть варианты хода на телефоне. И это не говоря о случаях с неочевидным и лишь отчасти подтвержденным читерством, вроде недавнего скандала с гроссмейстером Хансом Ниманном.
Программист Джеймс Стэнли* придумал еще один способ выигрывать в шахматы. Миниатюрный компьютер Raspberry Pi Zero, лежащий у него в кармане, подключен к нескольким кнопкам и вибромоторам в его ботинках, так что он может тайком обмениваться данными с шахматным движком на базе Pi. Ноги идеально подходят для этой цели: это единственная часть тела, с помощью которой при известной степени ловкости можно проделывать сложные манипуляции незаметно для окружающих.
Джеймс назвал этот проект Sockfish, так как в качестве интерфейса для обмена данными с шахматным движком Stockfish используются его носки. Рассказ автора о подробностях эксперимента читайте под катом.
*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.
Готовлюсь к партии
Итак, каждый мой внутриботиночный пульт оборудован двумя резистивными датчиками усилия и одним вибромотором. Датчики усилия используются в качестве кнопок, с помощью которых я ввожу ходы противника. Вибромоторы обеспечивают тактильную обратную связь для подтверждения нажатий на кнопки и передают мне подсказки шахматного движка.
![](https://habrastorage.org/getpro/habr/upload_files/9b4/7f9/87a/9b47f987a549fdab549904b6817cd84a.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/e19/c4c/305/e19c4c3057c529c6525cdeaf538c9bd8.jpeg)
Во вторник вечером мне наконец представился случай пустить Sockfish в ход против ничего не подозревающего реального противника — Оуэна, который играет в шахматы гораздо лучше меня. Я уговорил его сыграть партию с пятнадцатиминутным лимитом времени, что дольше, чем в блицах и суперблицах, которые мы обычно играем, но иначе я бы не успевал вводить ходы пальцами ног.
Проводим первую игру
Оуэн не мог взять в толк, почему мне потребовалось целых 20 секунд напряженных размышлений, чтобы сделать первый ход. В итоге он предположил, что я, должно быть, «репетировал» и теперь старался сосредоточиться изо всех сил, чтобы вспомнить теорию. Отчасти он был прав: ввод данных с помощью Sockfish и расшифровка ответных сигналов требовали высочайшей степени концентрации! Я обнаружил, что, жульничая с Sockfish, я вынужден сосредотачиваться гораздо сильнее, чем играя в шахматы по-честному. Может, я играл бы лучше, если бы всегда был таким внимательным.
Все шло хорошо, пока Sockfish не предложил мне сделать ход против правил. Игра (в представлении Sockfish) шла так: https://lichess.org/cmcYJF7G (я играл черными). Программа хотела, чтобы я сыграл 20… Qxe6.
![](https://habrastorage.org/getpro/habr/upload_files/4d4/1e2/083/4d41e2083b2e46993ff7b15886f626ef.png)
Но на настоящей доске все было иначе. Руари был зрителем, он знал, в чем подвох, и даже ухитрился записать часть игры. Судя по его видео, положение фигур было такое:
![](https://habrastorage.org/getpro/habr/upload_files/df5/ec2/86f/df5ec286f8cd62ab05ca2054813c5e6c.png)
Отличие от варианта Sockfish состоит в том, что моя коневая пешка (g) переместилась на g6, а мой белопольный слон не забрал фигуру на g2.
Я думаю, это произошло из-за того, что когда компьютер попросил меня сыграть Bxg2, я вместо этого пошел на g6. Хотя эта ошибка и выглядит дико, она вполне объяснима: обычно Sockfish сообщает мне начальную и конечную клетки моего хода, но поскольку на g2 можно было пойти только одной фигурой, Sockfish сообщил мне лишь конечную клетку. Поэтому программа дала команду g2, но я перепутал ее с g6. Это произошло потому, что «2» передается как две коротких вибрации на правой ноге, а для экономии времени «6» передается как одна длинная вибрация (означающая «5»), за которой следует короткая. Я просто принял первую короткую вибрацию на правой ноге за длинную и решил, что должен пойти на g6.
Возможно, эта схема расшифровки вибраций окажется полезной (а может и нет):
![](https://habrastorage.org/getpro/habr/upload_files/ebf/45e/c3e/ebf45ec3e8471843c34de933a1e02d29.png)
Как бы там ни было, играя при помощи Sockfish, я оказался в пролете, и пришлось выкручиваться самому.
Вместо того чтобы взять ферзя на е6, сыграв против правил (что вряд ли сошло бы мне с рук), я прикрылся от шаха ладьей. Это было крайне глупо с моей стороны! Я просто потерял ладью и ничего не получил взамен. В свою защиту скажу, что я был настолько поглощен взаимодействием с Sockfish, что едва понимал, что происходит на доске. Вскоре мы закончили партию, и я сдался при таком расположении фигур:
![](https://habrastorage.org/getpro/habr/upload_files/61e/297/ec6/61e297ec6c5e7207de81edb60961d046.png)
Проводим вторую игру
К счастью, Оуэн согласился на матч-реванш.
На этот раз Руари снял почти всю игру. Помню, я паниковал, что на видео будет видно, как я ерзаю на стуле, но все выглядело так, как будто я просто напряженно думаю. Едва ли со стороны можно было догадаться, что ботинки у меня с начинкой.
![](https://habrastorage.org/getpro/habr/upload_files/548/a1d/39a/548a1d39ac1c3de9b550ef32f8c05b8b.png)
В какой-то момент игры я ввел ошибочные данные, но заметил это и успел все исправить. На видео было видно, как я выругался, крепко задумался на 30 секунд, а потом рассмеялся и попросил Оуэна напомнить мне пару предыдущих ходов. Удивительно, что он ничего не заподозрил.
70 секунд я орудовал пальцами ног, отменяя и переделывая ходы (при этом стараясь вести себя естественно), пока в конце концов не убедился, что восстановил позицию, после чего продолжил играть, издав довольно громкое «фух!» и заметив, что мне нужно быть внимательнее.
К сожалению, через пару ходов все опять пошло наперекосяк. Sockfish снова попросил меня сделать ход не по правилам. Для программы, позиция на доске была такой:
![](https://habrastorage.org/getpro/habr/upload_files/32b/8bb/25d/32b8bb25df45057b377d37efef1e567e.png)
Но на самом деле фигуры стояли так:
![](https://habrastorage.org/getpro/habr/upload_files/092/b0b/442/092b0b442b6ab6a3fb435c85c8428923.png)
По сути 27… Qxe1 и 28. Пока я все отменял и переделывал, ход Rxe1 каким-то образом пропал из Sockfish. Должно быть, я отыграл на 1 полуход дальше назад, чем было нужно, и не смог восстановить положение на доске. В этой позиции Sockfish предлагал мне сыграть Rd8+, но поскольку у меня не было ладьи на линии d, сделать это было затруднительно. Я заявил, что пошел «не в ту степь» (не объясняя, что это значит), и стал играть без помощи программы.
К счастью, у меня было преимущество в целого ферзя, и я выиграл без особого напряга – Оуэн сдался через несколько ходов. Не совсем тот успех, на который я рассчитывал, но, по крайней мере, это была победа! Можно определенно сказать, что Sockfish выигрывает в 50% партий.
Открываю тайну
Сразу же после победы я объяснил Оуэну, как мне удалось его обыграть. Он отказывался верить, пока я не показал ему два внутриботиночных пульта и карманный компьютер. В целом, он не особо на меня разозлился.
![](https://habrastorage.org/getpro/habr/upload_files/ac5/748/0f2/ac57480f29aaf031ce1f9698265ebaac.png)
![](https://habrastorage.org/getpro/habr/upload_files/c84/d28/6b6/c84d286b6aad9aabc076220291c6a5c2.png)
Я сказал ему, что собираюсь найти «внушающего доверие» шахматиста, который с помощью моего изобретения сможет выиграть чемпионат мира, но он ответил, что это может «опорочить игру», и он обязательно меня сдаст. Впрочем, такой сценарий и вправду лучше подходит для экранизации на Netflix, чем для воплощения в жизнь.
Подробности
В моем кармане лежит пластиковая коробка, внутри которой Raspberry Pi Zero, 4-канальный АЦП для считывания сигналов резистивных датчиков усилия, несколько транзисторов для переключения питания вибромоторов и по одному подстроечному резистору на каждый вибромотор для регулировки силы вибрации. Без подстроечных резисторов моторы были бы слишком шумными и могли бы (если так можно выразиться) испортить всю игру. Вот что находится внутри пластиковой коробки:
![](https://habrastorage.org/getpro/habr/upload_files/ebe/1b8/350/ebe1b83507daaf76493df4337ccc7e61.jpeg)
Также в моем кармане лежит USB-аккумулятор для работы Pi-компьютера.
На Pi работает скрипт Python, который считывает данные с контактов GPIO и пишет их в поток вывода stdout
, который используется скриптом Perl. В свою очередь Perl считывает нажатия кнопок из потока ввода stdin
, реконструирует расположение фигур и запускает Stockfish, а затем записывает импульсы вибрации в свой поток вывода stdout
, после чего они передаются на контакты GPIO вторым скриптом Python.
(Зачем такая навороченная архитектура? Я предпочел бы написать программу на Perl, но во всех примерах Raspberry Pi GPIO используется Python… поэтому так было проще).
Вся эта система работает внутри интерфейса с параметром -L
, так что вывод данных регистрируется для последующего просмотра. Система запускается командой /etc/rc.local
при включении компьютера.
Если во время загрузки компьютера внутриботиночные пульты подключены, то один из вибромоторов «залипает» около минуты, потому что контакт GPIO, который управляет мотором, активируется напряжением +5 В во время загрузки Pi. На самом деле это не важно, но вы можете почувствовать, что в течение минуты вибрация становится слабее по мере нагревания и увеличения сопротивления.
С помощью паяльника я проделал отверстие в накладном кармане брюк, чтобы пропустить провода внутри штанин.
Первоначально я использовал 4-контактные разъемы TRRS для подключения компьютера к ботинкам, но обнаружил, что они очень хлипкие и ненадежные. Я заменил их на 4-контактные водонепроницаемые разъемы для электровелосипедов, которые работают гораздо лучше и ненамного больше по размеру.
Сначала я печатал внутриботиночные пульты из PLA-пластика. Но он оказался слишком жестким, что затрудняло ходьбу. Потом я перешел на гибкий TPU-пластик, который гораздо лучше подходит для моих целей. Кроме того, изначально я использовал обычные микропереключатели, которые повреждались во время ходьбы. Заменив их на резистивные датчики усилия, я не только решил эту проблему, но и получил дополнительное преимущество – возможность регулировать силу активации на программном уровне.
Sockfish напоминает систему Eudaemons — компьютер, спрятанный в ботинках и предназначенный для мошенничества при игре в рулетку. Весьма впечатляющий проект, учитывая примитивную электронику 70-х годов прошлого века.
![](https://habrastorage.org/getpro/habr/upload_files/372/46d/e17/37246de171cad39329bc40b0a1605956.gif)
Послесловие: теперь я планирую разработать Sockfish-ng
Никому не говорите, но у меня уже есть планы по созданию улучшенной версии Sockfish, которую будет гораздо сложнее обнаружить!
Актуальный опытный образец годится только на то, чтобы пару раз разыграть приятелей в пабе. Чтобы выиграть чемпионат мира, нужно подходить к делу гораздо серьезнее.
Я думаю, что мы разместим компьютер и все другие электронные компоненты на одной печатной плате, вместо того, чтобы подключать компьютер к двум кускам макетной платы. По моей задумке, эта печатная плата должна размещаться в одном из ботинок. В каждом из ботинок можно было бы поместить отдельный аккумулятор и модуль Bluetooth (или аналогичный), а всю электронику – спрятать под стельками. Тогда даже полный обыск с раздеванием не выявил бы ничего запрещенного.
Интерфейс можно в целом оставить без изменений, только связь между «основным» и «вторичным» ботинками сделать беспроводной. Возможно, стоит позаботиться о том, чтобы длинные и короткие импульсы было легче различать.
Чтобы обнаружить обман, пришлось бы просветить обувь рентгеновскими лучами. Если есть риск такой проверки, то игрок может пройти контроль в обычной обуви, а его сообщник – пронести пару ботинок с секретом другим путем. Игрок поменяет обувь, после того, как ее уже просканировали.
***
Будем рады узнать в комментариях ваше мнение о статье. Может быть, у вас есть свои примеры технологических способов жульничества в шахматах и других соревновательных играх? Обязательно напишите об этом! А чтобы получать больше интересного контента, подписывайтесь на наш хабр-блог: мы регулярно переводим статьи зарубежных авторов и делимся экспертизой наших сотрудников.
ссылка на оригинал статьи https://habr.com/ru/articles/691902/
Добавить комментарий