Skip to content

Автоматический захват объекта с управлением манипулятором и мобильной платформой через ROS2. Docker, UDP, CycloneDDS.

Notifications You must be signed in to change notification settings

dakolzin/pub_spam_er

Repository files navigation

СПАМ (экстремальная робототехника)

СИ

Оглавление


Цель

Разработка системы для автоматического захвата заранее заданного объекта.


Версия операционной системы и необходимые зависимости

Параметр Значение
Версия операционной системы Ubuntu 22.04
Версия ROS2 Humble

Установка

Сначала необходимо создать рабочее пространство:

mkdir -p ros2_ws/src

После этого скачать репозиторий и собрать пространство:

cd ros2_ws/src

git clone http://git.robotic.net:3000/PodkolzinDD/ros2_bcn3d_moveo.git

cd ..

colcon build

. install/setup.bash

Описание каталогов

В данном репозитории у нас 3 части.

В man_part находится система управления манипулятором.

В plat_man находится система управления платформой.

В udp_relay_node находится узел для объединения данных с сокетов и перенаправление их на нужные сокеты.


Сборка образа Docker

Данный проект поддерживает работу на архитектурах x86 и ARM64. Для этого при сборке образа необходимо указать базовый образ (прародителя). В скрипте build_img.sh по умолчанию используется базовый образ tiryoh/ros2-desktop-vnc. При выполнении команды:

bash build_img.sh

будет собран образ для архитектуры x86. Для сборки образа на другой архитектуре можно воспользоваться следующей командой:

bash build_img.sh osrf/ros:humble-desktop-full

О контейнере Docker

Для запуска контейнера необходимо выполнить скрипт build_cont.sh:

bash build_cont.sh

В этом скрипте используются следующие флаги:

--name spam: задаёт имя контейнера как spam. Это позволяет легко идентифицировать контейнер и ссылаться на него в дальнейших командах.

--runtime=nvidia: указывает, что контейнер должен использовать NVIDIA-совместимую среду выполнения. Этот флаг необходим для работы с GPU с помощью контейнера.

--gpus all: выделяет все доступные GPU для контейнера. Чтобы ограничить использование конкретных GPU, можно указать их идентификаторы.

--privileged: запускает контейнер с привилегированными правами, что дает ему доступ к устройствам и некоторым системным ресурсам хоста. Это необходимо, если контейнеру нужны расширенные возможности, такие как доступ к устройствам, USB или сетевым интерфейсам.

-it: сочетание флагов -i (interactive) и -t (tty). Первый сохраняет стандартный ввод контейнера открытым, второй предоставляет виртуальный терминал для взаимодействия с контейнером через командную строку.

--rm: удаляет контейнер после завершения его работы. Это предотвращает накопление остановленных контейнеров.

--net=host: этот флаг указывает, что контейнер должен использовать сетевую конфигурацию хоста. Это означает, что контейнер будет иметь доступ к тем же сетевым интерфейсам, что и хост, и будет слушать на тех же портах, что и хост.

--env="QT_X11_NO_MITSHM=1": устанавливает переменную окружения QT_X11_NO_MITSHM=1, которая отключает использование MIT-SHM (shared memory) в X11 для приложений, использующих Qt. Это нужно для корректной работы Qt-приложений в контейнере с X11.

--env DISPLAY=unix$DISPLAY: устанавливает переменную окружения DISPLAY, указывающую контейнеру, какой дисплей использовать. Значение unix$DISPLAY указывает на использование текущего X-сервера хоста.

--volume /tmp/.X11-unix:/tmp/.X11-unix: монтирует директорию /tmp/.X11-unix с хоста в контейнер. Эта директория используется X11 для связи с дисплеем. Монтирование нужно для того, чтобы контейнер мог выводить графику на экран хоста.

spam: указывает на образ Docker, который будет запущен. В данном случае, это образ с именем spam.

После запуска контейнера его можно остановить или запустить заново.

Для открытия дополнительного окна контейнера можно воспользоваться скриптом.


Порядок запуска файлов

При запуске контейнера автоматически запускается узел для объединения сокетов. Для начала работы необходимо запустить системы управления платформой и манипулятором. Для этого в новых терминалах необходимо запустить следующие sh скрипты:

# Платформа
bash 1.sh
# Манипулятор
bash 2.sh

Первый скрипт запускает управление платформой через joint_states. Второй скрипт запускает систему управления манипулятором и платформой с помощью ros2_control. Для публикации изображения с камеры используется этот скрипт, который публикует видео с разрешением 640x480 и частотой 15 кадров в секунду.

⚠️ Важно: чтобы получить видеопоток на другом компьютере, необходимо предварительно настроить удалённый компьютер. Для этого выполните следующие команды:

export ROS_DOMAIN_ID=15
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

Для передачи изображений используется система обмена сообщениями ROS 2 под названием CycloneDDS.

CycloneDDS — это реализация DDS (Data Distribution Service), которая служит транспортным слоем для связи между узлами в ROS 2. Она позволяет узлам обмениваться сообщениями независимо от их физического местоположения в сети, обеспечивая высокую производительность и гибкость.


Захват объекта

Был произведен опыт захвата объекта с подъездом плафтормы к объекту на ноутбуках. Для этого требуется код нейронных сетей и скрипт для перемещения платформы, которые располагаются по следующему пути: .

Видео работы ниже

⚠️ Важно: также необходимо подключить лидар и СПАМ, для этого необходимо настроить свою сеть:

# для лидара установить ip
192.168.2.189

# для плафтормы ip
192.168.3.199

Внизу можно увидеть следущие команды для запуска системы:

# Запуск узла перенаправления команд по udp
ros2 run udp_relay_node udp_relay_node 
# Запуск системы управления платформой с NAV2 и SLAMToolbox
ros2 launch trk211_teleop go.launch.py 
# Запуск системы управления манипулятора и скриптов для захвата объекта
ros2 run go_go_py start 

About

Автоматический захват объекта с управлением манипулятором и мобильной платформой через ROS2. Docker, UDP, CycloneDDS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published