Setup & Example/ROS2 + 예제

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

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

 

 

지난 글에서 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