runtime/rbs_perception
2023-12-29 22:55:27 +03:00
..
config rbs_executor with bt_file (param) 2023-12-29 22:55:27 +03:00
include/rbs_perception add perception filter 2023-07-17 16:40:28 +03:00
launch rbs_executor with bt_file (param) 2023-12-29 22:55:27 +03:00
rbs_perception Add node for object perception 2023-04-25 11:57:26 +00:00
scripts rbs_executor with bt_file (param) 2023-12-29 22:55:27 +03:00
src rbs_utils in env_manager and clear code 2023-12-14 12:00:35 +03:00
CMakeLists.txt Resolve "Добавить параметры в конфиг pose estimation узла" 2023-11-13 13:08:28 +00:00
package.xml ROS2 node for 6D pose estimation skill 2023-08-03 10:01:40 +00:00
README.md Resolve "Добавить параметры в конфиг pose estimation узла" 2023-11-13 13:08:28 +00:00

Оценка 6D положения объекта

Есть два варианта работы узла по оценке 6D позы объекта. Первый предполагает использование ROS-узла как сервиса, второй - как lifecycle-узла. Узел с управляемым жизненным циклом (lifecycle) позволяет лучше контролировать состояние системы ROS. Такой подход позволит системе убедиться, что все компоненты были созданы правильно, прежде чем любой компонент сможет начать выполнение своей задачи. Это также позволит перезапускать или заменять узел в режиме онлайн.
Так как задача оценки позиции объекта требует использования больших вычислительных ресурсов, то реализация lifecycle-узла позволяет управлять загрузкой ресурсов при этом.

Вариант 1. Сервис по оценке позы объекта

Запуск узла производится командой:

ros2 run rbs_perception pose_estimation.py

Запускается узел с именем image_sub2 по умолчанию. В нём создаётся сервис для распознавания позиции с именем detect6Dpose, который ожидает клиентский запрос.
Для получения позиции заданного объекта клиент посылает сервису запрос с параметром ObjectInfo на входе

  • id - идентификатор,
  • name - имя объекта,
  • mesh_path - путь к mesh-файлу в формате *.ply.

При получении запроса сервис detect6Dpose подписывается на Image-сообщения с камеры /ground_true/camera_node, которые использует для запуска алгоритма 6D оценки позиции Megapose. После получения результата от Megapose сервис публикует сообщение с позицией (Quaternion) в pose6D_[obj] topic.

Вариант 2. Lifecycle-узел ROS для получения 6D-позы

Запуск узла производится командой:

ros2 run rbs_perception pose_estimation_lifecycle.py

Запускается узел с именем image_sub2 по умолчанию. Настроечные переменные задаются в файле конфигурации config/pose_estimation_config.json. Пример:

{
 "nodeName":"image_sub2",
 "topicImage":"/outer_rgbd_camera/image",
 "topicCameraInfo":"/outer_rgbd_camera/camera_info",
 "topicDepth":"/outer_rgbd_camera/depth_image",
 "topicSrv":"/image_sub2/detect6Dpose",
 "publishDelay": 3.3,
 "tf2_send_pose": 1
}
  • "nodeName"- это поле указывает на имя узла в контексте ROS;
  • "topicImage"- это поле определяет топик, по которому публикуются изображения, полученные с RGBD-камеры;
  • "topicCameraInfo"- это поле указывает на топик, по которому публикуется информация о камере, такая как параметры калибровки и настройки;
  • "topicDepth"- это поле определяет топик для изображений глубины, получаемых от RGBD-камеры. Изображения глубины предоставляют информацию о расстоянии до объектов в сцене;
  • "topicSrv"- это поле определяет топик, по которому публикуется 6D-поза объекта после оценки;
  • "publishDelay"- это поле, указывает задержку (в секундах) перед публикацией сообщений в топики;
  • "tf2_send_pose"- это поле связано с отправкой данных о позе (положении и ориентации) в системе tf2, которая используется в ROS для управления координатными преобразованиями. Значение 1 означает включение или активацию данной функции (0 - отключение).

Первым этапом работы узла будет являться его настройка вызовом on_configure(), перед которым необходимо установить параметр узла "mesh_path". Этот строковый параметр должен содержать полный путь к файлу сетчатой модели объекта в формате *.ply.
Если конфигурирование завершено успешно, узел перейдёт в состояние 'inactive'. Затем нужно узел сделать активным, вызвав on_activate(). При этом активируется подписчик на изображения с камеры ("topicImage"), в обратном вызове которого будет происходить распознавание позиции объекта (megapose) и его публикация в топике "topicSrv".
Чтобы отключить распознавание нужно вызвать событие on_deactivate(). Для новой настройки узла при необходимости оценки позы другого объекта нужно вызвать событие on_cleanup(), а затем повторить процедуру конфигурирования и активации.

Важное замечание


Для правильной работы алгоритма Megapose нужно передавать модель объекта с размерами в мм (mesh-файл *.ply).