요양원 업무 보조를 위한 다중 주행 로봇 제어 시스템
2023.12.26 ~ 2024.01.25
개발환경 | |
기술 | |
커뮤니케이션 |
구분 | 이름 | 역할 |
---|---|---|
팀장 | 조태상 | Map 구축, SLAM, Camera Calibration, Aruco Marker Detection |
팀원 | 강소희 | GUI 설계 및 디자인, Map 구축 |
팀원 | 강한얼 | 딥러닝 활용 Following mode, 보행자 쓰러짐 인식 기능 개발 |
팀원 | 문서영 | Map 구축, SLAM, 딥러닝 활용 Following mode |
팀원 | 오윤 | Multi Robot Control, Task Planning, DB Query/Procedure 작성, GUI 경로 표시, BT 수정 |
팀원 | 조홍기 | A* Path Planning, 로봇 주행, Multi Robot Spawn 시도 |
- Sequence Diagram
- 안전 주행을 위한 장애물 Padding 처리
Components | Model | Training |
---|---|---|
Object detection model | YOLOv8n | From scratch |
CNN model | MobileNet-V3 | From scratch |
- 지정한 사람의 이미지를 캡쳐하고, pre-trained 모델의 feature extractore의 output을 anchor로 사용
- 탐지된 객체의 feature vector를 anchor와 cosine 유사도를 비교
- 일정 수준 이상의 가장 유사도가 높은 객체를 지정한 대상으로 판단
- "Open palm" 동작으로 following 모드를 끔
- "Finger snap" 동작으로 following 모드를 킴
Components | Model | Training |
---|---|---|
Human pose estimation model | Mediapipe | Pre-trained |
Action recognition model | LSTM | From scratch |
-
__Navigation
- A* Path Planning
- 장애물 Padding, 오차 보정을 통한 안전하고 정확한 주행
- Behavior Tree를 사용하여 동적/정적 장애물 회피 및 고착 상태 탈출
-
다중 로봇 제어
- 서로 다른 도메인ID 간 통신 가능하게 하여 하나의 맵에서 다수의 로봇을 제어
- 로봇 상태별 스케줄링
-
딥러닝 요소
- 딥러닝 기반의 영상 인식을 활용한 사람 추적 및 보행자 쓰러짐 인식 기능
- 보다 다양한 시나리오에서 장애물 회피 로직을 구현해보고 싶습니다.
- 라이다와 엔코더 이외에도 여러 개의 센서를 사용하여 Localization에 활용해보고 싶습니다.
- Jira, Confluence 등의 협업 툴을 사용해보는 기회가 되었습니다.
- ROS2 topic을 통해 GUI로 다양한 기능을 보여줄 수 있어 재밌었습니다.
https://docs.google.com/presentation/d/1JA80CWg-Doe3NlXZKzBihne2yhNvz5CSX7nk5qTw1c4/edit?usp=sharing
- ROS2의 humble 버전을 설치하여 사용했습니다.
- 핑크랩의 미니봇 하드웨어와 소스코드(https://github.com/PinkWink/pinklab_minibot_robot) 를 사용했습니다.
- minibot_bringup/scripts 파일로 udev를 설정했습니다.
- 모터 컨트롤을 위해 핑크랩의 아두이노 코드(https://github.com/PinkWink/pinklab_minibot_robot_firmware) 를 사용했습니다.
- LiDAR 사용을 위해 안병규님이 수정하신 driver(https://github.com/byeongkyu/ydlidar_ros2_driver) 를 사용했습니다.
- 미니봇을 구동하기 위해 Ubuntu 22.04를 설치한 라즈베리파이와 PC를 사용했습니다.
- 사용되는 모든 PC/라즈베리파이는 ROS2 통신을 위해 동일한 네트워크에 접속했습니다.
- 프로젝트를 클론한 후, nursing_home 디렉토리에서 빌드해주세요.
git clone https://github.com/addinedu-ros-3rd/ros-repo-1.git
cd ros-repo-1/nursing_home
colcon build
source ./install/local_setup.bash
- nursing_home/src/main_pkg/utils 경로에 config.ini 파일 생성
[dev]
host = DB Host
port = DB port
user = DB user
password = DB password
database = DB database name
- 해당 DB에 Table/Procedure 가져오기
source create_and_init.sql
프로젝트 루트에 있는 bridge_config.yaml 설정을 그대로 사용한다면
다음 내용을 ~/.bashrc 파일에 추가한 다음 source ~/.bashrc
하면 됩니다.
- 관제 PC
export ROS_DOMAIN_ID = 91
source /opt/ros/humble/setup.bash
source ~/nursing_home/install/local_setup.bash
- 로봇1 라즈베리파이
export ROS_DOMAIN_ID = 93
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
- 로봇1 PC
export ROS_DOMAIN_ID = 93
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
source ~/nursing_home/install/local_setup.bash
- 로봇2 라즈베리파이
export ROS_DOMAIN_ID = 94
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
- 로봇2 PC
export ROS_DOMAIN_ID = 94
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
source ~/nursing_home/install/local_setup.bash
- 로봇3 라즈베리파이
export ROS_DOMAIN_ID = 97
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
- 로봇3 PC
export ROS_DOMAIN_ID = 97
source /opt/ros/humble/setup.bash
source ~/pinkbot/install/local_setup.bash
source ~/nursing_home/install/local_setup.bash
- 터미널 1
ros2 launch minibot_bringup bringup_robot.launch.py
- 터미널 2
sudo chmod 777 /dev/video0
ros2 run v4l2_camera v4l2_camera_node
- 터미널 1
ros2 launch minibot_navigation2 bringup_launch.py map:=home.yaml
- 터미널 2
ros2 run robot_pkg robot_controller
- 터미널 1
ros2 run main_pkg main_controller
- 터미널 2
ros2 run ui_pkg monitoring
- 터미널 3 (domain bridge 설치 관련 참고: https://github.com/ros2/domain_bridge)
sudo apt install ros-humble-domain-bridge
ros2 run domain_bridge domain_bridge bridge_config.yaml
- Robot
# 터미널1: Start robot
ros2 launch minibot_bringup bringup_robot.launch.py
# 터미널2: Start robot camera
ros2 launch minibot_bringup camera.launch.py
- PC
# 터미널1 : Multi-person tracker
ros2 run follow_dl_pkg multi_person_tracker
# 터미널2 : Hand gesture recognizer
ros2 run follow_dl_pkg hand_recognizer
# 터미널3 : Image capture
ros2 run follow_dl_pkg img_saver
# 터미널1: Action recognition
ros2 run dl_pkg action_predicto
# 터미널2 : GUI
ros2 run ui_pkg monitoring