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