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

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

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

ROS2 + UR3e + Intel RealSense + CenterPose 신발 정리 수행하기

코방코 2024. 2. 27. 15:39
728x90

 

이번 글은 Docker 컨테이너 내부에서 ROS2 UR3e를 이용하여

Intel RealSense 기반으로 Categorized Object Pose Estimation 알고리즘인 Centerpose를 수행하여

신발을 정리한 과정에 대해 작성하도록 하겠습니다.

 

 

연구원에서의 마지막 정리 글은 소감도 함께 담고 싶습니다.

두 달 동안 많다면 많고, 적다면 적은 여러 task 들을 수행해보았습니다.

초기에 목표로 했던 신발 정리를 하는 로봇 팔에 결론적으로는 도달했지만

한편으로는 아쉬운 마음이 들기는 합니다.

 

뭔가를 시작할 때 항상 마스터피스를 내놓고 싶은데,

어느 순간부터 현실과 타협하는 저를 보며 아쉬운 마음이 많이 들긴했습니다.

물론 두 달이라는 시간이 부족한 감도 없지 않았습니다.

 

누군가가 제가 써온 글을 보시면 잘했다고 생각하실지

부족한 점이 많다고 생각하실지 잘 모르겠습니다.

냉정하게 잘한 점보다 부족한 점이 더 많다는 것을 저도 인정하겠습니다.

camera coordinate 와 world coordinate 를 제대로 맞추지 못한 점과,

로봇 제어 실력의 부족

ROS2 분야의 무지에 대한 아쉬움이 많이 남는 것 같습니다.

 

그래도 정말 운이 좋았고, 부족한 저에게 뜻깊고 좋은 기회였습니다.

부족함에 대해 핑계 대지 않고 더 많이 배우고 성장하겠습니다.

그럼에도 이 글의 간단한 작동 영상에 도달하기 까지 두 달 동안의 많은 희노애락이 담겨있습니다.

이 50초 남짓의 영상을 만들기 위해 부족한 실력으로 많은 애를 썼던 것 같습니다.

부족한 저에게도 많은 조언과 지원해주신 인공지능연구단장님께.

그리고 연구원 분들께 감사드립니다.

 


 

이전 글까지의 과정이 전부 수행되어있다는 가정하에 진행하겠습니다.

 

Docker 컨테이너 내부에 ROS2 UR3e 연결하기

지난 글에서 docker 컨테이너 내에서 Intel Real sense를 이용하여 Object Pose Estimation을 수행하는 과정을 작성했습니다. RealSense 기반 ROS2 에서 Real Time CenterPose 실행 지난 글에서 Isaac ROS CenterPose 를 이용

cobang.tistory.com

 

먼저 제가 작성한 centerpose pick and place github repository 를

docker 환경 내에서 clone 합니다.

 

GitHub - cobang0111/centerpose_pick_and_place: ROS2 Pick and Place using Universal Robot UR3e + Object Pose Estimation (CenterPo

ROS2 Pick and Place using Universal Robot UR3e + Object Pose Estimation (CenterPose) - cobang0111/centerpose_pick_and_place

github.com

 

docker start <containter-id>

docker exec -it <containter-id> bash

cd /workspace/isaac_ros-dev/src

git clone https://github.com/cobang0111/centerpose_pick_and_place

cd ..

colcon build --packages-select centerpose_pick_and_place

 

실행 코드만 살펴보고 가겠습니다.

전체적인 structure와 작동 원리는 다음과 같습니다.

1. 홈 위치에 로봇 위치

2. Centerpose 를 통해 신발 인식 시 해당 신발의 center point 의 camera coordinate가 topic으로 획득 됨

3. 이를 real world coordinate 로 변환 (디테일은 아래 글 참조) - D435에 맞춰서 tuning을 살짝 했습니다.

 

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

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

cobang.tistory.com

4. 신발의 quaternion 과 real world coordinate에 맞춰 대략적 이동

5. 지속적으로 감지되는 camera coordinate를 기반으로 신발 구멍에 Gripper가 들어가도록 10Hz 제어

10Hz를 선택한 이유는 Centerpose 의 성능이 대략 10Hz 정도 나오고,

UR robot에 명령이 씹히지 않고 전달되도록 하기 위함

10Hz 이상을 아직 시도해보지는 않았습니다.

6. Grasping 위치 도달시 집어 신발을 정리

7. 이 과정을 신발 짝을 맞추도록 반복

 

아쉽게도 scanning 과정을 만들지 않아서,

로봇 팔이 돌아와서 위치하는 곳에 신발이 감지되어야 옮겨 놓습니다.

보완할 점은 많지만 기본적인 패키지들을 다 붙이고

기능도 다 만들었기 때문에 충분히 발전 시킬 수 있을거라 기대됩니다.

  

centerpose_pick_and_place.cpp 전체 코드입니다.

 

결과를 얻기 위해서 이전 글과 마찬가지로

전체 터미널에 대하여 명령을 순차적으로 첨부하겠습니다.

총 7개의 터미널이 필요합니다.

terminator를 사용하시는 것을 추천드립니다.

 

1st terminal (x 서버 활성화 + docker 시작 및 intel realsense node 실행)

xhost +local:root

docker start <containter-id>

docker exec -it <containter-id> bash

cd /workspace/isaac_ros-dev

ros2 launch realsense2_camera rs_launch.py rgb_camera.profile:=848x480x30 depth_module.profile:=848x480x30 pointcloud.enable:=true rgb_camera.color_format:=bgr8

 

2nd terminal (intel realsense 이미지 토픽 이름 변경 재발행)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

ros2 run topic_tools relay /camera/camera/color/image_raw /image

 

3rd terminal (intel realsense camera_info 토픽 이름 변경 재발행)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

ros2 run topic_tools relay /camera/camera/depth/camera_info /camera_info

 

4th terminal (centerpose 분석 활성화)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

ros2 launch isaac_ros_centerpose isaac_ros_centerpose_triton.launch.py model_name:=centerpose_shoe model_repository_paths:=['/tmp/models']

여기서 실행시켰는데 분석이 안이루어지고 어떤 명령에서 멈추는 경우가 굉장히 자주 있었습니다.

반복적으로 ctrl c 누르면서 수행하다보면 작동됩니다.

 

5th terminal (rviz 활성화)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

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

 

UR 컨트롤 패드에서 외부 제어 프로그램을 실행시킵니다.

6th terminal (moveit 활성화)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

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

 

7th terminal (로봇 작동)

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

ros2 launch centerpose_pick_and_place centerpose_pick_and_place_launch.py

실행이 되지 않으면 로봇 외부 프로그램을 재실행하거나 

터미널에서 위 명령어를 반복적으로 종료 후 다시 실행해보시기 바랍니다.

 

최종 작동 영상입니다.

 

 

 

 

728x90
반응형