- 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
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
'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 |