- Project 목표 : 병원에서 사용 가능한 자율주행 배액 수거 로봇 개발
- 간병인들을 대신하여 병실에 모여있는 거동 불편 환자들의 배액을 수거 및 폐기
- 기간 : 2022.08 ~ 현재 (진행 중)
- 참여 인원 : 총 3명
- Hardware 개발 1명, Software 개발 1명, Server 개발 1명
- 작품 소개 영상
1) 전체 System 구성
- OS : Ubuntu 20.04
- Controller Board : Intel NUC
- ROS(Noetic) 기반의 자율주행 시스템 구성


2) Hardware 구성
1. 전체 Hardware



- PVC 열 가공을 통한 구동부 케이스 제작
- 2T 알루미늄 플레이트 절곡을 통한 상단부 케이스 제작
2. 구동부


- 15T 알루미늄 판 주문제작을 통한 구동부 구성

- 브라켓을 통한 모터와 감속기 장착

- 로봇의 큰 하중을 안정적으로 지지하기 위해 구동부 판 하단에 베어링 하우징을 이용한 구동 축 장착
- 프레임 상단의 모터로부터 벨트를 이용해 동력 전달
3. 접속부



- 3D 프린터를 통해 배액 수거를 위한 배액 건 제작
- 호스를 통해 로봇 내부의 배액 컨테이너와 연결
- SP 커플러를 통해 병실 내의 배액 컨테이너에 접속할 수 있게 함
4. 폐기부


- 다수의 프로파일을 통해 2 DOF Actuator 고정을 위한 폐기부 프레임 구성


- Arduino + 수위 센서 2개를 통한 로봇 내부의 배액량 모니터링
- 배액 완충 시 폐기 구역으로 자율주행 후 2DOF 폐기부와 내부 펌프를 통해 배액 폐기
5. 전원 분배

- 24V LiFePO4 배터리를 통해 Motor Driver, NUC, Z축 Actuator Driver CNC Shield에 전원 공급
- 배터리와 Motor Driver 사이에 비상 정지 스위치를 연결하여 비상 정지 기능 구비


- 12V (18650 배터리 X 4)를 통해 Y축 Actuator L298N Driver와 Pump에 전원 공급
6. 상단부


- 각종 의료물품을 담을 수 있는 적재함을 프로파일에 끼울 수 있게 가공 후 로봇 상단에 배치
3) Software 구성
1. 전체 Source Code
GitHub - YoungSeong98/Project_KUSMO
Contribute to YoungSeong98/Project_KUSMO development by creating an account on GitHub.
github.com
- ROS기반의 Navigation Stack 구성
2. 센서 관련
- 자율주행을 위한 IMU, Lidar, Motor Encoder의 Sensor Data 수신 후 Extended Kalman Filter를 통한 Sensor Fusion 및
- Initial Pose, Goal, Odometry Publisher 구성
- https://youngseong.tistory.com/127
[RIS] 1/9 (initial pose/goal, odometry publisher, ekf)
- ROS를 통한 Robot의 Initial Pose / Goal에 대한 Publisher 생성법 $ cd ~/catkin_ws/src/kusmo_bot $ catkin_create_pkg localization_data_pub rospy roscpp std_msgs tf tf2_ros geometry_msgs sensor_msgs nav_msgs $ cd ~/catkin_ws $ catkin_make --only-pk
youngseong.tistory.com
- Motor 통신 관련 문제 해결
- https://youngseong.tistory.com/122
[RIS] 모터 드라이버(MD 200T) 관련 문제점 (12/15 ~ 1/10. 해결)
1/10에 해당 문제 해결 (아랫 부분에 설명) 현재 자율주행 로봇의 메인 제어기로는 Jetson Xavier, 모터로 MDH100, 모터 드라이버로는 MD200T 사용중 Ubuntu 20.04, ROS Noetic 환경에서 MDROBOT사에서 제공하는 모
youngseong.tistory.com
[RIS] 2/5 Motor Encoder 값 수신 완료
MD200T의 Source Code 분석 후 Encoder값을 ROS Message로 Publish하는 코드 추가 1. main.cpp // Tick Value Publisher ros::Publisher rightPub; ros::Publisher leftPub; std_msgs::Int32 right_ticks; std_msgs::Int32 left_ticks; main문 전에 각 바
youngseong.tistory.com


- Lidar가 주변의 프로파일을 장애물로 인식하여 laser_filters Package를 통해 각 프로파일의 위치에 해당하는 각도 내의 Point들을 제거

[KUSMO] 6/4 Arduino Symbolic Link 생성, laser_filters를 통한 프로파일 제거
로봇이 목적지에 도착했음을 인지 후 접속부를 구동시킬 방안 탐색 정밀도 향상을 위해 목적지를 2개 이상으로 부여할 계획인데, 이 경우 위의 방식이 부적합할 수도 있음 Move Base node가 publish하
youngseong.tistory.com

- Symbolic Link 생성을 통한 각 센서들의 USB Port명 지정
- https://youngseong.tistory.com/121
[RIS] 1/2 (USB 장치의 Symbolic Link 생성법)
- USB Port 설정법 각 센서를 제작한 회사에서 지원하는 프로그램을 이용하여 윈도우에서 USB Port의 Serial을 변경 $ ls -al /dev/serial/by-id USB 장치에 부여된 이름 확인 (터미널 창 사진 추가) $ lsusb 위 명
youngseong.tistory.com


- 2개의 Arduino Mega를 통한 폐기부 제어 및 로봇 내 배액량 모니터링
- https://youngseong.tistory.com/227
[KUSMO] 10/27 Arduino 기반 폐기부 및 배액량 모니터링
Arduino를 통한 Navigation 목표 지점 도착 후 폐기부 제어와 배액량 모니터링 코드 - 목표 지점 도착 후 폐기부 제어 코드 #include // Library to communicate to ROS #include // Library to use Stepper Motor #include #define E
youngseong.tistory.com
3. 자율주행 관련


- TF (Transformation) 구성 : 서로 다른 Coordinate Frame에서 얻어지는 sensor data들을 Robot의 회전 중심점인 'base_link'에 통일시키기 위해 TF 정의
- Base Contoller Node 구성
- Base Controller는 Navigation 수행을 위해 robot의 base coordinate를 기준으로 한 Velocity Command를 Motor에 적합한 Command로 변환하는 역할을 수행
- DWA(Dynamic Window Approach)를 Base Local Planner로 선택
- Base Local Planner : Robot의 base controller로 보내진 Velocity Command를 계산하는 Package로, Global Plan을 계산하고 실행하기 위한 여러 Algorithm들을 제공
- DWA algorithm은 이동체의 velocity, direction 및 sensor data로부터 얻는 obstacle과의 거리를 토대로 최적의 linear velocity와 angular velocity를 도출하여 obstacle을 회피하고 목적지에 도달한다.
- 즉 Map(위치 기반)을 Velocity Search Space(속도 탐색 영역)으로 변환하여 obstacle을 회피하며 목표지점까지 다다를 수 있는 최적의 velocity를 선정한다
- AMCL (Adaptive Monte Carlo Localization) Node 구성
- Localization : 주어진 Map상에서의 robot의 위치를 추적하는 과정
- AMCL : Particle Filter를 통해 Localization을 진행하는 MCL에서 적은 수의 sample 사용을 통해 수행 시간을 줄여 real-time성을 높인 algorithm
- 2D Map 상에서의 robot의 초기 추정 위치가 부여되면 XY 좌표 평면상에 robot의 위치를 확률적으로 나타낸 Particle의 분포를 sensor data를 기반으로 update해가며 robot의 위치를 추즉한다
- 이 과정을 위해 AMCL node는 TF, 각 sensor들의 계측값, Map 등의 data를 수신받아야 한다
- Move Base Node 구성
- Move Base Node는 Navigation을 수행하는 과정에서 발생하는 모든 요소들을 이어주는, Navigation Stack에서 매우 중요한 요소 중 하나
- 충돌 위험이 없는 path를 계획하는데 중요한 역할을 한다
- Global / Local Costmap 구성
- Costmap : 각 Cell들이 특정한 값(cost)를 부여받는 Grid Map. 값이 클수록 robot과 obstacle 사이의 거리가 가까움을 의미. 일반적으로 각 Cell들은 0~255 사이의 binary 값을 가짐
- Global Costmap : SLAM을 통해 얻은 Static Map으로부터 만들어지며 새로운 obstacle이 나타난다거나 하는 등의 환경이 바뀌더라도 변하지 않음
- Local Costmap : Robot의 sensor data로부터 실시간으로 obstacle에 대한 정보를 얻으며 만들어짐. Local Planner가 이를 토대로 odometry와 laser data를 계속 확인하며 충돌이 없는 local plan을 선택함



4. 자율주행 구현
4.1 SLAM
- SLAM(Simultaneous Localization And Mapping) 을 통한 지도 작성
- SLAM : 미지의 공간에서 로봇이 센서값을 통해 자신의 위치를 파악함과 동시에 지도를 작성하는 기법

- Hector / Cartographer SLAM의 2가지 방법을 통한 Mapping 진행
- Hector SLAM은 Odometry 정보를 필요로 하지않아 Lidar 만으로 Mapping 가능
- Cartographer SLAM은 Odometry 정보를 토대로 비교적 정밀한 Mapping 가능
- https://youngseong.tistory.com/145
Cartographer/Hector SLAM 사용법
- 전제 조건 ROS Noetic 설치(Ubuntu 20.04에서 진행. 다른 version의 경우 해당 ubuntu version에 맞는 ROS 설치) http://wiki.ros.org/noetic/Installation/Ubuntu noetic/Installation/Ubuntu - ROS Wiki If you rely on these packages, please sup
youngseong.tistory.com
4.2 Navigation
- 앞서 SLAM을 통해 얻은 Map 상에서의 Navigation 진행

- AMCL을 통한 Localization 진행
- Particle 수렴 후 목표 지점 부여
- DWA Local Planner를 통해 장애물 회피 경로 생성 후 이동

- 이후 Map 상의 좌표상으로 이동시키는 코드 작성
- https://youngseong.tistory.com/215
[KUSMO] 9/22 Map 좌표 지정을 통한 이동 명령
로봇을 SLAM을 통해 작성한 Map 상에서 원하는 지점으로 이동시키는 코드 /* 1 = Recharging Area (Default) 2 = Sickroom 3 = Exhausting Area */ #include #include #include #include using namespace std; // Action specification for move_ba
youngseong.tistory.com
4) 추후 목표
- Aruco Marker 인식을 통한 폐기 위치로의 정밀 주행 구현
- https://youngseong.tistory.com/222
[KUSMO] 10/12 NUC에서 USB Camera를 통한 Aruco Marker 인식
Intel NUC 상에서 USB Camera를 통한 Aruco Marker 인식 진행 아래의 USB Camera 사용 https://www.icbanq.com/P014881255 FIT0701 : 반도체 USB CAMERA FOR RASPBERRY PI AND - Bulk - 15186원 국내 최대 전자부품 전문 쇼핑몰 - 아이씨
youngseong.tistory.com
'Project > KUSMO' 카테고리의 다른 글
| [KUSMO] 11/30 프로젝트 종료 (4) | 2023.12.02 |
|---|---|
| [KUSMO] 10/27 Arduino 기반 폐기부 및 배액량 모니터링 (0) | 2023.10.27 |
| [KUSMO] 10/20 ~ 21 (1) | 2023.10.24 |
| [KUSMO] 10/12 NUC에서 USB Camera를 통한 Aruco Marker 인식 (0) | 2023.10.12 |
| [KUSMO] 10/3 (0) | 2023.10.04 |