知之者 不如好之者, 好之者 不如樂之者

기계처럼 살지 말고, 즐기는 인간이 되자

Project/ROS2 + CV + Robot (2023.12~2024.02)

ROS2 에서 Vision 기반 UR3e Pick and Place 수행하기

코방코 2024. 2. 16. 16:44
728x90

 

 

지금까지 많은 것들을 쌓아왔습니다.

Vision 없이 고정된 위치를 Pick and Place 해보았고, 

 

ROS2 MoveIt2 에서 UR3e + Intel RealSense Pick and Place 예제 수행

점점 심연 속으로 들어왔다는 느낌이 들고 있습니다. 가끔 어떤 자료를 찾는 것 조차 버겁게 느껴집니다. 학문적으로 수준이 높아서라기보단, 특정한 주제에 대해 꽤 깊게 들어왔다는 말을 하고

cobang.tistory.com

 

로봇 팔을 Vision 을 기반으로 물체를 인식하고 집도록 하기 위하여

Camera Image 로 인식된 이미지로부터 Camera coordinate와 World coordinate 로 변환하는 방법을 공부했고,

 

이미지로부터 실제 좌표를 얻기 위한 Camera Transformation 수행

이번 글에서는 Camera Transformation 개념에 대해서 간단히 언급하겠습니다. 우선 Camera Transformation 은 카메라에 보인 물체를 실제 좌표계의 위치로 옮기는 작업입니다. 카메라 상에서 물체의 x, y pixel

cobang.tistory.com

 

이에 필요한 Input들을 얻기 위해서 아래와 같이 

YOLO 를 기반으로 특정 물체의 pixel 좌표를 얻는 동시에, 

Intel Realsense Camera를 이용하여 Depth와 Camera Intrinsic Matrix를 얻을 필요가 있었습니다.

 

ROS2 에서 Intel realsense 기반 YOLOv8 분석하고 결과 topic publishing 하기

이번에는 ROS2 humble에서 Intel D435 Depth Camera에 YOLOv8 을 붙여보도록 하겠습니다. 이번 글의 최종 목표는 rviz에서 YOLOv8으로 분석된 Image 화면을 확인하고 결과를 publishing 하는 것입니다. 실력이 부족

cobang.tistory.com

 

또한, MoveIt2 를 이용하여 현재 카메라 link의 위치와 quaternion 을 얻을 필요가 있었습니다.

 

ROS2 MoveIt2 이용하여 UR3e 의 Link Position 및 Quaternion 획득하기

지난 글들에서, UR3e 에 Intel RealSense ROS2 패키지를 추가하여 vision을 달고, 고정 위치에 대해 pick and place를 수행해보았습니다. ROS2 MoveIt2 에서 UR3e + Intel RealSense Pick and Place 예제 수행 점점 심연 속으

cobang.tistory.com

 

이제는 vision 을 기반으로 로봇팔이 해당 위치로 이동하고, 

물체를 집어 옮기도록 해보겠습니다.

코드와 토픽 subscribing, publishing관련해서는

아직 리팩터링이 많이 필요하지만, 

이를 위해 기록을 미루다가는 너무 가물가물해질 것 같아 

얼른 초안을 작성해두고 보완하겠습니다.

 

최종 목표는 YOLO 가 아닌, NVlab의 CenterPose를 붙이는 것이기 때문에 

일단은 Camera를 통해 들어온 정보를 기반으로 Pick and Place가 가능한 정도이며,

또한, Calibration이 정확하지 않기에 실제 작동 시 오차가 있는 것을 감안하여야 합니다.

 

지난 번 ROS2 YOLOv8 repository를 붙였던 상태에서  

ur_camera_position.cpp 파일을 다음과 같이 수정하겠습니다.

예전에 camera position 과 quaternion을 얻어오는 코드에서 

yolo topic을 구독해서 pick and place를 수행하도록 어거지로 작성을 해봤습니다.

CenterPose로 수행할 때는 좀 더 깔끔하게 subscribing과 publishing 가능하도록 수정을 해보겠습니다..

 

 

 

그리고 패키지를 다시 빌드 해주시기 바랍니다.

그리고 해당 첫번째 터미널에서 다음과 같이 realsense camera node를 활성화 시키겠습니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

colcon build

source install/setup.bash

ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x30 pointcloud.enable:=true

depth 와 color 해상도가 일치하지 않으면,

지난 번 글처럼 노란색 3d 박스가 다른 위치에 그려지는 문제가 발생하니 주의하시기 바랍니다.

 

두 번째  터미널에서 rviz 활성화 해주겠습니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

source install/setup.bash

ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur3e robot_ip:=192.168.1.101 launch_rviz:=false

 

세 번째 터미널에서 moveit2 활성화 해주겠습니다.

이 때, UR 터치패드에서 외부 제어 프로그램 실행시켜주시기 바랍니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

source install/setup.bash

ros2 launch ur_moveit_config ur_moveit.launch.py ur_type:=ur3e launch_rviz:=true robot_ip:=192.168.1.101 reverse_ip:=192.168.1.102

 

4번째 터미널에서 YOLO 활성화 시켜주겠습니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

source install/setup.bash

ros2 launch yolov8_bringup yolov8_3d.launch.py input_image_topic:=/camera/camera/color/image_raw input_depth_topic:=/camera/camera/depth/image_rect_raw input_depth_info_topic:=/camera/camera/depth/camera_info target_frame:=camera_link device:=cpu model:=yolov8m.pt

 

이제 rviz에서 여러 display를 add 시켜주고

pick and place를 수행시켜보겠습니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

source install/setup.bash

ros2 launch ur_camera_position ur_camera_position_launch.py

 

시연 동영상입니다.

 

 

 

728x90
반응형