본문 바로가기

Project/RIS

[RIS : 프로젝트 종료]

728x90
  • Project 목적 : 자율주행 로봇 플랫폼 개발
  • Project 수행 기간 : 2022.09.01 ~ 2023.02.28 (6개월)
  • 참여 인원 : Hardware 2명, Software 3명

 

- System 구성 

  • OS : Ubuntu 20.04 - ROS Noetic
  • Controller Board : Jetson Xavier NX

System Block Diagram

 

1) Hardware 구성

  • 2개의 구동 Motor + 1개의 Caster Wheel의 2Wheel - Differential - Drive Mobile Robot의 형태 (3점 지지)

Hardware 구성 내용

 

  • Solid Works를 통해 Robot의 Hardware 설계 진행
  • 알루미늄으로 밑바닥을 구성하고, 3D 프린터를 통해 외피 제작

Robot 내부 구성
외피 부착 후 사진

 

 

2) 사용 센서, 부품

  • Motor : MDRobot - MDH100
  • Motor Driver : MD200T
  • IMU : iAHRS
  • Lidar : RPLidar A2
  • Depth Camera : RealSense D455
  • rules file을 통해 각 센서들의 USB 포트에 대한 Symbolic Link를 생성하여 사용

각 센서에 대한 Symbolic Link

 

 

3) Navigation Stack 구성

  • 로봇의 Navigation을 위해 필요한 각 센서들에 대한 package들과 ROS의 여러 기능 (TF, AMCL, EKF, Costmap, Base Local Planner, Map server)들을 포함하는 Navigation Stack 구성

 1. TF(Transformation)구성 : 서로 다른 좌표계에서 받아오는 센서 데이터값을 base_link로 통일시킴

 2. Motor Driver, IMU, Lidar 동시 구동

 3. EKF(Extended Kalman Filter)를 통해 Motor의 Encoder 값과 IMU 센서의 data를 Fusion

  • Kalman Filter는 Linear System에만 사용 가능하므로 Non-Linear System인 Robot에 적용시킬 수 있는 Extended Kalman Filter 사용

 4. Global / Local Costmap 구성 : SLAM을 통해 얻은, 현실 세계에 있는 장애물에 대한 정보를 .yaml file을 통해 이 두 costmap들에 저장

  • Global Costmap : SLAM을 통해 얻은 Static Map으로부터 만들어지며 새로운 장애물이 나타난다거나 하는 등의 환경이 바뀌더라도 변하지 않음
  • Local Costmap : Robot의 sensor data로부터 실시간으로 장애물에 대한 정보를 얻으며 만들어짐. Local Planner가 이를 토대로 odometry와 laser data를 계속 확인하며 충돌이 없는 local plan을 선택함

Global(왼쪽) / Local Costmap(오른쪽)

 5. Map server : SLAM을 통해 얻은 map을 map server를 통해 불러옴

 6. Move Base Node 구성 : Costmap과 Local Planner를 포함

  • Local Planner로는 DWA 사용

 

Node Graph
TF Tree

- 수행 성과

1) SLAM

  • Hector / Cartographer SLAM을 통한 Mapping 진행
    • Hector SLAM은 Odometry 정보를 필요로 하지않아 Lidar 만으로 Mapping 가능 
    • Cartographer SLAM은 Odometry 정보를 토대로 비교적 정밀한 Mapping 가능
  • 따라서 Navigation에는 Cartographer SLAM을 통해 작성한 Map 사용
Hector SLAM

Hector SLAM 결과물

 

Cartographer SLAM

Cartographer SLAM 결과물

 

 2) Navigation

  • SLAM을 통해 작성한 Map 상에서의 Navigation 진행
  • Rviz 화면에 Map Topic을 불러온 후 '2D Pose Estimate' 버튼을 통해 AMCL에 Robot의 초기 위치를 부여
  • 그 후 Turtlebot3 Teleoperation Package를 통해 Robot을 조금씩 움직이며 Particle들을 수렴시킴

Particle 수렴 과정

 

  • Particle 수렴 후 '2D Goal' 버튼을 통해 Robot에 목표 지점 부여 

Rviz에서의 목표 지점 부여

 

  • DWA Local Planner를 통해 장애물을 회피하며 목표 지점까지 이동

DWA Local Planner 사용 화면

 

Navigation 진행 영상

 

- 향후 목표 

  • ROS version을 1에서 2로 교체
  • Rviz 아닌 좌표값 부여를 통한 로봇 이동
  • TEB 등의 다른 Local Planner 사용
  • Real Time 확보 + AMCL, DWA의 parameter 조정을 통한 더 매끄러운 Navigation 구현
  • Depth Camera를 통한 낮은 높이의 장애물 인식

 

 

- 관련자료

소스 코드

https://github.com/YoungSeong98/Project_RIS

 

GitHub - YoungSeong98/Project_RIS

Contribute to YoungSeong98/Project_RIS development by creating an account on GitHub.

github.com

 

각 과정에 대한 상세 설명

 1. External Memory 사용

https://youngseong.tistory.com/113

 

[RIS] 12/1 (sdkmanager USB, external memory 사용)

SDK Manager에서 NVME가 아닌 USB로 설치 external memory 사용을 위한 명령어 $ get_jetson_files.sh $ install_dependencies.sh # install depedencies $ flash_jetson_external_storage.sh # flash jetson via USB cable https://github.com/jetsonhacks/b

youngseong.tistory.com

 2. MDAS를 통한 Motor Driver 설정

https://youngseong.tistory.com/119

 

[RIS] 12/26 (MDAS)

- MDAS 사용법 장치관리자에서 RS485 USB 연결 포트 확인 후 우측 상단의 Ports를 통해 해당 포트 입력 Baudrate 선택 후 Connected 클릭 Main Data Req.를 클릭하여 정상 연결 여부 확인 좌측의 Read/Write Parameters

youngseong.tistory.com

 3. 각 센서의 USB Port에 대한 Symbolic Link 생성

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

 4. 모터 드라이버 관련 문제점 해결

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

 5. Initial Pose / Goal 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

 6. Navigation Stack 구성

https://youngseong.tistory.com/130

 

[RIS] 1/11 (Navigation Stack 구성 완료)

- 아래의 내용들을 토대로 Robot의 전체적인 Software 구성 https://youngseong.tistory.com/102 [KUSMO] 11/4 (Navigation Stack 구성법) 로봇의 ROS Navigaion Stack 구성 Navigation stack은 로봇을 시작점에서부터 목적지까지

youngseong.tistory.com

7. Navigation 관련 문제점 해결

https://youngseong.tistory.com/143

 

[RIS] Navigation 관련 오류 (2/24 해결)

2/24에 해당 문제 해결 (아랫 부분에 설명) - Navigation을 위한 Software 구성 https://youngseong.tistory.com/130 [RIS] 1/11 (전체 Sotfware 구성) - Robot의 전체적인 Software 구성 사용중인 모터 드라이버의 ROS Package clo

youngseong.tistory.com