В этой статье рассказывается о процессе исследований и разработки моей новой системы датчика OptiGap — основной части моей работы для получения степени PhD. Я пишу статью в формате рассказа, чтобы поделиться своими рассуждениями в процессе принятия решений, которые привели к готовой реализации. Надеюсь, она даст какое-то представление о незнакомом многим мире исследований для PhD, а также может заинтересовать тех, кому любопытен этот процесс. Технические подробности, симуляции и предыдущие исследования по теме можно прочитать в моей диссертации.
▍ Что он делает?
По сути, мой датчик — это верёвка, которая при сгибании сообщает, на какой длине её согнули. Наукообразно это называется локализацией сгибов.
Основная сфера применения OptiGap — это мягкая робототехника (soft robotics) — это отрасль, где обычно используются деформируемые системы, в которых традиционные датчики часто использовать непрактично. Название OptiGap отражает его основной принцип работы — использование воздушных зазоров внутри гибких оптических трубок для генерации закодированных паттернов, необходимых для локализации сгибов.
С чего началось создание системы датчика OptiGap
Идея OptiGap пришла ко мне, когда я экспериментировал со светопередачей в различных оптических кабелях для применения их в качестве датчика распознавания сгибов. Изначально я пытался понять, как можно эффективно «замедлять» движущийся по волокну свет — казалось бы, довольно простая задача, верно?
В процессе экспериментов я соединил отрезок прозрачного филамента для 3D-принтеров (ТПУ 1,75 мм) с рулеткой, и внезапно обнаружил, что при сгибании ленты рулетки (и филамента) в месте присоединения изоленты возникало существенное падение светопередачи. У меня возникла гипотеза, что это вызвано тем, что клейкое вещество изоленты вызывает растяжение филамента, что в свою очередь снижает светопередачу.
Чтобы проверить эту гипотезу, я прикрепил к рулетке более длинный отрезок филамента и начал сгибать её в разных точках, чтобы проследить за изменениями в светопередаче.
Эксперимент с рулеткой и филаментом из прозрачного ТПУ
Я написал под Linux небольшой драйвер I2C для датчика времени распространения VL53L0X, подключённого к Raspberry Pi и передающего данные в сокет при помощи ZeroMQ. Затем я быстренько набросал на Python GUI для получения данных датчика из сокета и визуализации данных светопередачи в реальном времени. Он сразу же подтвердил мою гипотезу. Это стало моментом эврики, заложившим фундамент для разработки датчика OptiGap.
Моё восторженное лицо, когда я подтвердил свою догадку
Реализация OptiGap
Я понял, что поскольку могу контролировать место ослабления света, это можно использовать для кодирования информации о месте сгиба датчика. Изолента была непрактичным способом, поэтому я начал искать более надёжную методику создания таких затуханий. Это привело меня к идее разрезания филамента и сборки его при помощи гибкой резиновой (силиконовой) трубки с оставлением небольшого воздушного зазора, показанного на рисунке ниже.
Proof-of-concept: световод с воздушным зазором в силиконовой трубке
Основной принцип работы воздушного зазора заключался в том, что перемещение и/или поворот одного световода относительно другого меняет количество света, передаваемого через зазор. Чем больше угол сгиба, тем больше света теряется в зазоре. Значит, можно выявить корреляцию получившегося изменения яркости оптического сигнала с известными паттернами.
Это изображение взято из созданной мной в COMSOL симуляции.
Важная идея
Затем я начал тестировать эту идею, создавая множество воздушных зазоров и сгибая филамент для изменения затухания.
Несколько воздушных зазоров вдоль одного ТПУ-световода
Как показано в видео ниже, интенсивность оптического излучения снижается на каждом воздушном зазоре, и снижение становится заметнее при увеличении угла сгиба. Эти начальные эксперименты послужили мне proof of concept, продемонстрировав реализуемость идеи. Они привели к формулированию моей окончательной гипотезы: возможности использования паттерна этих воздушных зазоров для кодирования информации о сгибании датчика и применения наивного байесовского классификатора для декодирования места сгиба.
Эта концепция напоминает принцип линейного энкодера. Линейные энкодеры замеряют линейное движение объекта, обычно они состоят из рейки ползунка с закодированной шкалой наподобие рулетки, и головки датчика, движущейся по этой шкале для её считывания. Линейные (абсолютные) энкодеры отправляют в каждой позиции уникальный код, обеспечивая точную идентификацию смещения.
Общее описание системы OptiGap
Система OptiGap, работающая аналогично абсолютному энкодеру, кодирует абсолютные позиции при помощи паттернов, чувствительных к сгибанию воздушных зазоров вдоль параллельных световодов, по сути, действуя в качестве единичного оптоволоконного датчика.
▍ Кодирование места сгиба при помощи инверсного кода Грея
В абсолютных энкодерах обычно часто используется код Грея — двоичная система, в которой два порядковых значения отличаются только на один бит. Это свойство позволяет использовать его в различных областях применения, в том числе в проверке ошибок. Однако код Грея неоптимален для системы датчика OptiGap. Чтобы упростить дифференциацию значений, мы должны стремиться к различию максимального количества битов. Из-за этой необходимости мы используем инверсный код Грея.
Инверсный код Грея — это двоичный код, в котором два порядковых значения различаются на максимум (n-1) битов. Для его реализации я просто нанёс разрезы в филаменте, соответствующими единицам в последовательности инверсного кода Грея. Такую методику можно масштабировать до любого количества битов. В прототипе я использовал 3 бита, что даёт нам 8 возможных позиций.
▍ Визуализация системы датчика OptiGap
На иллюстрации ниже показаны паттерны сигналов системы датчика OptiGap для каждой позиции сгиба с тремя волокнами. Благодаря использованию наивного байесовского классификатора система датчика может различать позиции сгибов на основании паттернов сигналов. На третьем графике показаны реальные данные датчика в прототипе системы, использованные для обучения классификатора в микроконтроллере.
Паттерны сгибания OptiGap
Прототип OptiGap
Я создал прототип системы датчика OptiGap, использовав три волокна прозрачного ТПУ-филамента для 3D-принтеров, каждое из которых имело уникальный паттерн воздушных зазоров. На рисунке ниже показан филамент до разрезания, на ленте указан паттерн разрезания.
Начальные этапы создания прототипа датчика OptiGap
Для прототипа я использовал коммерчески доступный волоконно-оптический соединитель 3:1, объединяющий свет из трёх волокон в один оптоволоконный кабель.
Измерительная головка датчика OptiGap в сборе
Это стало последним этапом подтверждения гипотезы и рабочей теории в основе датчика OptiGap.
▍ Уменьшение физического размера
Прототип был слишком большим и неудобным, в основном из-за размера использованного филамента. По своему опыту я знал, что для этой области применения более компактной и гибкой альтернативой может стать оптоволокно из ПММА (пластика). Я протестировал в качестве волокон для датчика по очереди безоболочечное ПММА-волокно диаметром 500, 750 и 1000 микрон производства Industrial Fiber Optics, Inc., добившись существенного уменьшения размера датчика.
Катушка ПММА-оптоволокна диаметром 500 микрон
Я провёл тесты со всеми тремя типами волокна, чтобы оценить их светопередачу и гибкость. Среди них оптимальным выбором оказалось волокно диаметром 500 микрон, хотя достаточную для этой области применения гибкость продемонстрировали все три диаметра.
▍ Снижение сложности оптического приёмопередатчика
Я решил отказаться от сложного датчика VL53L0X в пользу простой конструкции из фотодиода и инфракрасного светодиода, чтобы снизить сложность системы и повысить модульность. Кроме того, это позволило мне использовать для считывания данных датчика микроконтроллер, что стало существенным улучшением по сравнению с первоначальным прототипом.
Плата прототипа с инфракрасными светодиодами и ПММА-волокном на 1000 микрон
Затем я создал демонстрационную систему для датчика из микроконтроллера и системы из фотодиода и инфракрасного светодиода.
Полная демонстрационная система OptiGap с ПММА-оптоволокном диаметром 500 микрон
Машинное обучение в реальном времени на микроконтроллере
На завершающем этапе разработки системы датчика OptiGap необходимо было интегрировать в микроконтроллер STM32 наивный байесовский классификатор для декодирования из данных датчика мест сгибов. Я выбрал наивный байесовский классификатор из-за его эффективности по сравнению с операторами if и таблицами поиска, возможности обработки новых или ранее неизвестных данных, а также потенциала повышения точности благодаря учёту взаимосвязей между множественными входными переменными.
Реализация наивного байесовского классификатора оказалась достаточно простым процессом. Этот классификатор представляет собой вероятностную модель, основанную на применении теоремы Байеса для отнесения показаний к уникальному классу; в данном контексте под классом понимается место сгиба. Для реализации классификатора я использовал библиотеку Arm CMSIS-DSP.
▍ Выравнивание данных датчика
Первым этапом по интегрированию классификатора стало выравнивание данных датчика под распределение Гаусса для каждого паттерна воздушных зазоров. Для выполнения этого процесса я разработал на Python GUI для быстрой разметки и выравнивания данных при помощи GNB (Gaussian Naive Bayes) из библиотеки scikit-learn.
UI для разметки и выравнивания данных
Позже я усовершенствовал UI, чтобы он был более универсальным и позволял выполнять более сложное выравнивание данных.
Усовершенствованный UI
Вероятности для каждого класса вычислялись и сохранялись как заголовок для использования в микроконтроллере.
▍ Фильтрация данных датчиков
Чтобы повысить точность классификатора, я реализовал в STM32 двухэтапный процесс фильтрации. На первом этапе выполнялся простой фильтр скользящего среднего, за которым следовал фильтр Калмана.
Этапы фильтрации сигналов. Шумоподавление выполняется относительно входного сигнала
Демо системы датчика OptiGap
В видео показаны различные этапы создания системы датчика OptiGap, в том числе сборка и демонстрация готовой системы.
▍ Общее описание системы
▍ Сборка датчика OptiGap с ТПУ-филаментом
▍ Затухание света при прохождении через датчик OptiGap
▍ Выравнивание данных датчика
▍ Классификация отрезков ПММА-оптоволокна
▍ Классификация отрезков ТПУ-филамента
▍ Работа под водой
Технические характеристики OptiGap
Ключевые свойства и параметры
▍ Рекомендации по материалам
Дальнейшие шаги
Я добился значительного прогресса в развитии системы OptiGap, в том числе и интеграции в другую разработанную мной модульную систему привода и датчиков EneGate.
Плата EneGate с интегрированным датчиком OptiGap
Для этого мне понадобилось спроектировать собственную печатную плату и интегрировать системы, описанные в моей диссертации. Кроме того, я прототипировал миниатюрные версии печатных плат для оптики, чтобы использовать их как интерфейс с печатными платами системы EneGate.
Миниплата OptiGap
Ещё одна миниплата OptiGap
Также я проверил OptiGap с реальной системой мягкой робототехники; все подробности будут изложены в статье RoboSoft под названием Embedded Optical Waveguide Sensors for Dynamic Behavior Monitoring in Twisted-Beam Structures.
▍ Коммерческое внедрение
У этого исследования есть и аспект коммерческой реализации. Можете связаться со мной, если вам интересны подробности.
Автор: ru_vds