День 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