이번 글은 Docker 컨테이너 내부에서 ROS2 UR3e를 이용하여
Intel RealSense 기반으로 Categorized Object Pose Estimation 알고리즘인 Centerpose를 수행하여
신발을 정리한 과정에 대해 작성하도록 하겠습니다.
연구원에서의 마지막 정리 글은 소감도 함께 담고 싶습니다.
두 달 동안 많다면 많고, 적다면 적은 여러 task 들을 수행해보았습니다.
초기에 목표로 했던 신발 정리를 하는 로봇 팔에 결론적으로는 도달했지만
한편으로는 아쉬운 마음이 들기는 합니다.
뭔가를 시작할 때 항상 마스터피스를 내놓고 싶은데,
어느 순간부터 현실과 타협하는 저를 보며 아쉬운 마음이 많이 들긴했습니다.
물론 두 달이라는 시간이 부족한 감도 없지 않았습니다.
누군가가 제가 써온 글을 보시면 잘했다고 생각하실지
부족한 점이 많다고 생각하실지 잘 모르겠습니다.
냉정하게 잘한 점보다 부족한 점이 더 많다는 것을 저도 인정하겠습니다.
camera coordinate 와 world coordinate 를 제대로 맞추지 못한 점과,
로봇 제어 실력의 부족
ROS2 분야의 무지에 대한 아쉬움이 많이 남는 것 같습니다.
그래도 정말 운이 좋았고, 부족한 저에게 뜻깊고 좋은 기회였습니다.
부족함에 대해 핑계 대지 않고 더 많이 배우고 성장하겠습니다.
그럼에도 이 글의 간단한 작동 영상에 도달하기 까지 두 달 동안의 많은 희노애락이 담겨있습니다.
이 50초 남짓의 영상을 만들기 위해 부족한 실력으로 많은 애를 썼던 것 같습니다.
부족한 저에게도 많은 조언과 지원해주신 인공지능연구단장님께.
그리고 연구원 분들께 감사드립니다.
이전 글까지의 과정이 전부 수행되어있다는 가정하에 진행하겠습니다.
먼저 제가 작성한 centerpose pick and place github repository 를
docker 환경 내에서 clone 합니다.
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을 살짝 했습니다.
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
실행이 되지 않으면 로봇 외부 프로그램을 재실행하거나
터미널에서 위 명령어를 반복적으로 종료 후 다시 실행해보시기 바랍니다.
최종 작동 영상입니다.
'Project' 카테고리의 다른 글
Jetson Nano 에서 yolov7-tiny 를 이용한 물체 추적 카메라 거치대 개발 (1) | 2023.12.23 |
---|---|
[Project] Control of CCTV using Browser (0) | 2022.08.31 |