- Цель
- Версия операционной системы и необходимые зависимости
- Установка
- Описание каталогов
- Сборка образа Docker
- О контейнере Docker
- Порядок запуска файлов
- Захват объекта
Разработка системы для автоматического захвата заранее заданного объекта.
Параметр | Значение |
---|---|
Версия операционной системы | 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 находится узел для объединения данных с сокетов и перенаправление их на нужные сокеты.
Данный проект поддерживает работу на архитектурах x86 и ARM64. Для этого при сборке образа необходимо указать базовый образ (прародителя). В скрипте build_img.sh по умолчанию используется базовый образ tiryoh/ros2-desktop-vnc. При выполнении команды:
bash build_img.sh
будет собран образ для архитектуры x86. Для сборки образа на другой архитектуре можно воспользоваться следующей командой:
bash build_img.sh osrf/ros:humble-desktop-full
Для запуска контейнера необходимо выполнить скрипт 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