- Цель
- Версия операционной системы и необходимые зависимости
- Установка
- Порядок запуска файлов
- Управление манипулятором с подключением платы через TCP
- Захват объекта с применением маркеров ArUco
- Захват объекта с применением нейронной сети
- Отрисовка рабочей зоны манипулятора
- Дальнейшие планы
Целью данной работы является создание прототипа манипулятора, который будет использоваться в качестве тестового стенда. Это позволит проводить испытания и отладку программного обеспечения, разрабатываемого для других проектов.
Параметр | Значение |
---|---|
Версия операционной системы | Ubuntu 22.04 |
Версия ROS2 | Humble |
Зависимости |
---|
ros-${ROS_DISTRO}-xacro |
ros-${ROS_DISTRO}-moveit |
ros-${ROS_DISTRO}-ros2-control |
ros-${ROS_DISTRO}-rviz-visual-tools |
ros-${ROS_DISTRO}-ros2-controllers |
ros-${ROS_DISTRO}-robot-state-publisher |
ros-${ROS_DISTRO}-joint-state-publisher |
ros-${ROS_DISTRO}-realsense2-camera |
ros-${ROS_DISTRO}-diagnostic-updater |
ros-${ROS_DISTRO}-joint-state-publisher-gui |
Сначала необходимо создать рабочее пространство:
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
Для начала запустите move_group, RViz и другие компоненты (при подключении геймпада можно управлять манипулятором как по степеням подвижности, так концевой точкой):
ros2 launch bcn3d_moveo_moveit bcn3d_moveo_joy.launch.py
В данной итерации я не подключал питание к Mega, поэтому при подключении плат по USB необходимо сначала подключить Mega, а затем Uno. Это связано с тем, что в коде Uno указан порт USB, и изменение порядка подключения может привести к ошибке.
Затем запустите скрипт для приема данных с тактильных датчиков, которыми управляет Arduino Uno. Скрипт инициализирует топик "fsr_joint_states":
ros2 run py_pubsub go_go_fsr_topic
Далее необходимо запустить скрипт, отвечающий за взаимодействие с платой Arduino Mega. Эта плата управляет шаговыми двигателями степеней подвижности и сервоприводом схвата:
ros2 run py_pubsub go_go_bcn3d
После этого можно проверить выполнение перемещения в заранее заданную точку:
ros2 run bcn3d_moveo_scripts go_go_to_the_point
Для начала запустите move_group, RViz и другие компоненты (при подключении геймпада можно управлять манипулятором как по степеням подвижности, так концевой точкой):
ros2 launch bcn3d_moveo_moveit bcn3d_moveo_joy.launch.py
Скрипт, в котором можно настроить кнопки "joystick_servo_example.cpp" (отдельные параметры Servo можно изменять в конфигурационном файле "bcn3d_moveo_sim_config.yaml").
1, 3, 4, 5 - степени подвижности манипулятора; EE - управление концевой точкой; CC - смена режима управления (телеуправление, через скрипты).
Обнаружена ошибка: когда происходит переключение с режима скриптового управления на телеуправление, манипулятор автоматически возвращается в последнюю позицию, которая была задана при управлении с помощью геймпада.
Затем запустите скрипт для приема данных с тактильных датчиков, которыми управляет Arduino Uno. Скрипт инициализирует топик "fsr_joint_states":
ros2 run py_pubsub go_go_fsr_topic
Далее необходимо запустить скрипт, отвечающий за взаимодействие с платой Arduino Mega. Эта плата управляет шаговыми двигателями степеней подвижности и сервоприводом схвата:
ros2 run py_pubsub go_go_bcn3d_tcp
Конечный вариант запуска будет выглядеть примерно следующим образом:
bash go_go_big_run
В разработке
Для начала необходимо запустить все компоненты, описанные выше (файл запуска, скрипт связи с Uno, скрипт связи с Mega). Затем необходимо запустить скрипт для получения кадра объекта относительно камеры:
ros2 run py_pubsub go_go_find
Для отображения маркера необходимо его добавить в RViz и запустить скрипт:
ros2 run py_pubsub go_go_object
Чтобы захватить объект необходимо создать кадр для конечной точки манипулятора:
ros2 run py_pubsub go_go_point_to_grasp
В разработке
Для начала необходимо запустить все компоненты, описанные выше (файл запуска, скрипт связи с Uno, скрипт связи с Mega). Затем необходимо запустить скрипт для создания кадра камеры (данные получены с помощью qr-метки):
ros2 run py_pubsub go_go_camera
После этого необходимо установить соединение с удаленным компьютером по SSH, на котором будет запущена нейронная сеть. На удаленном компьютере запустите скрипт start.py, а на локальном компьютере запустите соответствующий скрипт:
ros2 run py_pubsub go_go_sub
И, наконец, после ожидания, запустите передачу изображений с камеры:
cd src/py_pubsub/py_pubsub/
python3 pub.py
С помощью скрипта можно отобразить рабочую зону:
ros2 run py_pubsub go_go_workspace_all
Чтобы отобразить только внешний слой ограничений рабочей зоны, необходимо использовать команду:
ros2 run py_pubsub go_go_workspace
Для отображения внутреннего слоя ограничений используйте команду:
ros2 run py_pubsub go_go_workspace_inside
Для визуализации в RViz выполните следующие шаги.
Перейдите в Displays -> Add -> PointCloud2. В настройках PointCloud2 выберите соответствующую тему (Topic) для отображения:
- /workspace_points для визуализации внешнего слоя;
- /workspace_inside_publisher для визуализации внутреннего слоя;
- /workspace_points_all для отображения всех доступных перемещений.
Также предусмотрен вариант отрисовки рабочей зоны поверхностями. Для этого необходимо запустить следующие скрипты:
ros2 run py_pubsub go_go_workspace_delaunay_inside
ros2 run py_pubsub go_go_workspace_delaunay
Для визуализации в RViz выполните следующие шаги.
Перейдите в Displays -> Add -> Marker. В настройках Marker выберите соответствующую тему (Topic) для отображения:
Планы развития проекта.
-
Разработка алгоритма обратной кинематики (использование нейронных сетей для решения обратной задачи кинематики, что позволит манипулятору эффективно достигать заданных точек в пространстве).
-
Настройка системы захвата объектов (применение нейронных сетей для улучшения точности и надежности процесса захвата и удержания объектов).
-
Устранение технических и программных недоработок*.
*Устранение люфта в четвертой степени подвижности. Исправление звука работы двигателей во второй степени подвижности. Устранение люфтов в механизме схвата. Исправление программных ошибок, например, проблемы с переключением в режим управления геймпадом.