바이오뱅크 워크셀에서 랙(RACK) 이송과 튜브(TUBE) 이송을 ROS 2 Action 기반으로 통합 제어하는 프로젝트입니다.
이 저장소는 프로젝트 소스만 포함합니다. Doosan ROS 2 패키지(doosan-robot2)는 저장소에 포함하지 않고 외부 의존성으로 설치합니다.
- 분야: 바이오뱅크 검체 이송 자동화
- 주요 기술: ROS 2 Humble, Python, PySide6, ROS 2 Action
- 로봇 기준: Doosan M0609 설정 기준
- 주요 구성:
- UI 노드
- 메인 오케스트레이터 노드
- 로봇 제어 Action 서버
- ROS 2 Action 인터페이스 패키지
- 작업자가 수동으로 처리하던 랙 이송과 튜브 이송 절차를 하나의 ROS 2 제어 흐름으로 통합합니다.
- UI 입력, 명령 해석, 좌표 변환, 로봇 동작, 예외 복구를 분리된 노드 구조로 관리합니다.
- 실제 장비 환경에서도 재사용할 수 있도록 Action 기반 인터페이스와 스테이션 테이블 중심 구조를 유지합니다.
bio-transport/
├── README.md
├── requirements.txt
├── .gitignore
├── LICENSE
├── docs/
│ ├── Flow_chart.png
│ ├── bio-transport-automation.png
│ └── archive/
└── src/
├── bio_transport/
└── bio_transport_interfaces/
| 경로 | 설명 |
|---|---|
docs/ |
흐름도, 문서, 보관용 자료 |
docs/archive/ |
발표자료, 대용량 보관 파일 등 |
src/bio_transport/ |
메인 실행 패키지 |
src/bio_transport_interfaces/ |
ROS 2 Action 인터페이스 패키지 |
이 저장소에는 doosan-robot2를 포함하지 않습니다.
doosan-robot2는 실행 환경에서 외부 의존성으로 설치합니다.
프로젝트 루트의 src/ 폴더에 별도로 설치해야 합니다.
cd bio-transport/src
git clone -b humble https://github.com/DoosanRobotics/doosan-robot2.git최종 프로젝트 구조 예시는 다음과 같습니다.
bio-transport/
├── README.md
├── requirements.txt
├── .gitignore
├── LICENSE
├── docs/
│ ├── Flow_chart.png
│ ├── bio-transport-automation.png
│ └── archive/
└── src/
├── bio_transport/
├── bio_transport_interfaces/
└── doosan-robot2/
참고:
bio_transport패키지는 런치 파일에서dsr_bringup2패키지를 찾습니다. 따라서doosan-robot2가 프로젝트 루트의src/폴더에 설치되어 있어야 합니다.
메인 실행 패키지입니다.
실행 노드:
| 실행 이름 | 역할 |
|---|---|
bio_main |
메인 오케스트레이터 |
bio_sub |
로봇 제어 Action 서버 |
bio_ui |
PySide6 기반 UI |
주요 기능:
- UI 명령 파싱
- RACK / TUBE / HOME / EMERGENCY 명령 분류
- 스테이션 이름을 로봇 접근 좌표로 변환
- Action 기반 작업 요청 및 결과 처리
- 긴급 정지 및 HOME 복귀 흐름 처리
ROS 2 Action 정의 패키지입니다.
| Action | 용도 |
|---|---|
BioCommand.action |
UI와 메인 오케스트레이터 사이의 명령 전달 |
RobotMove.action |
메인 오케스트레이터와 로봇 제어 서버 사이의 랙 이송 요청 |
TubeTransport.action |
튜브 이송 요청 |
- UI에서 작업 명령을 입력합니다.
bio_main이 명령 타입을 판별하고 유효성을 검사합니다.- 스테이션 이름을 실제 접근 좌표와 작업 좌표로 변환합니다.
bio_main이 하위 Action 서버에 작업을 요청합니다.bio_sub가 로봇 동작을 수행합니다.- 작업 성공 또는 실패 결과를 상위 노드로 반환합니다.
- 필요 시 HOME 복귀 또는 긴급 정지 복구 흐름을 수행합니다.
- UI 입력 명령을
RACK,TUBE,HOME,EMERGENCY유형으로 분류합니다. - 명령 형식과 목적지 정보를 검증한 뒤 적절한 작업 흐름으로 전달합니다.
- 메인 오케스트레이터가 작업 상태를 관리하며 순차적으로 명령을 처리합니다.
- 랙과 튜브 위치를 사전 정의된 스테이션 테이블 기준으로 해석합니다.
- 위치 이름을 실제 접근 좌표와 작업 좌표로 변환합니다.
- 서로 다른 작업 위치를 동일한 명령 형식으로 처리할 수 있습니다.
- 상위 노드는
RobotMove,TubeTransport,BioCommand액션을 통해 작업을 요청합니다. - 하위 제어 노드는 로봇 작업 단계를 순차적으로 수행합니다.
- 작업 결과를 액션 응답으로 반환해 상위 흐름 제어에 활용합니다.
- 긴급 정지 및 HOME 복귀 흐름을 지원합니다.
- 작업 실패 시 결과 상태를 상위 노드와 UI에 반환합니다.
source /opt/ros/humble/setup.bashgit clone https://github.com/junss1/bio-transport.git
cd bio-transportdoosan-robot2는 이 저장소에 포함하지 않습니다.
실행 환경에서는 bio-transport/src/ 안에 외부 의존성으로 별도 설치합니다.
git clone -b humble https://github.com/DoosanRobotics/doosan-robot2.git src/doosan-robot2pip install -r requirements.txtrosdep install -r --from-paths src --ignore-src --rosdistro humble -ycolcon build --symlink-install
source install/setup.bash기본값은 가상 모드입니다.
ros2 launch bio_transport bio_integrated.launch.py가상 모드 명시 실행:
ros2 launch bio_transport bio_integrated.launch.py \
mode:=virtual \
host:=127.0.0.1 \
dry_run:=False \
skip_probe:=True실제 로봇 모드 실행:
ros2 launch bio_transport bio_integrated.launch.py \
mode:=real \
host:=192.168.1.100 \
dry_run:=False \
skip_probe:=False실제 로봇 IP는 현장 네트워크 설정에 맞게 변경해야 합니다.
ros2 run bio_transport bio_sub --ros-args -p dry_run:=true
ros2 run bio_transport bio_main
ros2 run bio_transport bio_uiRACK,<CMD>,<SRC>,<DST>
예시:
RACK,IN,NONE,A-2
TUBE,<MODE>,<SRC>,<DST>
예시:
TUBE,IN,NONE,A-2-1
HOME,NONE,NONE,NONE
EMERGENCY,STOP,NONE,NONE
- 시스템 흐름도:
docs/Flow_chart.png - 발표자료 및 보관 자료:
docs/archive/
doosan-robot2는 이 저장소에 포함하지 않습니다.doosan-robot2는 프로젝트 루트의src/폴더에 외부 의존성으로 설치해야 합니다.bio_integrated.launch.py는dsr_bringup2를 사용합니다.bio_sub는 Doosan Robot Python API 사용을 전제로 합니다.- 실제 로봇 모드에서는 로봇 IP, 네트워크 연결, 안전 설정을 현장 환경에 맞게 확인해야 합니다.
This project is licensed under the Apache License 2.0.


