지난 글에서 docker 컨테이너 내에서 Intel Real sense를 이용하여
Object Pose Estimation을 수행하는 과정을 작성했습니다.
특히 신발에 대하여 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 설정과 관련해서 아직 준비가 되어있지 않다면 아래 글을 참조하시기 바랍니다.
docker 컨테이너 내에서 git clone이 안되면 아래 링크 과정 따라서 수행 후 clone 해줍니다.
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에 부착하겠습니다.
자세한 과정은 아래 글을 참조하시기 바랍니다.
먼저 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 코드를 작성한 패키지를 구현하도록 하겠습니다.
'Setup & Example > ROS2 + 예제' 카테고리의 다른 글
RealSense 기반 ROS2 에서 Real Time CenterPose 실행 (0) | 2024.02.20 |
---|---|
ROS2 기반 Isaac ROS CenterPose Example 수행하기 (0) | 2024.02.20 |
ROS2 에서 Vision 기반 UR3e Pick and Place 수행하기 (0) | 2024.02.16 |
ROS2 에서 Intel realsense 기반 YOLOv8 분석하고 결과 topic publishing 하기 (0) | 2024.02.06 |
ROS2 MoveIt2 이용하여 UR3e 의 Link Position 및 Quaternion 획득하기 (0) | 2024.01.31 |