Новое Распределяем каналы MAX по категориям и территориям. Читать новость
Открытый канал ID 77257384155737

From ML to Robot

ML-инженер уволился, чтобы ворваться в робототехнику. Тут - мои баги, C++ до дыр и попытки подружить ROS2 и Кубер.

Россия
Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

День 59. Появилась вакансия. Меняю приоритеты на неделю.

Сегодня получил запрос на обработку персональных данных от компании-работодателя. Не буду пока раскрывать детали - скажу только, что направление робототехника. Не совсем разработка в чистом виде, но это тот путь, ради которого я всё это затеял.

Приоритеты на неделю меняются:

K8s-спринт - «Управление ресурсами и масштабирование». Он прямо в требованиях вакансии. Так что продолжаю, но теперь с чётким пониманием, зачем.

Запуск чекпоинтов - обучение политики уже стартовало, надо следить и не терять время GPU.

Подготовка к возможному собесу - собрать в кучу всё, что знаю: ML-бэкграунд, бэкенд, K8s, C++, ROS 2, RL. Разложить по полочкам, чтобы не мямлить.

Что откладываю: advanced ROS 2, глубокое погружение в MoE, эксперименты с рельефом и толчками. Вернусь к ним, когда будет ясность по вакансии.

Итог: неделя - на спринт, чекпоинты и подготовку.

#robotics #kubernetes #RL #jobsearch #careerchange
Просмотры: 16
Перейти в пост Открыть в MAX Сообщить о неточности
День 58. Промежуточный проект закрыт. Награды настроены. Новый спринт по k8s.
ROS 2: промежуточный проект - готов. Кастомные action_server и action_client робота и action-интерфейс готовы. Проблем не возникло: механика Actions, политики, отмена - всё улеглось. Когда проект заходит без боли, это лучший индикатор, что фундамент держит.

RL: настроил награды для обучения политики прямохождения. Откладывать больше нельзя - вычислительное время видеокарты должно работать на максимум. Собрал reward-функцию: что поощряем (скорость, стойка, гладкость), что штрафуем (падения, рывки, отклонение от команды). Это не циферка, а баланс настроек, который надо выстроить с пониманием. Завтра - запуск.

K8s: открылся новый спринт - «Управление ресурсами и масштабирование». Пока вводный урок. Тема практичная: requests/limits, HPA, VPA, квоты.

Итог: проект закрыт, награды готовы, новый спринт открыт. Завтра - запуск обучения.
#ROS2 #RL #kubernetes #UnitreeG1 #careerchange
Просмотры: 16
Перейти в пост Открыть в MAX Сообщить о неточности
День 56-57. Выходные. Политики дожаты. Начал промежуточный проект.
Выходные - как есть. Не буду притворяться, что это были лёгкие дни.
Что доделал:
Разобрался с политиками обработки задач, когда новая цель приходит при уже активной. Это тот самый is_active() - проверка, выполняется ли сейчас задача. На его основе строятся все четыре политики: параллельно, отказ, вытеснение, очередь. Теперь в Cpp ноде это не «магия из примера», а понятная логика: проверяем состояние, решаем, что делать с новой целью.

И приступил к промежуточному проекту курса.

Задача: сделать кастомные ноды action_server и action_client для гипотетического робота. Робот должен планировать свои действия через Action-интерфейс - то есть клиент отправляет цель, сервер её выполняет с feedback, а логика планирования живёт на стороне клиента.
Это уже не учебное «повтори за лектором». Это первый раз, когда надо собрать что-то своё из кусков: свой .action файл, свой сервер, свой клиент, свои политики обработки целей. Пока в процессе.

Итог
: политики дожаты, проект начат. На неделе - добить.
#ROS2 #robotics #C++ #actions #UnitreeG1 #careerchange
Просмотры: 13
Перейти в пост Открыть в MAX Сообщить о неточности
День 55. Actions на Cpp: клиент, feedback, отмена. И проблема.

Сегодня добил клиентскую Action-ноду на Cpp. Расширил функционал: обработка всех исходов - ACCEPTED/REJECTED/ABORTED. Настроил Feedback, чтобы клиент получал промежуточный статус по ходу выполнения. И главное - настроил отмену задачи (а также заодно настроил MultiThreadedExecutor и Reentrant группу коллбэков).
Но ближе к концу дня случилось неприятное.
Я снова почувствовал себя обезьянкой, которая просто печатает с листа. Логика отмены цели (cancelling the goal) содержит столько ссылок, указателей и внутренних вызовов класса, что к концу я честно запутался. Не в синтаксисе - в том, почему каждая строчка стоит именно там и именно в таком порядке. Знакомое чувство, когда проходил Cpp поверхностно.
Но я не отчаиваюсь.
План на завтра:

Заглянуть в курс по Cpp - обновить память по указателям, ссылкам и владению.
Доделать goal policies для Cpp ноды, но уже осознанно.
И во всеоружии приступить к промежуточному проекту курса по ROS 2.
Обезьянка - это не приговор, это сигнал, что пора вернуться к фундаменту. Ровно то, о чём я писал в начале блога: дни закладки фундамента так же важны, как дни громких побед.

Ито
г: Actions на Cpp почти закрыты. Отмена - пока со скрипом, но я знаю, куда копать.
#ROS2 #robotics #C++ #executors #UnitreeG1 #careerchange
Просмотры: 19
Перейти в пост Открыть в MAX Сообщить о неточности
День 54. Actions: политики, C++ и первый инсайт про executors.

Добивал goal policy в Actions на Python. Разобрал все четыре сценария: параллельные цели, отказ от новой при активной, вытеснение текущей новой, очередь целей. Теперь понятно, как проектировать поведение сервера под конкретную задачу.

Интересный факт, который зацепи
л: при отмене цели сервер не отменяет её «сам по себе» - нужно, чтобы работал MultiThreadedExecutor и ReentrantCallbackGroup. Иначе колбэк отмены просто не может выполниться, пока занят основной колбэк выполнения. Связано это с тем, как экзекьюторы раздают колбэки по потокам. Пока информации об этом мало - но будет позднее. Отложил на потом, вернусь, когда дойду до экзекьютеров в курсе.

Главное за день: написал серверную ноду Action на C+
+.
И вот тут случился момент, ради которого стоило пройти через указатели и семантику перемещения. Я вдруг понял, зачем мы используем SharedPtr в ROS 2 и как он устроен под капотом: счётчик ссылок, контрольный блок, автоматическое освобождение, когда последний владелец уходит. Раньше это было «так принято, копируй из примера». Теперь - понимаю, почему именно так, и что будет, если сделать иначе.
Это то самое чувство, когда фундамент, который я закладывал, начинает работать. Указатели меня тогда завалили. Сегодня я их использую осознанно.

Итог:
Actions server на C++ - готово. Теперь осталось перенести остальное.
#ROS2 #robotics #C++ #executors #UnitreeG1 #careerchange
Просмотры: 21
Перейти в пост Открыть в MAX Сообщить о неточности
День 53. ROS 2 Actions — пока на Python.
Продолжаю advanced ROS 2. Сегодня — Actions.
Actions — это третий механизм коммуникации в ROS 2, после топиков и сервисов. Топики — это «выстрелил и забыл», сервисы — «запрос-ответ», а Actions — для длительных задач, которые надо мониторить и прерывать. Робот идёт к столу 30 секунд? Это Action: клиент отправляет цель, сервер шлёт обратную связь по ходу, клиент может отменить, если передумал.
Пока на Python — потому что так быстрее понять механику. C++ версия будет дальше.
Итог: Actions — понял. Осталось закрепить на C++, когда дойду.

#ROS2 #robotics #C++ #UnitreeG1 #careerchange
Просмотры: 23
Перейти в пост Открыть в MAX Сообщить о неточности
День 52. Продолжаю копать чекпоинты. И стартовал последний курс по ROS 2.
Продолжение вчерашней темы. Углубился в отбор и планирование.
Что уточнил по чекпоинтам:
Пересмотрел приоритеты ролей. Понял, что к поворот у нужно подщходить по другому — не искать чекпоинт, который уже поворачивает, а учить с того чекпоинта, который уже хорошо стоит. Стойка — корень, от неё пляшем. Так что база — это стойка и ходьба, а повороты пока «для галочки».
Разделил чекпоинты на две группы: база для дообучения (чистые, noise_std меньше 6, без падений) и архив (рекорды по награде, но не годятся как семя). Архив не удаляю — пусть лежит, мало ли.

Занимался сегодня планированием на следующий спринт — решил, что нужно уже смотреть вакансии и добивать ROS2 — политики PPO, конечно, хорошо, но вопросов на собесе будет по ROS2 больше.

Планирование на ближайшие дни:
Начать рассылать резюме (еще раз проревьюить) и добиться хотя бы одного, пусть и проавльного собеса.
Добить отбор чекпоинтов — зафиксировать финальные базовые чекпоинты.
Прогнать базу на height-field и с толчками.
И главное: постараться закрыть последний курс по advanced ROS2 на полторы недели. Уже, кстати, начал. Приступил к действиям и экзекьютерам — пора расчехлять C++ с умными указателями, пока окончательно не забыл =))

Итог: тема чекпоинтов обрастает деталями, план на спринт есть, последний курс по ROS2 открыт. Двигаемся.

#RL #robotics #ROS2 #UnitreeG1 #careerchange
Просмотры: 25
Перейти в пост Открыть в MAX Сообщить о неточности
День 51. Как выбирать чекпоинты политики.
Сегодня разбирался, как из 1000 обученных моделей выбрать 10 нормальных.
Главная мысль: смотреть не на награду, а отсеивать по шагам — от дешёвого к дорогому:

1. Здоровье политики
. Проверяю по логам обучения, не испорчена ли модель. Смотрю два числа: noise_std (σ) и награду. Это дёшево — не надо ничего запускать, просто открыть TensorBoard. Отсеивает заведомо непригодные чекпоинты.
2. Поведение
. Запускаю модель в headless-режиме (без картинки) и смотрю метрики: падает, идёт вперёд или поворачивается. Это единственный способ узнать, что модель реально делает, а не что о ней говорит награда.
3. Покрытие
. Смотрю, чтобы выбранные чекпоинты подходили для дальнейшего обучения по ролям — один хорошо стоит, другой ходит, третий поворачивается. Иначе возьму 10 почти одинаковых, и для будущих задач (а я хочу в MoE) они не пригодятся. Повороты, кстати, надо будет от того, который хорошо стоит учить, сейчас это скорее для галочки.

Про шум (noise_std
): это не шум на демке. На демо работает среднее, без шума. noise_std показывает, в каком режиме модель училась. Если noise_std слишком большой — почти все сэмплы упираются в клип, и среднее портится.
Почему не наград
а: она подогнана под конкретную задачу, между разными задачами не сравнивается, на плато почти не меняется.

Чест
но: тесты короткие — это быстрый скрининг, а не полная проверка.
Тема большая, завтра продолжаю копать в нее.
#RL #robotics #UnitreeG1 #careerchange
Просмотры: 23
Перейти в пост Открыть в MAX Сообщить о неточности
День 49. Helm — продвинутый уровень.
Продолжаю копать Helm. Сегодня — то, что отличает «умею деплоить» от «умею строить систему»:
Управление зависимостями чартов. Разобрался с Chart.yaml → dependencies, helm dependency update, условиями включения сабчартов через condition и tags. Теперь понял, как собирать сложные приложения из модульных кусков, а не пихать всё в один чарт.
Операции на разных этапах жизненного цикла. Хуки: pre-install, post-install, pre-upgrade, post-upgrade, pre-delete, post-delete. Можно запускать джобы для миграций БД, прогрева кэша, бэкапов — и всё это автоматически, в нужный момент. Плюс helm test для проверки релиза после деплоя.
Плагины. Helm можно расширять — например, helm-diff для просмотра изменений перед апгрейдом, helm-secrets для работы с зашифрованными values.
Итог: Helm раскрылся с новой стороны. Это не «apt для k8s», а полноценный инструмент управления жизненным циклом приложений.

День 50. ДЗ по Helm — сделано.


Сегодня без теории. Просто сел и сделал домашку по спринту.
Также сегодня отлично провел время с семьей. Поэтому не очень значительные успехи в учебе принял с пониманием.

Ит
ог: спринт по Helm закрыт. Полтинник дней в блоге. Двигаемся дальше.
#kubernetes #helm #devops #robotics #careerchange
Просмотры: 20
Перейти в пост Открыть в MAX Сообщить о неточности
День 48. Helm — глубже в чарты.
Продолжаю копать Helm. Сегодня — самое интересное:

Разработка Helm-чартов. Разобрался со структурой чарта: Chart.yaml, values.yaml, templates/. Понял, как работают шаблоны с {{ .Values }}, как переиспользовать куски манифестов через _helpers.tpl, как условно включать ресурсы через {{- if }}. Оказалось, что писать чарт — это не просто «завернуть yaml в папку», а реально проектировать конфигурацию так, чтобы её можно было переиспользовать и параметризовать.

Управление Helm-релизами. Разобрался с helm install, upgrade, rollback, history, uninstall. Релиз — это не просто «задеплоил и забыл», это версионируемая сущность. Можно откатиться на предыдущую ревизию одной командой, посмотреть историю изменений, понять, что и когда сломалось. Вот это уже похоже на нормальный CI/CD-подход.

Итог: Helm перестаёт быть чёрным ящиком. Завтра — закрепление на практике.
#kubernetes #helm #devops #robotics #careerchange
Просмотры: 25
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «From ML to Robot» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти