Я работаю над роботом FIRST Robotics Competition (FRC), используя Java и WPILib, и я хочу реализовать байесовскую оптимизацию в реальном времени для автоматической настройки коэффициентов в нашем FiringSolutionSolver.java во время работы.
) в режиме реального времени, когда каждый новый выстрел производится и регистрируется.
Использует журналы попаданий/промахов AdvantageKit для информирования цикла оптимизации.
Advantagekit ведет журналы, но с помощью метода нажатия кнопки на панели управления для записи попаданий или промахов после каждого выстрела. Предполагается реализовать позже.
Коэффициенты обновляются мгновенно — без ожидания между выстрелами.
Работает полностью на Java – Python или внешние службы не подходят из-за ограничений времени выполнения roboRIO.
Является легким и достаточно эффективным для вычислений на роботе в реальном времени.
Ограничения/соображения
Я концептуально понимаю байесовскую оптимизацию в высокой степени (суррогат гауссовского процесса, функция сбора данных, последовательное обновление), но никогда реализовал это в коде. Однако я быстро учусь и прошу вас не учитывать барьер знаний при рекомендации вариантов или решений.
Мне не нужно настраивать физические свойства мяча или измерения зрения (расстояние до цели по осям); только константы решателя.
Аппроксимации допустимы, если полный инкрементный байесовский оптимизатор в Java невозможен.
Это должно быть интегрировано непосредственно в базу кода робота для интерактивных обновлений.
Вопросы
Существуют ли чистые библиотеки Java, способные онлайн/добавочную байесовскую оптимизацию, подходящие для среды робота FRC? Я думаю о BayesOpt, но у меня есть опасения/вопросы относительно его реализации.
Если нет, то как лучше всего реализовать легкий суррогатный или инкрементальный байесовский тюнер для LoggedTunableNumbers в Java?
Как мне структурировать код для коэффициента реального времени обновления с использованием журналов снимков AdvantageKit без влияния на другие подсистемы робота?
Существуют ли рекомендации по внедрению байесовского оптимизатора в код робота Java, чтобы обновления происходили безопасно и эффективно в режиме реального времени?
Примечание: обновляйте только после каждого снимка с использованием новых данных, которые дает снимок, таким образом, обновления не будут происходить в середине снимка. Отсюда необходимость быстрого обновления.
Почему это сложно
Нам нужны обновления за доли секунды после каждого снимка.
Все вычисления должны происходить на roboRIO; никакой разгрузки на Python или внешние серверы.
Мы хотим, чтобы это было надежно и безопасно для использования во время практических занятий.
Количество настраиваемых коэффициентов составляет ~ 8–10, и их взаимодействие может быть нелинейным.
Любые рекомендации, Java библиотеки, шаблоны кода или примеры для байесовской настройки Java в реальном времени для FRC будут чрезвычайно полезны.
Я работаю над роботом [b]FIRST Robotics Competition (FRC)[/b], используя [b]Java[/b] и [b]WPILib[/b], и я хочу реализовать [b]байесовскую оптимизацию в реальном времени[/b] для автоматической настройки коэффициентов в нашем FiringSolutionSolver.java во время работы.
Текущая настройка [b][code]FiringSolutionSolver.java[/code][/b] вычисляет решения для стрельбы снарядами для турельного стрелка. Он использует [b][code]LoggedTunableNumbers[/code][/b] (через AdvantageKit) для настраиваемых констант, таких как: [list] [*]коэффициент сопротивления
[*]масса снаряда
[*]площадь снаряда
[*]высота запуска
[*]цель высота
[*]максимальная скорость на выходе
[*]параметры итерационного решателя
[/list] Другие подробности: [list] [*]Результаты выстрела (попадание/промах) регистрируются в [b]AdvantageKit[/b] в режиме реального времени с помощью кнопок ввода оператора.
[*]Система обзора [b](PhotonVision)[/b] определяет расстояние и высоту до цели; это [b]не[/b]** часть оптимизации**.
[*]Снаряд представляет собой 4-дюймовый шарик из пенопласта (3,5 дюйма в сжатом состоянии).
[/list]
Цель Мне нужен [b]BOT-тюнер[/b] (байесовская оптимизация) Tuner), который выполняет следующие действия: [list] [*]Настраивает [b]все коэффициенты решателя[/b] ([code]LoggedTunableNumbers[/code]) в режиме реального времени, когда [b]каждый новый выстрел производится и регистрируется[/b].
[*]Использует журналы попаданий/промахов AdvantageKit для информирования цикла оптимизации.
Advantagekit ведет журналы, но с помощью метода нажатия кнопки на панели управления для записи попаданий или промахов после каждого выстрела. Предполагается реализовать позже.
[*]Коэффициенты обновляются [b]мгновенно[/b] — без ожидания между выстрелами.
[*]Работает [b]полностью на Java[/b] – Python или внешние службы не подходят из-за ограничений времени выполнения roboRIO.
[*]Является [b]легким[/b] и достаточно эффективным для вычислений на роботе в реальном времени.
[/list]
Ограничения/соображения [list] [*]Я концептуально понимаю байесовскую оптимизацию в высокой степени (суррогат гауссовского процесса, функция сбора данных, последовательное обновление), но [b]никогда реализовал это в коде[/b]. Однако я быстро учусь и прошу вас не учитывать барьер знаний при рекомендации вариантов или решений.
[*]Мне не нужно настраивать физические свойства мяча или измерения зрения (расстояние до цели по осям); только константы решателя.
[*]Аппроксимации допустимы, если полный инкрементный байесовский оптимизатор в Java невозможен.
[*]Это должно быть интегрировано [b]непосредственно в базу кода робота[/b] для интерактивных обновлений.
[/list]
Вопросы [list] [*]Существуют ли [b]чистые библиотеки Java[/b], способные [b]онлайн/добавочную байесовскую оптимизацию[/b], подходящие для среды робота FRC? Я думаю о BayesOpt, но у меня есть опасения/вопросы относительно его реализации.
[*]Если нет, то как лучше всего реализовать [b]легкий суррогатный или инкрементальный байесовский тюнер[/b] для LoggedTunableNumbers в Java?
[*]Как мне структурировать код для [b]коэффициента реального времени обновления[/b] с использованием журналов снимков AdvantageKit без влияния на другие подсистемы робота?
[*]Существуют ли [b]рекомендации по внедрению байесовского оптимизатора[/b] в код робота Java, чтобы обновления происходили безопасно и эффективно в режиме реального времени?
Примечание: обновляйте только после каждого снимка с использованием новых данных, которые дает снимок, таким образом, обновления не будут происходить в середине снимка. Отсюда необходимость быстрого обновления.
[/list]
Почему это сложно [list] [*]Нам нужны [b]обновления за доли секунды[/b] после каждого снимка.
[*]Все вычисления должны происходить на roboRIO; никакой разгрузки на Python или внешние серверы.
[*]Мы хотим, чтобы это было надежно и безопасно для использования во время практических занятий.
[*]Количество настраиваемых коэффициентов составляет ~ 8–10, и их взаимодействие может быть нелинейным.
[/list]
Любые рекомендации, [b]Java библиотеки[/b], [b]шаблоны кода[/b] или [b]примеры[/b] для байесовской настройки Java в реальном времени для FRC будут чрезвычайно полезны.