- 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
1) Hardware 구성
- 2개의 구동 Motor + 1개의 Caster Wheel의 2Wheel - Differential - Drive Mobile Robot의 형태 (3점 지지)
- Solid Works를 통해 Robot의 Hardware 설계 진행
- 알루미늄으로 밑바닥을 구성하고, 3D 프린터를 통해 외피 제작
2) 사용 센서, 부품
- Motor : MDRobot - MDH100
- Motor Driver : MD200T
- IMU : iAHRS
- Lidar : RPLidar A2
- Depth Camera : RealSense D455
- rules file을 통해 각 센서들의 USB 포트에 대한 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을 선택함
5. Map server : SLAM을 통해 얻은 map을 map server를 통해 불러옴
6. Move Base Node 구성 : Costmap과 Local Planner를 포함
- Local Planner로는 DWA 사용
- 수행 성과
1) SLAM
- Hector / Cartographer SLAM을 통한 Mapping 진행
- Hector SLAM은 Odometry 정보를 필요로 하지않아 Lidar 만으로 Mapping 가능
- Cartographer SLAM은 Odometry 정보를 토대로 비교적 정밀한 Mapping 가능
- 따라서 Navigation에는 Cartographer SLAM을 통해 작성한 Map 사용
2) Navigation
- SLAM을 통해 작성한 Map 상에서의 Navigation 진행
- Rviz 화면에 Map Topic을 불러온 후 '2D Pose Estimate' 버튼을 통해 AMCL에 Robot의 초기 위치를 부여
- 그 후 Turtlebot3 Teleoperation Package를 통해 Robot을 조금씩 움직이며 Particle들을 수렴시킴
- Particle 수렴 후 '2D Goal' 버튼을 통해 Robot에 목표 지점 부여
- DWA Local Planner를 통해 장애물을 회피하며 목표 지점까지 이동
- 향후 목표
- ROS version을 1에서 2로 교체
- Rviz 아닌 좌표값 부여를 통한 로봇 이동
- TEB 등의 다른 Local Planner 사용
- Real Time 확보 + AMCL, DWA의 parameter 조정을 통한 더 매끄러운 Navigation 구현
- Depth Camera를 통한 낮은 높이의 장애물 인식
- 관련자료
소스 코드
https://github.com/YoungSeong98/Project_RIS
각 과정에 대한 상세 설명
1. External Memory 사용
https://youngseong.tistory.com/113
2. MDAS를 통한 Motor Driver 설정
https://youngseong.tistory.com/119
3. 각 센서의 USB Port에 대한 Symbolic Link 생성
https://youngseong.tistory.com/121
4. 모터 드라이버 관련 문제점 해결
https://youngseong.tistory.com/122
5. Initial Pose / Goal Publisher 생성
https://youngseong.tistory.com/127
6. Navigation Stack 구성
https://youngseong.tistory.com/130
7. Navigation 관련 문제점 해결
https://youngseong.tistory.com/143
'Project > RIS' 카테고리의 다른 글
[RIS] 최종 정리 (0) | 2023.02.23 |
---|---|
[RIS] 2/5 Motor Encoder 값 수신 완료 (0) | 2023.02.05 |
[RIS] Navigation 관련 문제 (2/24 해결) (0) | 2023.01.27 |
[RIS] 1/11 (Navigation Stack 구성 완료) (0) | 2023.01.11 |
[RIS] 1/10 (cv2를 통한 rviz map 생성) (0) | 2023.01.10 |