Doosan M0609 협동로봇 + OnRobot RG2 그리퍼 통합 ROS2 워크스페이스
- Ubuntu 22.04
- ROS2 Humble
- Intel RealSense SDK 2.0
sudo apt update
# 기본 도구 및 라이브러리
sudo apt install libpoco-dev
# ROS2 빌드 및 실행 관련
sudo apt install ros-humble-joint-state-publisher-gui \
ros-humble-xacro \
ros-humble-realsense2-camera \
ros-humble-realsense2-description \
ros-humble-gazebo-ros-pkgs
# 제어 및 하드웨어 인터페이스
sudo apt install ros-humble-hardware-interface \
ros-humble-ros2-control \
ros-humble-ros2-controllers
# OnRobot 그리퍼 드라이버 의존성
pip3 install pymodbus==3.3.2mkdir -p ~/M0609_RG2_Integration/src
cd ~/M0609_RG2_Integration/src
# Doosan 공식 패키지
git clone https://github.com/doosan-robotics/doosan-robot2
# OnRobot RG2 패키지
git clone https://github.com/ABC-iRobotics/onrobot-ros2
# package.xml 의존성 자동 설치 (MoveIt2 등 누락 키 보강)
cd ~/M0609_RG2_Integration/src
rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
onrobot_rg_control의message_runtime키는 ROS1 잔재라 경고가 나오지만-r플래그로 무시되어 빌드엔 영향 없음.
virtual 모드에서 movej 등 motion service를 사용하려면 Doosan DRCF 에뮬레이터(Docker) 설치가 필요.
# Docker engine 미설치 시 먼저 설치: https://docs.docker.com/engine/install/ubuntu/
# 현재 사용자를 docker 그룹에 추가 (launch에서 docker run 호출 시 필수)
sudo usermod -aG docker $USER
newgrp docker
# 에뮬레이터 이미지 pull
cd ~/M0609_RG2_Integration/src/doosan-robot2
chmod +x ./install_emulator.sh
sudo ./install_emulator.shdocker 그룹 가입 후 sudo 없이도 동작하지만 upstream 안내를 따라 sudo 형태로 기재. 그룹 변경 사항 적용을 위해 새 셸 또는 재로그인 필요.
- 로봇 IP:
192.168.1.100 - 그리퍼 IP:
192.168.1.1(OnRobot 컴퓨트박스, 고정) - UDP 포트 권한 설정:
sudo sysctl -w net.ipv4.ip_unprivileged_port_start=0 # 재부팅 후에도 유지: echo 'net.ipv4.ip_unprivileged_port_start=0' | sudo tee /etc/sysctl.d/99-ros2-doosan.conf
udev rules 미설치 시 스트리밍 중 xioctl(VIDIOC_QBUF) failed — No such device 에러 발생.
sudo curl https://raw.githubusercontent.com/IntelRealSense/librealsense/master/config/99-realsense-libusb.rules \
-o /etc/udev/rules.d/99-realsense-libusb.rules
sudo udevadm control --reload-rules && sudo udevadm trigger적용 후 USB 재연결 필요.
cd ~/M0609_RG2_Integration
colcon build --symlink-install
source install/setup.bash환경 설정:
source /opt/ros/humble/setup.bash
source ~/M0609_RG2_Integration/install/setup.bash# 브링업 (그리퍼만)
ros2 launch m0609_rg2_bringup bringup.launch.py
# 브링업 (RealSense 카메라 포함)
ros2 launch m0609_rg2_bringup bringup_camera.launch.py
# 브링업 (그리퍼만)
ros2 launch m0609_rg2_bringup bringup.launch.py mode:=real host:=192.168.1.100
# 브링업 (RealSense 카메라 포함)
ros2 launch m0609_rg2_bringup bringup_camera.launch.py mode:=real host:=192.168.1.100
virtual 모드에서 gripper_virtual_node(bringup에 포함)가 /onrobot/sendCommand 서비스로 RViz 시각화 담당. OnRobot RG2 Modbus 제어 미포함.
| 항목 | real 모드 | virtual 모드 |
|---|---|---|
| 그리퍼 제어 | OnRobot 드라이버 (Modbus TCP) | Modbus 미포함 |
| 완료 신호 | 디지털 입력 핀 감지 | /onrobot/sendCommand 응답 (애니메이션 완료 시) |
| RViz 그리퍼 상태 | /gripper_joint_states (OnRobot 드라이버) |
/gripper_joint_states (gripper_virtual_node) |
| 파지력 / 접촉 | 실제 물리 동작 | 시뮬레이션 없음 |
| Tool/TCP 프리셋 | DRCF 등록값 사용 | 설정 스킵 (에뮬레이터 미등록) |
| 토픽 | 설명 |
|---|---|
/camera/color/image_raw |
RGB 컬러 이미지 |
/camera/aligned_depth_to_color/image_raw |
컬러 정렬 뎁스 이미지 |
/camera/depth/color/points |
RGB 포인트클라우드 |
/camera/color/camera_info |
컬러 카메라 내부 파라미터 |
default.rviz 사전 구성 display:
- Color Image —
/camera/color/image_raw - Depth Image —
/camera/aligned_depth_to_color/image_raw - PointCloud2 —
/camera/depth/color/points
world
└── base_link
└── link1 → link2 → link3 → link4 → link5 → link6
└── tool0
└── rg2_base_link
├── rg2_left_outer_knuckle
│ ├── rg2_left_inner_knuckle
│ └── rg2_left_inner_finger
└── rg2_right_outer_knuckle
├── rg2_right_inner_knuckle
└── rg2_right_inner_finger
world
└── base_link
└── link1 → ... → tool0
├── rg2_base_link (그리퍼, 위와 동일)
└── bracket_link (마운트 브라켓)
└── camera_link
├── camera_color_frame / camera_color_optical_frame
├── camera_depth_frame / camera_depth_optical_frame
├── camera_infra1_frame / camera_infra1_optical_frame
└── camera_infra2_frame / camera_infra2_optical_frame
world → base_link:static_transform_publisher(identity)tool0 → rg2_base_link:joint0(fixed)tool0 → bracket_link:tool0_to_bracket(fixed)rg2_left/right_inner_knuckle: mimic joint,rg2_finger_joint기준 연동
M0609_RG2_Integration/
└── src/
├── m0609_rg2_bringup/ # 커스텀 브링업 패키지
│ ├── launch/
│ │ ├── bringup.launch.py # 로봇 + 그리퍼
│ │ └── bringup_camera.launch.py # 로봇 + 그리퍼 + RealSense
│ ├── meshes/
│ │ └── mount_bracket.stl
│ ├── rviz/
│ │ ├── default.rviz
│ │ └── moveit.rviz
│ ├── scripts/
│ │ └── gripper_joint_state_publisher.py # onrobot_joint_states → gripper_joint_states
│ └── urdf/
│ ├── m0609_with_rg2.urdf.xacro # 팔 + 그리퍼 통합 URDF
│ ├── m0609_with_rg2_camera.urdf.xacro # 팔 + 그리퍼 + 카메라 통합 URDF
│ ├── onrobot_rg2.xacro # RG2 베이스 링크 정의
│ ├── onrobot_rg2_model_macro.xacro # RG2 링크/조인트 매크로
│ └── realsense_bracket.urdf.xacro # 브라켓 + D435 마운트 (tool0 기준)
├── m0609_rg2_moveit/ # MoveIt2 패키지 (deprecated — 현재 미사용)
├── doosan-robot2/ # 외부 패키지 — read-only
└── onrobot-ros2/ # 외부 패키지 — read-only