Skip to content

mvng6/gap_detect_v2_project

Repository files navigation

KATECH Robot Workspace

모바일 로봇 및 협동 로봇 통합 제어 시스템

ROS Version Python Version License


📑 목차

📋 개요

🚀 빠른 시작 (Quick Start)

📦 상세 문서

🔧 개발 및 운영

📖 기타


검토 사항

  • AMCL 알고리즘 검토
    • map상에서 로봇의 초기 위치를 Localization하는데 너무 오랜 시간이 걸림
    • 또한, 로봇을 실제로 많이 움직이고 회전해야 겨우 위치를 맞춤
      • 로봇 위치를 실제 위치와 맞추지 못하는 경우가 크게 발생
    • 초기 Rviz에서 맵을 불러올 때 Odom 좌표계는 0,0에 위치함
    • 하지만, map의 경우 한쪽으로 치우쳐져 있음(갭단차 테스트베드 쪽이 0,0에 위치하는 상황)
    • 해결 방안?
      1. 불러오는 맵의 위치 변경
      2. AMCL알고리즘 이외의 다른 알고리즘을 활용하여 초기 로봇 위치를 빠르게 탐색

📋 프로젝트 개요

본 워크스페이스는 Woosh TR200 모바일 로봇과 **두산 협동 로봇(Doosan A0912)**을 활용한 두 가지 프로젝트를 포함합니다.

프로젝트 설명 드라이버 Launch 파일 클라이언트 스크립트 빠른 실행
🔬 갭단차 측정 모바일+협동로봇 협업 woosh_service_driver.py woosh_service_driver.launch ldj_testbed_operation_client_all_*.py ▶️ 바로가기
🗺️ SLAM/Navigation 맵 생성 및 자율주행 woosh_topic_bridge.py woosh_topic_driver.launch test_move_goback_topic.py ▶️ 바로가기
🧪 모바일 로봇 테스트 모바일 로봇 토픽 제어 woosh_topic_bridge.py woosh_topic_driver.launch test_move_goback_topic.launch ▶️ 바로가기

🚀 빠른 시작 (Quick Start)

📐 프로젝트 1: 갭단차 측정 빠른 실행

# ============================================
# 터미널 1: roscore 실행
# ============================================
docker start my_noetic_ws
docker exec -it my_noetic_ws bash
source devel/setup.bash
roscore

# ============================================
# 터미널 2: 두산 로봇 연결
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
roslaunch dsr_launcher single_robot.launch mode:=real host:=192.168.137.100 port:=12345 model:=a0912

# ============================================
# 터미널 3: Woosh TR-200 연결 (서비스 방식)
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
roslaunch woosh_bringup woosh_service_driver.launch robot_ip:=169.254.128.2

# ============================================
# 터미널 4: 갭단차 측정 시퀀스 실행
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
# 연속 구동 방식
rosrun woosh_control ldj_testbed_operation_client_all_continuous.py
# 단계적 구동 방식 (Enter 입력)
rosrun woosh_control ldj_testbed_operation_client_all_sequence.py

조작 방법: [Enter] 키를 누를 때마다 다음 동작 실행

Enter → 모바일 전진 → Enter → 두산 작업자세 → Enter → 두산 홈 → Enter → 모바일 후진 → (반복)

🗺️ 프로젝트 2: SLAM/Navigation 빠른 실행

# ============================================
# 터미널 1: roscore 실행
# ============================================
docker start my_noetic_ws
docker exec -it my_noetic_ws bash
source devel/setup.bash
roscore

# ============================================
# 터미널 2: SLAM 시스템 실행 (토픽 방식 드라이버 포함)
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
roslaunch woosh_slam slam_gmapping.launch robot_ip:=169.254.128.2

# ============================================
# 터미널 3: 키보드 조작
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=cmd_vel_raw

# ============================================
# 터미널 4: 맵 저장 (맵핑 완료 후)
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
rosrun woosh_slam save_map.py my_map_name

키보드 조작: i(전진), ,(후진), j(좌회전), l(우회전), k(정지)


🧪 프로젝트 3: 모바일 로봇 테스트 빠른 실행

모바일 로봇만 토픽 형태로 제어하여 전후진 및 회전 테스트를 수행합니다.

# ============================================
# 터미널 1: roscore 실행
# ============================================
docker start my_noetic_ws
docker exec -it my_noetic_ws bash
source devel/setup.bash
roscore

# ============================================
# 터미널 2: 모바일 로봇 토픽 드라이버 실행
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
roslaunch woosh_bringup woosh_topic_driver.launch robot_ip:=169.254.128.2

# ============================================
# 터미널 3: 모바일 로봇 제어 스크립트 실행 (부드러운 속도 프로파일 포함)
# ============================================
docker exec -it my_noetic_ws bash
source devel/setup.bash
roslaunch woosh_control test_move_goback_topic.launch

조작 방법:

  • g 입력: 전진 (기본 0.2m)
  • b 입력: 후진 (기본 0.2m)
  • r+ 입력: 시계방향 5도 회전
  • r- 입력: 반시계방향 5도 회전
  • q 입력: 프로그램 종료

토픽 흐름:

test_move_goback_topic → /cmd_vel_raw → smooth_cmd_vel → /cmd_vel → woosh_topic_bridge → 로봇

🏗️ 시스템 구조

📐 프로젝트 1: 갭단차 측정 시스템

모바일 로봇과 협동 로봇이 순차적으로 동작하여 차체 갭단차를 측정하는 시스템입니다.

┌─────────────────────────────────────────────────────────────────┐
│                    갭단차 측정 시스템 구조                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   [사용자 Enter 입력]                                            │
│         │                                                       │
│         ▼                                                       │
│   ┌─────────────────────────────────────────┐                   │
│   │  ldj_testbed_operation_client_all_      │                   │
│   │  sequence.py (시퀀스 제어 클라이언트)      │                   │
│   └─────────────────────────────────────────┘                   │
│         │                            │                          │
│         ▼ (Service Call)             ▼ (Service Call)           │
│   /mobile_positiontwist        /dsr01a0912/movej                │
│         │                            │                          │
│   ┌─────────────────┐      ┌─────────────────────┐              │
│   │ woosh_service_  │      │ Doosan Robot Driver │              │
│   │ driver.py       │      │ (dsr_launcher)      │              │
│   │                 │      │                     │              │
│   │ IP: 169.254.    │      │ IP: 192.168.137.100 │              │
│   │     128.2       │      │ Port: 12345         │              │
│   └─────────────────┘      └─────────────────────┘              │
│         │                            │                          │
│         ▼                            ▼                          │
│   ┌─────────────────┐      ┌─────────────────────┐              │
│   │ 🤖 Woosh TR200  │      │ 🦾 Doosan A0912    │              │
│   │ (모바일 로봇)     │      │ (협동 로봇)          │              │
│   └─────────────────┘      └─────────────────────┘              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

[시퀀스 흐름]
  Enter → 모바일 전진 → Enter → 두산 작업자세 → Enter → 두산 홈 → 
  Enter → 모바일 후진 → (반복)

🗺️ 프로젝트 2: SLAM/Navigation 시스템

연구원 로비 환경에서 맵 생성자율 주행을 위한 시스템입니다.

┌─────────────────────────────────────────────────────────────────┐
│                  SLAM/Navigation 시스템 구조                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              ROS Navigation Stack                       │   │
│   │  ┌──────────┐  ┌──────────┐  ┌──────────────────────┐   │   │
│   │  │ AMCL     │  │ move_base│  │ global/local_planner │   │   │
│   │  │ (위치추정)│  │ (경로계획)│  │ (경로 생성)            │   │   │
│   │  └──────────┘  └──────────┘  └──────────────────────┘   │   │
│   └─────────────────────────────────────────────────────────┘   │
│         ▲                ▲                    │                 │
│         │                │                    ▼                 │
│      /map            /odom              /cmd_vel                │
│         │                │                    │                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              woosh_topic_bridge.py                      │   │
│   │              (모듈화 버전)                               │   │
│   │                                                         │   │
│   │  발행: /odom, /scan, /imu/data   │   구독: /cmd_vel     │   │
│   │  TF: odom → base_link → base_scan, imu_link            │   │
│   └─────────────────────────────────────────────────────────┘   │
│                            │                                    │
│                            ▼                                    │
│                  ┌─────────────────┐                            │
│                  │ 🤖 Woosh TR200  │                            │
│                  │ IP: 169.254.    │                            │
│                  │     128.2       │                            │
│                  └─────────────────┘                            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

[워크플로우]
  1. SLAM으로 맵 생성 (GMapping/SLAM Toolbox)
  2. 맵 저장 (save_map.py)
  3. Navigation으로 목표점 자동 주행

🧪 프로젝트 3: 모바일 로봇 테스트 시스템

모바일 로봇만 토픽 형태로 제어하여 전후진 및 회전 테스트를 수행하는 시스템입니다.

┌─────────────────────────────────────────────────────────────────┐
│                  모바일 로봇 테스트 시스템 구조                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   [사용자 입력: g/b/r+/r-/q]                                    │
│         │                                                       │
│         ▼                                                       │
│   ┌─────────────────────────────────────────┐                   │
│   │  test_move_goback_topic.py              │                   │
│   │  (토픽 제어 클라이언트)                     │                   │
│   └─────────────────────────────────────────┘                   │
│         │                                                       │
│         ▼ (/cmd_vel_raw 발행)                                   │
│   ┌─────────────────────────────────────────┐                   │
│   │  smooth_cmd_vel 노드                     │                   │
│   │  (부드러운 속도 프로파일 적용)              │                   │
│   └─────────────────────────────────────────┘                   │
│         │                                                       │
│         ▼ (/cmd_vel 발행)                                       │
│   ┌─────────────────────────────────────────┐                   │
│   │  woosh_topic_bridge.py                  │                   │
│   │  (토픽 브릿지, 모듈화 버전)                │                   │
│   │                                          │                   │
│   │  발행: /odom, /scan, /imu/data           │                   │
│   │  구독: /cmd_vel                          │                   │
│   │  TF: odom → base_link → base_scan       │                   │
│   └─────────────────────────────────────────┘                   │
│         │                                                       │
│         ▼                                                       │
│   ┌─────────────────┐                                          │
│   │ 🤖 Woosh TR200  │                                          │
│   │ IP: 169.254.    │                                          │
│   │     128.2       │                                          │
│   └─────────────────┘                                          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

[토픽 흐름]
  사용자 입력 → test_move_goback_topic → /cmd_vel_raw → 
  smooth_cmd_vel → /cmd_vel → woosh_topic_bridge → 로봇

[제어 명령]
  g: 전진, b: 후진, r+: 시계방향 회전, r-: 반시계방향 회전, q: 종료

📡 통신 방식 비교

구분 서비스 방식 (갭단차) 토픽 방식 (SLAM/Nav/테스트)
통신 요청-응답 (블로킹) 연속 발행 (비동기)
용도 단일 명령 실행, 두산+모바일 협업 실시간 제어/센서, 모바일만 제어
장점 명령 완료 확인 용이 고속, 연속 데이터 처리
노드 woosh_service_driver.py woosh_topic_bridge.py
Launch woosh_service_driver.launch woosh_topic_driver.launch
클라이언트 ldj_testbed_operation_client_all_*.py test_move_goback_topic.py

📋 환경 요구사항

  • Host OS: Ubuntu 24.04 LTS
  • ROS 환경: Docker + ROS Noetic
  • 로봇 하드웨어:
로봇 IP 주소 포트
Doosan A0912 192.168.137.100 12345
Woosh TR200 169.254.128.2 5480

📦 패키지 구조

robot_ws/
├── src/
│   │
│   │  ┌──────────────────────────────────────────────────────┐
│   │  │           🤖 Woosh TR200 Mobile Robot                │
│   │  └──────────────────────────────────────────────────────┘
│   │
│   ├── woosh_bringup/          # 🔌 로봇 드라이버 (통합)
│   │   ├── scripts/
│   │   │   ├── woosh_topic_bridge.py  # 토픽 방식 (SLAM/Nav/테스트, 모듈화 버전)
│   │   │   ├── woosh_topic_driver.py  # 토픽 방식 (레거시)
│   │   │   ├── woosh_service_driver.py # 서비스 방식 (갭단차 측정)
│   │   │   └── robot_imu_bridge.py    # IMU 브릿지 프로세스
│   │   ├── src/woosh_bringup/bridge_components/  # 모듈화된 브릿지 컴포넌트
│   │   │   ├── constants.py           # 상수 정의
│   │   │   ├── odometry_bridge.py    # Odometry 처리
│   │   │   ├── laserscan_bridge.py   # LaserScan 처리
│   │   │   ├── imu_bridge.py        # IMU 처리
│   │   │   └── cmd_vel_handler.py   # cmd_vel 처리
│   │   ├── srv/
│   │   │   ├── MobilePosition.srv
│   │   │   └── MobilePositionTwist.srv
│   │   └── launch/
│   │       ├── woosh_topic_driver.launch   # 토픽 드라이버 실행 (SLAM/Nav/테스트)
│   │       └── woosh_service_driver.launch # 서비스 드라이버 실행 (갭단차 측정)
│   │
│   ├── woosh_slam/             # 🗺️ SLAM 관련
│   │   ├── scripts/
│   │   │   └── save_map.py            # 자동 크롭 맵 저장
│   │   ├── launch/
│   │   │   ├── slam_gmapping.launch   # GMapping SLAM
│   │   │   └── slam_toolbox.launch    # slam_toolbox SLAM
│   │   ├── config/
│   │   │   └── slam_toolbox_params.yaml
│   │   ├── rviz/
│   │   │   └── slam.rviz
│   │   └── maps/                      # 저장된 맵 파일
│   │
│   ├── woosh_control/            # 🎮 속도 제어/갭단차 측정/모바일 테스트
│   │   ├── scripts/
│   │   │   ├── smooth_cmd_vel.py      # S-curve 속도 프로파일
│   │   │   ├── ldj_testbed_operation_client_all_continuous.py  # 갭단차 연속 구동
│   │   │   ├── ldj_testbed_operation_client_all_sequence.py    # 갭단차 단계별 구동
│   │   │   └── test_move_goback_topic.py  # 모바일 로봇 토픽 제어 테스트
│   │   ├── srv/
│   │   │   ├── MoveJoint.srv          # 두산 로봇 관절 이동
│   │   │   └── MobilePositionTwist.srv # 모바일 로봇 이동
│   │   └── launch/
│   │       ├── smooth_cmd_vel.launch  # 부드러운 속도 프로파일
│   │       ├── test_move_goback_topic.launch  # 모바일 로봇 테스트 (smooth_cmd_vel 포함)
│   │       └── teleop.launch          # 키보드 조작
│   │
│   ├── woosh_utils/            # 🔧 유틸리티 패키지
│   │   ├── scripts/
│   │   │   └── battery_check.py       # 배터리 상태 확인 스크립트
│   │   └── src/woosh_utils/
│   │       └── __init__.py            # Colors, print_battery_status 포함
│   │
│   ├── woosh_robot_py/         # 📡 Woosh Robot Python SDK
│   │   └── ...
│   │
│   │  ┌──────────────────────────────────────────────────────┐
│   │  │           🦾 Doosan Cobot (A0912)                    │
│   │  └──────────────────────────────────────────────────────┘
│   │
│   ├── doosan-robot/           # 🦾 두산 로봇 공식 드라이버
│   │   ├── dsr_launcher/             # 로봇 실행 런치 파일
│   │   ├── dsr_control/              # 로봇 제어 노드
│   │   ├── dsr_msgs/                 # 메시지/서비스 정의
│   │   └── moveit_config_a0912/      # MoveIt 설정
│   │
│   └── serial/                 # 📡 시리얼 통신 라이브러리
│       └── ...
│
└── docs/                       # 📖 문서
    ├── SLAM_docs/
    │   ├── WOOSH_SLAM_IMPLEMENTATION_GUIDE.md
    │   └── TROUBLESHOOTING_GUIDE.md
    └── Manual SDK/             # Woosh 로봇 매뉴얼

🤖 Woosh TR200 드라이버 방식

Woosh 로봇은 두 가지 드라이버 방식을 지원합니다:

📊 드라이버 비교

구분 토픽 방식 서비스 방식
노드 woosh_topic_bridge.py (모듈화 버전) woosh_service_driver.py
Launch woosh_topic_driver.launch woosh_service_driver.launch
통신 ROS 토픽 (연속 발행) ROS 서비스 (요청-응답)
발행 토픽 /odom, /scan, /imu/data, TF 없음
구독 토픽 /cmd_vel 없음
명령 방식 /cmd_vel 구독 서비스 호출 (/mobile_positiontwist)
용도 SLAM, Navigation, 텔레옵, 모바일 테스트 두산+모바일 협업, 갭단차 측정
클라이언트 test_move_goback_topic.py ldj_testbed_operation_client_all_*.py

🔄 토픽 방식 (SLAM/Navigation/테스트용)

# 로봇 연결 (토픽 드라이버)
roslaunch woosh_bringup woosh_topic_driver.launch robot_ip:=169.254.128.2

# 발행 토픽: /odom, /scan, /imu/data
# 구독 토픽: /cmd_vel
# TF: odom → base_link → base_scan, imu_link

# 모바일 로봇 테스트 (부드러운 속도 프로파일 포함)
roslaunch woosh_control test_move_goback_topic.launch

사용 시나리오:

  • SLAM: woosh_slam 패키지와 함께 사용
  • Navigation: ROS Navigation Stack과 함께 사용
  • 모바일 테스트: test_move_goback_topic.launch와 함께 사용

📡 서비스 방식 (갭단차 측정용)

# 로봇 연결 (서비스 드라이버)
roslaunch woosh_bringup woosh_service_driver.launch robot_ip:=169.254.128.2

# 갭단차 측정 시퀀스 실행
# 연속 구동 방식
rosrun woosh_control ldj_testbed_operation_client_all_continuous.py
# 단계별 구동 방식 (Enter 입력)
rosrun woosh_control ldj_testbed_operation_client_all_sequence.py

# 서비스 호출 예시 (수동)
rosservice call /mobile_positiontwist "distance: 0.3
speed: 0.2
linear_or_angular: 0"

사용 시나리오:

  • 두산 로봇과 모바일 로봇 협업 (갭단차 측정)
  • 순차적 제어가 필요한 작업

🗺️ Woosh TR200 SLAM

SLAM 실행

# GMapping SLAM
roslaunch woosh_slam slam_gmapping.launch robot_ip:=169.254.128.2

# slam_toolbox SLAM (권장)
roslaunch woosh_slam slam_toolbox.launch robot_ip:=169.254.128.2

키보드 조작 (별도 터미널)

rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=cmd_vel_raw
동작
i 전진
, 후진
j 좌회전
l 우회전
k 정지

맵 저장

# 자동 크롭 맵 저장
rosrun woosh_slam save_map.py my_map_name

# 원본도 함께 저장
rosrun woosh_slam save_map.py my_map_name --keep-original

📖 문서

사용자 가이드

패키지별 문서


🔧 주요 ROS 토픽

토픽 이름 메시지 타입 설명
/mobile/cmd std_msgs/Float64MultiArray 모바일 로봇 이동 명령 [distance, speed]
/mobile/status std_msgs/String 모바일 로봇 상태 (IDLE, MOVING, COMPLETED, ERROR)
/katech/robot_command std_msgs/Int32 두산 로봇 자세 명령 (0, 1, 99)
/doosan/status std_msgs/String 두산 로봇 상태 (IDLE, MOVING, COMPLETED, ERROR)
/dsr01a0912/state dsr_msgs/RobotState 두산 로봇 시스템 상태 (드라이버 발행)

🔋 유틸리티

배터리 잔량 확인

# 모바일 로봇 배터리 확인
rosrun woosh_utils battery_check.py

출력: 배터리 잔량을 색상 막대 그래프로 표시 (80%↑: 초록, 20~49%: 노란색, 20%↓: 빨강)


🛠️ 개발 환경

빌드

cd ~/catkin_ws
catkin_make
source devel/setup.bash

디버깅

# 상태 모니터링
rostopic echo /mobile/status
rostopic echo /doosan/status

# 수동 명령 테스트
rostopic pub /mobile/cmd std_msgs/Float64MultiArray "data: [0.3, 0.2]"
rostopic pub /katech/robot_command std_msgs/Int32 "data: 99"

# 노드 그래프 확인
rqt_graph

🐛 문제 해결

두산 로봇이 SAFE_OFF 상태에서 멈춤

⚠️ 티치 펜던트에서 '서보 온(Servo On)' 버튼을 눌러주세요

모바일 로봇 연결 실패

# IP 확인
ping 169.254.128.2

# 로그 확인
rosnode info /mobile_robot_ros_node

폴더/파일 생성 시 권한 문제

Docker 컨테이너에서 파일/폴더를 생성할 때 권한 오류가 발생하는 경우:

# 문제 증상
mkdir: cannot create directory 'new_folder': Permission denied
touch: cannot touch 'new_file.txt': Permission denied

해결 방법: 호스트에서 소유권 변경

# 호스트 PC에서 실행 (워크스페이스가 마운트된 경우)
sudo chown -R $USER:$USER ~/robot_ws
sudo chmod -R 755 ~/robot_ws

📝 라이선스 및 저작권

Copyright © 2025 KATECH (Korea Automotive Technology Institute)
Smart Manufacturing Technology Research Center

Author: LDJ (Dongjun Lee)
Email: djlee2@katech.re.kr

본 소프트웨어는 한국자동차연구원 스마트제조기술연구센터에서 개발되었습니다.
상업적 사용 및 재배포 시 사전 승인이 필요합니다.


🤝 기여

본 프로젝트는 KATECH 내부 프로젝트입니다.
문의 사항은 djlee2@katech.re.kr로 연락주시기 바랍니다.


📈 버전 히스토리

v1.2.0 (2026-01-02)

  • 코드 모듈화 및 리팩토링
    • woosh_topic_bridge.py: 모듈화된 토픽 브릿지 (이전 woosh_topic_driver_ldj.py)
    • bridge_components: 기능별 모듈 분리 (Odometry, LaserScan, IMU, CmdVel)
    • IMU 지원: /imu/data 토픽 발행 및 TF 브로드캐스팅
  • 모바일 로봇 테스트 도구 추가
    • test_move_goback_topic.py: 토픽 방식 모바일 로봇 제어
    • test_move_goback_topic.launch: 부드러운 속도 프로파일 포함 통합 실행
  • ✅ Launch 파일 정리 및 명확화
    • woosh_service_driver.launch: 갭단차 측정용
    • woosh_topic_driver.launch: SLAM/Navigation/테스트용

v1.1.0 (2025-12-11)

  • Woosh TR200 SLAM 기능 추가
    • woosh_bringup: 로봇 드라이버/ROS 브릿지
    • woosh_slam: GMapping/slam_toolbox SLAM 지원
    • woosh_control: S-curve 속도 프로파일, 텔레옵
  • ✅ 자동 크롭 맵 저장 도구 (save_map.py)
  • ✅ Docker X11 GUI 지원 (RViz)
  • ✅ SLAM 트러블슈팅 가이드 추가

v1.0.0 (2025-11-03)

  • ✅ 중앙 관제 시스템 구축 완료
  • ✅ 모바일-협동로봇 왕복 시퀀스 구현
  • ✅ 자동 초기화 및 상태 감지 기능
  • ✅ ROS Topic 기반 통신 구조 확립

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published