본문 바로가기

Project/KUSMO

[KUSMO] 11/9 중간 요약 2

728x90
반응형
  • Project 목표 : 병원에서 사용 가능한 자율주행 배액 수거 로봇 개발
    • 간병인들을 대신하여 병실에 모여있는 거동 불편 환자들의 배액을 수거 및 폐기 
  • 기간 : 2022.08 ~ 현재 (진행 중)
  • 참여 인원 : 총 3명
    • Hardware 개발 1명, Software 개발 1명, Server 개발 1명 

 

한이음 ICT 공모전 제출 영상
  • 작품 소개 영상

 

1) 전체 System 구성

  • OS : Ubuntu 20.04
  • Controller Board : Intel NUC
  • ROS(Noetic) 기반의 자율주행 시스템 구성

System Block Diagram

 

Flow Chart

 

 

2) Hardware 구성

    1. 전체 Hardware

전체 Hardware 

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

 

 

    2. 구동부

구동부 구성에 사용한 15T 알루미늄 판

 

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

 

모터-브라켓 연결부

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

 

벨트를 통한 모터-휠 연결

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

 

 

    3. 접속부

배액 건 + 호스를 통한 로봇 내 배액 컨테이너로의 연결 및 SP 커플러를 통한 병실 내 배액 컨테이너로의 접속

  • 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

 

 

 

[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가 주변의 프로파일을 장애물로 인식함

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

Lidar 기준 각 프로파일의 각도

 

 

[KUSMO] 6/4 Arduino Symbolic Link 생성, laser_filters를 통한 프로파일 제거

로봇이 목적지에 도착했음을 인지 후 접속부를 구동시킬 방안 탐색 정밀도 향상을 위해 목적지를 2개 이상으로 부여할 계획인데, 이 경우 위의 방식이 부적합할 수도 있음 Move Base node가 publish하

youngseong.tistory.com

 

 

Symbolic Link

 

[RIS] 1/2 (USB 장치의 Symbolic Link 생성법)

- USB Port 설정법 각 센서를 제작한 회사에서 지원하는 프로그램을 이용하여 윈도우에서 USB Port의 Serial을 변경 $ ls -al /dev/serial/by-id USB 장치에 부여된 이름 확인 (터미널 창 사진 추가) $ lsusb 위 명

youngseong.tistory.com

 

Arduino를 통한 폐기부 제어 및 배액량 모니터링

 

[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. 자율주행 관련

Robot의 실제 Sensor 배치에 맞게 TF 구성

    • 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을 선택함

Costmap의 Inflation 설명. 출처 :  http://wiki.ros.org/costmap_2d

 

Global(좌) / Local(우) Costmap

 

 

    4. 자율주행 구현

    4.1 SLAM 

  • SLAM(Simultaneous Localization And Mapping) 을 통한 지도 작성
    • SLAM : 미지의 공간에서 로봇이 센서값을 통해 자신의 위치를 파악함과 동시에 지도를 작성하는 기법
Cartographer SLAM 진행 과정

 

 

Cartographer 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

  • AMCL을 통한 Localization 진행
  • Particle 수렴 후 목표 지점 부여
Navigation 진행 과정

 

  • DWA Local Planner를 통해 장애물 회피 경로 생성 후 이동

DWA Local Planner를 통한 Navigation 진행 과정

 

 

 

Map 상의 좌표로 이동
 

[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) 추후 목표

 

[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

 

728x90
반응형