Я собрал VR-комплект для крыс и автоматизированным способом обучил их проходить по коридору, отрисованному на движке Doom II. При этом хоть мне и удалось реализовать механизм для дальнейшего обучения крыс стрелять по монстрам в игре, полноценно осуществить это я не успел.
Самоцелью проекта является создание относительно дешевой (<$2000) VR-установки, которая сможет автоматически обучать грызунов перемещаться по 3D-средам, не устанавливая излишних ограничений и исключая оперативные вмешательства.
В прошлом VR-установки с грызунами уже собирались в рамках нейронаучных экспериментов, и я надеюсь, что в дальнейшем будут проводиться и другие подобные исследования. Описанный мной проект нацелен на их упрощение за счет автоматизации задач, обычно выполняемых экспериментатором.
VR-установка
Сборка этой установки в качестве хобби-проекта у меня заняла около четырех месяцев и обошлась примерно в два раза дороже планируемой стоимости конечного продукта.
На данный момент известно о нескольких разработках аналогичных VR-установок [1], но большинство из них чрезмерно сложны или же требуют для сборки специального оборудования. Что касается инструментов, то у меня был доступ к 3D-принтеру, паяльнику, сверлильному станку и набору отверток.
Воспользовавшись своим членством в программе Prime, я получил 99 индивидуальных заказов с Amazon – отдельная благодарность Юниэлю за неустанную доставку этих посылок в лабораторию.
VR-установки для грызунов обычно состоят из полистиролового шара, по которому бегает подвешенная в шлейке крыса, а также датчиков, отслеживающих движение этого шара. Изображение виртуальной среды выводится либо на экран, либо через проектор. Шар можно было подвесить на потоке воздуха, либо упереть в шарикоподшипники. Я попробовал оба варианта и предпочел второй, так как, невзирая на дополнительное трение, он давал более надежные результаты. Весь комплект я собрал на алюминиевом каркасе, который заказал в Misumi.
Оборудование
Поле зрения крыс достигает 3000. Охватывать его все не обязательно [2],[3] но «оборачивание» вокруг грызуна более широкого экрана увеличивает погружение в игру. Чтобы не усложнять установку, я не стал использовать проекторы и взял сильно изогнутый экран Dell, который довольно хорошо охватывал видимое пространство.
Необходимые компоненты (навесные детали, крепления электрических элементов, механические устройства) я спроектировал в Blender и напечатал. Для получения финального комплекта пришлось перепробовать десятки вариаций.
Покрытый резиной 40-сантиметровый шар удерживался тремя шарикоподшипниками снизу, двумя спереди и одним слева. При проектировании основы я отталкивался от следующих условий:
- Для минимизации трения подшипники должны соприкасаться со сферической беговой дорожкой под углом 900.
- Боковые упоры должны быть достаточно длинными, чтобы поддерживать шар, не давая ему скатиться с основания.
- Основание должно удерживать шар разных размеров без ручной пересборки – на тот момент диаметр шара еще не был определен.
Чтобы вписаться в эти требования, я создал на Python скрипт для Bender, который на основе данных о размере шара, 3D-принтера и шарикоподшипников размещает упоры в 3D-редакторе в нужных положениях над основанием. После изменения радиуса сферической беговой дорожки в скрипте, формировалось новое положение упоров с нужным размером и под нужным углом. Сами упоры я печатал отдельно от основания, чтобы сделать их максимально длинными.
Лазерные датчики движения я извлек из компьютерных мышей, установив их спереди и слева от шара, чтобы охватить все три оси его движения. У этих лазеров диапазон детекции составляет примерно 1см. Чтобы учесть неровности поверхности шара передние подшипники я разместил на захватах, отдаляющих шар от переднего датчика. Захватами также фиксировались датчики движения и станция вознаграждения, что позволило без проблем перемещать все это оборудование.
Обучение крыс бегу по сферической дорожке происходило с помощью оперантного обуславливания, для которого требовался механизм обратной связи, подталкивающий к нужному поведению. Для обеспечения положительной обратной связи я решил поить крыс сладкой водой, поскольку ее довольно просто дозировать в небольших количествах (десятых долях мл): взял прецизионный соленоидный клапан, сделал подачу жидкости самотеком и настроил управление с помощью микроконтроллера. Показанная выше мини-чашечка служила в качестве буфера для излишков воды, а элементы похожие на опоры для ворот из игры Квиддич удерживали трубки в натянутом состоянии.
Две крупные трубки подавали воздух от насосов 12В. Воздушные толчки в мордочку или сзади зачастую используются в VR-экспериментах с грызунами как отрицательная обратная связь [4], в частности сигнализируя о столкновении со стеной. Вибрацию насосов я погасил с помощью поролоновых демпферов, которые также уменьшили шум. Сокращение шумности установки очень важно, так как внезапные звуки могут легко напугать грызуна.
Несмотря на то, что воздушные насосы работали отлично, ввиду недостатка времени и из осторожности я отказался от их использования в эксперименте, чтобы не отбивать у крыс желание оставаться на беговой дорожке.
Новаторское оборудование
Показанное до этого момента оборудование является частью большинства VR-конфигураций и выполняет главную роль в экспериментах, реализуемых в условиях оперантного обуславливания. Новаторский же аспект этого проекта заключается в автоматическом обучении грызунов перемещаться и выполнять действия в виртуальных пространствах.
Обучение ходьбе
Обучение крыс перемещению в VR принципиальной сложности не составляет и уже проделывалось в ручном сеттинге: если животное застряло, шар вращается в правильном направлении, вынуждая крысу шагать, после чего предоставляется вознаграждение, поощряющее эту модель поведения. При ручном управлении процессом экспериментатору нужно вращать шар от руки и потом выдавать награду. В автоматическом же режиме нужно вращать шар вдоль двух осей посредством моторов: вперед-назад и влево-вправо.
На видео выше сначала показывается, как мотор безуспешно пробует провернуть шар: линейный приводной механизм вытянулся, пока колесико не достигло шара, затем мотор проворачивал шар в течение двух секунд, после чего приводной механизм отодвинулся. Неудачное вращение в данном случае оказалось и багом, и фичей одновременно. Если крыса всем своим весом налегала на беговую дорожку, то сцепление силиконового колесика с покрытым резиной шаром оказывалось недостаточным. Крысу ничто не принуждало идти насильно, а лишь подталкивало, что в некотором смысле упрощало процесс адаптации.
Во второй части видео показывается обучение 2D-перемещению. Здесь вы можете заметить, что крыса несколько растерялась при воздействии второго мотора, который продолжал поворачивать ее вправо по направлению к знаку выхода – это был первый раз, когда Ромеро столкнулся с принудительным вращением шара вправо-влево.
В завершении видео (начиная с 0:32, рекомендую включить звук) показана заключительная часть этого этапа обучения, где Ромеро уже научился правильно взаимодействовать с мотором. В этом же фрагменте он начал перемещаться самостоятельно.
Размещенная между приводом и колесиком пружина помогала сохранять сцепление колесика с неидеальной сферической поверхностью – расстояние от центра шара до его поверхности отличалось. Пружина же компенсировала эти отличия без лишнего отодвигания шара в сторону.
Обучение стрельбе
Стрельба – это игровое действие, которое должно выполняться при появлении перед игроком монстра. Последовательно обучить такому поведению вручную сложно, так как монстры могут появляться в разных точках и в больших количествах. Можно постепенно обучить крысу сначала стрелять в парализованного монстра, затем в движущегося, а потом в нескольких, движущихся вокруг, но и здесь для согласованного вызова действия, связанного со стрельбой, ручных манипуляций будет недостаточно.
Предположим, что действие, вызывающее выстрел, это подъем крысой своего тела на задних лапках. Ее нужно будет обучить выполнять такое действие при каждом появлении впереди монстра. В каждом таком случае экспериментатор может вручную поднимать крысу за шлейку, инициировать в игре выстрел и выдавать немного сладкой воды в качестве награды. Затрачиваемый на подобные манипуляции временной промежуток очень важен, так как нужно максимально сократить период обучения и не сбить с толку животное, выдавая непоследовательную награду. Как же тогда все это автоматизировать?
Я прикрепил маленькую шлейку (которую выбрал аж из пяти вариантов) к 3D-печатному захвату так, чтобы она допускала вертикальное движение. В качестве обучающего механизма выступил Соленоидный двухтактный привод, закрепленный к основанию захвата. Прямо над приводом я установил кнопку. При нажатии этой кнопки, либо в следствии активации подтягивания самого соленоида, либо ввиду поднятия животным своего тела, в игре производился выстрел. Активацию привода я реализовал с использованием ШИМ, чтобы подтягивание происходило плавно и не пугало животное.
Если просто, то процесс обучения происходил так: крыса встречает монстра -> программа обнаруживает, что монстр находится вблизи игрока (пока что предположим, что игрок на него смотрит) -> сначала крыса понятия не имеет, что в этой ситуации делать, поэтому программа активирует двухтактный соленоид, который слегка поднимает ее -> верхушка привода нажимает кнопку -> монстр подстрелен -> выдается награда в виде сладкой воды, поощряя такое поведение.
В идеале крыса должна обучиться самостоятельно приподниматься перед каждым монстром, что будет вести к нажатию соленоидом кнопки, смерти монстра и выдаче награды.
Управление
Всей электроникой управляли два микроконтроллера Arduino:
- 2 линейных привода с мотором;
- 2 воздушных насоса;
- соленоидный водяной клапан;
- двухтактный соленоид;
- кнопка выстрела.
Датчики движения и микроконтроллеры я подключил к ПК через USB. Каждая плата Arduino сообщалась с компьютером через последовательный порт, а данные о движении поступали через интерфейс входящих событий Linux при помощи Python библиотеки evdev
.
Я старался поручить ПК как можно больше логики, не увеличив при этом время отклика установки. Компьютер отправлял небольшие пакеты на микроконтроллеры в качестве команд: первый байт представлял тип сообщения (например, вытянуть линейный привод, подать воду и т.д.), затем шла полезная нагрузка пакета (как долго вытягивать привод в секундах, количество выдаваемой воды в мл). Описанный ниже эксперимент реализован в одном скрипте Python (менее 300 строк), параллельно получающим данные о перемещении и выстрелах, отправляющим команды устройствам и организующим взаимодействие с игрой.
Взаимодействие с Doom
Карту, состоящую из коридора, двери выхода и кнопки выхода, я создал в Doom Builder 2. Дверь и кнопка активировались прикосновением. Позже для выработки навыка стрельбы я добавил монстра imp на расстоянии где-то в 1/3 от начала коридора. Ресурсы я взял из первой карты Doom II, Entryway. Эта карта позволила провести начальный этап обучения, требовавший от крысы только перемещаться вперед и стрелять в парализованного монстра.
При нажатии игроком кнопки животное телепортировалось в начало карты, чтобы пройти ее повторно. Скрипт Doom (ACS) регистрировал позицию игрока в коридоре и количество убитых им монстров, предоставляя всю эту информацию скрипту Python.
Запуск Doom, обращение к состояниям игры и отправку производимых в ней действий я реализовал с помощью движка ViZDoom. ViZDoom создавался в первую очередь для алгоритмов обучения с подкреплением, но удобный Doom API сделал этот инструмент идеально подходящим для моей задачи. На основе предоставляемых evdev
данных о движении я вычислял скорость перемещения во времени, масштабировал и передавал ее в каждой итерации игры, переводя таким образом реальные шаги крысы в игровые шаги. ViZDoom, в свою очередь, предоставлял состояние игры, дополненное некоторыми переменными, которые были определены в скрипте ACS.
Эксперимент
Я получил трех 8-недельных самцов из линии Лонг Эванс – Ромеро, Кармака и Тома. Ромеро отличился бесстрашием (даже жаждой острых ощущений) и любовью к винограду. Кармак оказался реальным архитектором-строителем своего дома, следящим за его чистотой. Он больше любил бананы. Том же поначалу был скромен, но зато удивил успехами в обучении.
Я провел с ними около шести недель во время их (и моего) ночного цикла, где-то по ~1 часу ежедневно. Две недели ушло только на то, чтобы они ко мне привыкли – этот процесс можно было ускорить, но я работал с ними неспеша. Далее одна неделя ушла на то, чтобы они вели себя спокойно во время экипирования. В этот период я также протестировал несколько шлеек и их сочетаний.
Еще за одну неделю я приучил их к сферической беговой дорожке и кормлению из чашечки. Поначалу я наполнял ее детским питанием, так как оно имеет более соблазнительный и узнаваемый запах, чем сладкая вода. К тому же, это позволило избежать эпизодического ограничения их в питье в течение начального периода.
Оставшиеся 11 дней я проводил само обучение игре в Doom VR. В целом лучше всех себя проявил Ромеро, хотя Том первым научился самостоятельно перемещаться без помощи моторизованного вращателя шара. Я провел два сеанса, обучая стрельбе Ромеро, который к тому времени уже довольно уверенно бегал в VR. Двух сеансов оказалось совсем недостаточно. Упирание в монстра и подтягивание соленоидом сбивало его с толку. В завершении приведенного ниже видео можно услышать активацию соленоида и увидеть, как он слегка подтягивает Ромеро вверх, прежде чем происходит выстрел.
В процессе VR-обучения я продолжал дорабатывать ПО и оборудование, что, скорее всего, мешало этому процессу, но являлось необходимым для завершения установки.
Выводы
К этому моменту вы можете обоснованно спросить меня: «Зачем?»
Игры, независимо от того, играет в них человек или крыса, активируют взаимодействие большого числа когнитивных процессов. Крыса, будучи неподвижной относительно установки, может проявлять очень разнообразное поведение, которое регистрируется нейронным интерфейсом. Таким образом, перемещение и сложные игровые действия можно сопоставить с нейронной активностью животных в виртуальных, но более естественных, живых экспериментах по сравнению с теми же простыми конфигурациями лабиринтов.
Сегодня компьютерные игры с виртуальными мирами доступны в изобилии и создаются без особых сложностей. Когда мы сможем уверенно обучать животных играть, разработка эксперимента станет уже задачей софта, а не зачастую дорогостоящей задачей сборки необходимого оборудования.
Тем не менее согласованное обучение животных выполнять сложные, обусловленные контекстом действия в VR оказывается весьма сложным. Описанный проект был попыткой автоматизировать этот процесс. Однако даже после 11 дней VR-обучения мне было необходимо присутствовать и помогать крысам залезть/слезть с шара, когда они этого хотели. Несмотря на то, что в основном их обучением управляло ПО, мое присутствие также было необходимо.
К сожалению, у меня не было времени полноценно закончить эксперимент – по личным причинам я установил для себя жесткий дедлайн. Очевидным ограничением этого эксперимента стали крысы, не умеющие стрелять. Оглядываясь назад, я бы предпочел использовать для обучения стрельбе уже проверенный метод реагирования, например, систему с просовыванием носа в отверстие, а не выкрутас с нажатием кнопки.
Несмотря на наличие механизма обучения перемещению влево-вправо у меня не было времени обучать крыс двигаться с поворотами, поэтому в большинстве сеансов регистрировалась всего одна ось перемещения.
Мне понравилось собирать эту VR-установку для грызунов и обучать их «типа» играть в Doom. Кроме оплаты самих этих животных, их размещения и доступа в лабораторию, весь проект я реализовывал за свой счет. Я старался довести дело до конца, поэтому многие ночи провел за сбором установки, написанием кода и экспериментами.
В эту статью не вошло очень много деталей: покрытие резиной четырех шаров, один диаметром 110см, а также тестирование различных материалов для покрытия; левитирование шара на потоках воздуха [5], от которого в итоге я решил отказаться; несколько попыток калибровки кода для датчиков движения, чтобы перемещение крысы тут же переводилось в игровые шаги нужной скорости и последовательности; и многое другое. Честно говоря, я думал, что будет легче, особенно этап обучения, но здесь нельзя недооценивать зачастую непреклонную независимость этих свободолюбивых животных.
Представленная выше VR-система оказалась до смешного дешевой в сборке и обошлась мне менее $2000, что на много порядков доступнее коммерческих предложений, начинающихся от $70,000. Здесь, конечно, сказывается разница в качестве продукта и области тестирования, но она не сопоставима с разницей в цене. Надеюсь, увидеть больше преклинических исследований, которые на основе VR-экспериментов смогут зарегистрировать богатые поведенческие и когнитивные данные.
Если у вас есть вопросы, пишите мне на viktor.toth@protonmail.com. Для тех же, кто хочет лучше понять причины и суть проведенного эксперимента, рекомендую мою предыдущую статью по теме: A Neuroengineer’s Guide on Training Rats to Play Doom
Общее видео всего описанного:
Бонусные картинки зарисовок дизайна
Ссылки
[1] K. Thurley and A. Ayaz, “Virtual reality systems for rodents,” Curr Zool, vol. 63, no. 1, pp. 109–119, Feb. 2017, doi: 10.1093/cz/zow070.
[2] B. K. Young, J. N. Brennan, P. Wang, and N. Tian, “Virtual reality method to analyze visual recognition in mice,” PLoS One, vol. 13, no. 5, p. e0196563, 2018, doi: 10.1371/journal.pone.0196563.
[3] G. Chen, J. A. King, N. Burgess, and J. O’Keefe, “How vision and movement combine in the hippocampal place code,” PNAS, vol. 110, no. 1, pp. 378–383, Jan. 2013, doi: 10.1073/pnas.1215834110.
[4] T. Muzzu, S. Mitolo, G. P. Gava, and S. R. Schultz, “Encoding of locomotion kinematics in the mouse cerebellum,” PLOS ONE, vol. 13, no. 9, p. e0203900, Sep. 2018, doi: 10.1371/journal.pone.0203900.
[5] D. B. Aharoni, “Rats in Virtual Space: The development and implementation of a multimodal virtual reality system for small animals,” UCLA, 2013. Accessed: May 03, 2021. [Online]. Доступно здесь: escholarship.org/uc/item/0wd4p4mr
Эксперимент был одобрен Институциональным комитетом по уходу за животными при институтах Файнштейна