m0609를 사용해 Pick2Pack Custom PhoneCase Packagine 프로젝트
-
User UI (Flask)
- 사용자 선택(핸드폰 기종, 액세서리) 후 ROS 토픽 발행:
/signal_case,/signal_acc - 공정률 토픽
/signal_stage구독 → 진행률 UI 표시 - 주문을 Firebase RTDB에 저장(POST)
- 사용자 선택(핸드폰 기종, 액세서리) 후 ROS 토픽 발행:
-
Admin UI (Flask)
- 주문 목록/통계 조회(Firebase)
- 로봇 제어 토픽 발행:
/signal_stop,/signal_start,/signal_unlock
-
Control PC (ROS2 + Doosan M0609 제어 노드)
- Stage 1~5 공정 수행
/signal_case,/signal_acc수신 후 주문 Queue에 적재 → 반복 실행 가능- 일시정지/재개/안전복구 처리(
/signal_stop,/signal_start,/signal_unlock) - 공정 단계마다
/signal_stage발행(진행률 UI 연동)
-
DB (Firebase RTDB)
/orders에 주문 저장- Admin UI에서 조회/통계
- UI → 로봇
/signal_case(std_msgs/Int32): 케이스/폰 기종 값/signal_acc(std_msgs/Int32): 액세서리 값(여러 번 발행 가능)
- 관리자 → 로봇
/signal_stop(std_msgs/Int32): 일시정지/비상정지/signal_start(std_msgs/Int32): 재개/signal_unlock(std_msgs/Int32): 안전정지 해제(Reset Safe Stop)
- 로봇 → UI
/signal_stage(std_msgs/Int32): 공정 단계 진행률(예: 2→3→4→5→6)
- OS: Ubuntu 22.04 LTS
- ROS2: Humble
- Python: Python3
- UI: Flask
- DB: Firebase Realtime Database (RTDB)
- Doosan Robotics M0609
- (그리퍼) 프로젝트 사용 그리퍼/툴(TCP) 구성
- PC 2~3대(역할 분리 권장)
- Control PC: 로봇 제어(ROS2)
- UI PC: User UI 실행(Flask + ROS2)
- Admin PC: Admin UI 실행(Flask + ROS2) — UI PC에서 함께 실행해도 됨
- Firebase RTDB
pick2pack/package.xml 기준 핵심 의존성:
rclpystd_msgslaunchlaunch_ros
두산 로봇 제어(서비스/SDK)는 설치 방식이 환경마다 달라 별도 안내가 필요할 수 있습니다.
아래처럼 폴더를 구성하면 가장 단순합니다.
project_root/
cobot_ws/ # ROS2 워크스페이스(=Control PC)
src/
pick2pack/ # ROS2 패키지
ui/ # UI PC 또는 Admin PC
User_UI.py
Admin_UI.py
GameplayMusic.mp3
serviceAccountKey.json
requirements.txt
templates/
index.html
admin.html
source /opt/ros/humble/setup.bashmkdir -p ~/ros_ws/src
cd ~/ros_ws/src
# 여기(~/ros_ws/src)에 pick2pack 폴더를 넣습니다.cd ~/ros_ws
colcon build --symlink-install
source install/setup.bashros2 launch pick2pack integrated_all.launch.py다음 파일이 **같은 폴더(ui/)**에 있어야 합니다.
User_UI.pyserviceAccountKey.json(Firebase 관리자 키)GameplayMusic.mp3(사용하는 경우)templates/index.htmlrequirements.txt
cd ~/project_root/ui
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txtsource /opt/ros/humble/setup.bashpython3 User_UI.pycd ~/project_root/ui
source .venv/bin/activate
source /opt/ros/humble/setup.bash
python3 Admin_UI.pyros2 topic list | egrep "signal_case|signal_acc|signal_stage|signal_stop|signal_start|signal_unlock"ros2 topic pub -1 /signal_case std_msgs/msg/Int32 "{{data: 1}}"ros2 topic pub -1 /signal_acc std_msgs/msg/Int32 "{{data: 2}}"
ros2 topic pub -1 /signal_acc std_msgs/msg/Int32 "{{data: 3}}"ros2 topic echo /signal_stageros2 topic pub -1 /signal_stop std_msgs/msg/Int32 "{{data: 1}}"
ros2 topic pub -1 /signal_start std_msgs/msg/Int32 "{{data: 1}}"
ros2 topic pub -1 /signal_unlock std_msgs/msg/Int32 "{{data: 1}}"export ROS_DOMAIN_ID=0
echo 'export ROS_DOMAIN_ID=0' >> ~/.bashrc
source ~/.bashrcsudo ufw status
# 테스트 목적으로 끄기(필요 시)
sudo ufw disableip asource /opt/ros/humble/setup.bashserviceAccountKey.json경로/파일명 확인- Firebase 프로젝트 권한(관리자 키) 확인
- 네트워크(방화벽/프록시)로 외부 HTTPS가 막혀있지 않은지 확인
Apache License 2.0