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

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

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

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

코방코 2024. 2. 27. 14:03
728x90

 

 

지난 글에서 docker 컨테이너 내에서 Intel Real sense를 이용하여

Object Pose Estimation을 수행하는 과정을 작성했습니다.

 

RealSense 기반 ROS2 에서 Real Time CenterPose 실행

지난 글에서 Isaac ROS CenterPose 를 이용하여 ROS2 docker 환경에서 Object Pose Estimation 이 가능하도록 빌드하였습니다. ROS2 기반 Isaac ROS CenterPose Example 수행하기 Categorized Object Pose Estimation 이 가능한 CenterP

cobang.tistory.com

 

특히 신발에 대하여 Categorized 된 CenterPose를 이용했습니다.

제가 최종적으로 Object Pose Estimation 을 하는 이유는,

로봇이 신발을 집어 정리할 수 있도록 하기 위해서입니다.

 

그럼 이번 글에서는 Docker 컨테이너에서 ROS2 환경에서 UR 로봇이 작동이 가능하도록 연결시키겠습니다.

 

docker는 호스트 장치가 mount 되도록 다음과 같은 명령으로 생성되었어야 합니다.

docker run --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/hslim/temp:/workspace -it --privileged --net=host isaac_ros_dev-x86_64:latest

 

또한, ttyUSB0가 감지되었을 때 docker 컨테이너가 시작이 되어야 합니다.

그렇지 않으면 docker 컨테이너 내에서 gripper 를 작동시킬 때 ttyUSB0가 없다는 에러가 발생합니다.

 

docker 외부에서 x 서버를 활성화해줍니다.

xhost +local:root

 

docker 에 접속하고 rviz를 활성화하는 다음 명령을 실행합니다.

docker start <container-id>

docker exec -it <container-id> bash

sudo apt-get install ros-humble-ur

sudo apt install python3-colcon-common-extensions python3-vcstool

cd /workspace/isaac_ros-dev

git clone -b humble https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver.git src/Universal_Robots_ROS2_Driver

vcs import src --skip-existing --input src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver-not-released.${ROS_DISTRO}.repos

rosdep update

rosdep install --ignore-src --from-paths src -y

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

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

 

ROS2 UR 설정과 관련해서 아직 준비가 되어있지 않다면 아래 글을 참조하시기 바랍니다.

 

ROS2 humble에서 UR3e 작동 및 MoveIt2 Path Planning

연구원에서 정말 좋은 경험을 많이 하는 것 같습니다. 언제 이렇게 3000만원짜리 로봇 팔을 제 맘대로 가지고 놀아볼 수 있을까요. 그것도 운이 좋게 소프트웨어를 거의 처음부터 세팅을 할 수 있

cobang.tistory.com

 

docker 컨테이너 내에서 git clone이 안되면 아래 링크 과정 따라서 수행 후 clone 해줍니다.

 

[Error] fatal unable to access '*' :could not resolve host github.com

fatal unable to access '*' :could not resolve host github.com 외부 통신 오류 이런 오류가 발생을 하였습니다. 그래서 구글링을 했더니 proxy 문제가 있다고 하면서 $ git config --global --unset http.proxy $ git config --glob

gwpaeng.tistory.com

 

ur 컨트롤 패드에서 외부 제어 프로그램을 실행시키고

아래 명령어를 새 터미널에서 수행합니다.

docker exec -it bc84c43fee93 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

 

여기까지 수행하면, ROS2 UR에 대해 moveit이 실행 가능해집니다.

 

이제 Gripper와 Realsense mesh를 urdf에 부착하겠습니다.

자세한 과정은 아래 글을 참조하시기 바랍니다.

 

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

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

cobang.tistory.com

 

 

먼저 urdf 파일 수정해주어야 합니다.

realsense 결합 방식에 따라 좌표값이 달라질 수 있으며,

gripper 부분의 경우 본인의 로봇에 맞게 적절히 수정하시기 바랍니다.

<!-- RealSense Camera Link -->
    <link name="camera_link">
      <visual>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="file:///workspace/isaac_ros-dev/src/realsense-ros/realsense2_description/meshes/d435_rotate.dae"/>
          <!--<box size="0.025 0.09 0.025"/>-->
        </geometry>
        <!--<material name="black"/>-->
      </visual>
      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="file:///workspace/isaac_ros-dev/src/realsense-ros/realsense2_description/meshes/d435_rotate.dae"/>
          <!--<box size="0.025 0.09 0.025"/>-->
        </geometry>
        <!--<material name="black"/>-->
      </collision>
    </link>

   <!-- Joint connecting wrist_3_link and camera_link  -->
   <joint name="camera_joint" type="fixed">
     <parent link="wrist_3_link"/>
     <child link="camera_link"/>
     <origin xyz="-0.0389 -0.0389 0.037" rpy="0 4.71 0.785"/>
   </joint>

   <!-- Gripper Link -->
   <link name="gripper_link">
     <visual>
       <origin xyz="0 0 0" rpy="0 0 0"/>
         <geometry>
           <box size="0.185 0.095 0.060"/>
         </geometry>
         <material name="black"/>
     </visual>
     <collision>
       <origin xyz="0 0 0" rpy="0 0 0"/>
       <geometry>
         <box size="0.185 0.095 0.060"/>
       </geometry>
       <material name="black"/>
     </collision>
   </link>

   <!-- Joint connecting wrist_3_link and gripper_link  -->
   <joint name="gripper_joint" type="fixed">
     <parent link="wrist_3_link"/>
     <child link="gripper_link"/>
     <origin xyz="0 0 0.093" rpy="0 4.71 0.785"/>
   </joint>

 

저는 blender에서 d435의 mesh 파일을 수정해주어야했습니다.

docker 컨테이너에서도 blender를 설치하여 이 과정을 수행했습니다.

그럼 이제 moveit 에서 path planning을 수행해보시기 바랍니다.

 

저는 Intel realsense 기반의 centerpose까지 활성화시켜 다음과 같은 작동화면을 얻었습니다.

 

위 결과를 얻기 위해서 전체 터미널에 대하여 명령을 순차적으로 첨부하겠습니다.

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

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

 

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

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

 

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

 

이제 rviz에서 /centerpose/image_visualized topic 을 가져와 결과를 확인하고,

 

7th terminal에서 detect 결과를 확인하겠습니다.

docker exec -it <container-id> bash

cd /workspace/isaac_ros-dev

ros2 topic echo /centerpose/detections

 

결과값이 10배 정도 크게 나오는 문제가 발생했습니다.

다음 번 글에서 최종적으로 이를 수정하여

신발을 정리하는 MoveGroupInterface 코드를 작성한 패키지를 구현하도록 하겠습니다.

 

 

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

이번 글은 Docker 컨테이너 내부에서 ROS2 UR3e를 이용하여 Intel RealSense 기반으로 Categorized Object Pose Estimation 알고리즘인 Centerpose를 수행하여 신발을 정리한 과정에 대해 작성하도록 하겠습니다. 연구

cobang.tistory.com

 

 

 

 

728x90
반응형