- System 구성
- OS : Ubuntu 20.04 - ROS Noetic
- Controller Board : Jetson Xavier NX
- 초기엔 Jetson Nano를 사용했으나 성능이 떨어져 제약이 많아 Xavier로 변경
- 아래 과정을 거쳐 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
- Motor : MDRobot - MDH100 | HBDS2D04E0100-D130
- Motor Driver : MD200T (2 channel 24V Motor Driver)
- MDRobot에서 제공하는 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
- IMU : iAHRS
- Lidar : RPLidar A2
- 각 sensor 선정 사유
- iAHRS : Kalman Filter 기반의 9DOF (가속도(3DOF) + 자이로(3DOF) + 지자기 센서(3DOF))를 가지는 AHRS로 값이 매우 정확하게 나옴
- RPLidar A2 : 가격 대비 효율이 우수하고 참고 자료가 많음
- Motor / Motor Driver: 로봇 제작 회사에서 해당 회사의 제품을 많이 사용하여 선정. 그리고 목표 스펙에 맞는 모터를 선정하고 해당 모터와 호환되는 동일 회사의 모터 드라이버 선정
- rules file을 통한 각 센서들의 USB Port에 대한 Symbolic Link 생성
[RIS] 1/2 (USB 장치의 Symbolic Link 생성법)
- USB Port 설정법 각 센서를 제작한 회사에서 지원하는 프로그램을 이용하여 윈도우에서 USB Port의 Serial을 변경 $ ls -al /dev/serial/by-id USB 장치에 부여된 이름 확인 (터미널 창 사진 추가) $ lsusb 위 명
youngseong.tistory.com
- Source Code : https://github.com/YoungSeong98/Project_RIS
GitHub - YoungSeong98/Project_RIS
Contribute to YoungSeong98/Project_RIS development by creating an account on GitHub.
github.com
- Navigation Stack 구성
[RIS] 1/11 (전체 Sotfware 구성)
- Robot의 전체적인 Software 구성 사용중인 모터 드라이버의 ROS Package clone https://github.com/YoungSeong98/md GitHub - YoungSeong98/md Contribute to YoungSeong98/md development by creating an account on GitHub. github.com - Sensor 전체
youngseong.tistory.com
- 위 내용을 토대로 Navigation Stack 구성 완료
- Navigation Stack의 launch file 실행 시의 node graph와 TF tree
- initialpose, goal, odometry publisher 구성, ekf 를 통해 sensor fusion 진행
- 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
- Hardware 구성
- 2 wheel differential + caster wheel
- Solid Works를 통한 Robot의 Hardware 설계
- Robot의 바닥부분으로 사용할 알루미늄 판 제작 의뢰
- 3D 프린트 제작 외주를 맡겨 외피 제작
- 수행 성과
1) SLAM
- 여러 SLAM algorithm을 사용하여 Mapping 수행 (Hector / Cartographer SLAM)
- Hector SLAM은 Odometry 정보를 필요로 하지 않아 Lidar 만으로 mapping 가능
- Hector SLAM과 달리 Cartographer SLAM은 Odometry 정보를 통한 더 정밀한 Mapping이 가능
- 따라서 Navigation에는 Cartographer SLAM을 통해 작성한 Map을 사용
- Map의 내용을 토대로 Costmap 구성
2) Navigation
- SLAM을 통해 작성한 Map상에서의 Navigation 진행
- Rviz 화면에 Map topic을 불러온 후 AMCL을 통한 Map상에서의 Localization 진행
- 초기위치를 부여하고 목표지점을 부여하여 로봇을 이동시킴
- Base Local Planner로는 DWA 사용
- Project 수행 과정에서 겪었던 문제점과 해결 방법
1) OS 관련 (Jetson Nano 사용시)
- Jetpack에서 Ubuntu 20.04를 지원한지 얼마 되지 않아 불안정하고 참고자료가 많지 않아 OS를 18.04로 변경
- Jetpack 4.6부터 Ubuntu 20.04 지원 (2021년 10월)
2) Intel Realsense 관련
- Jetson Nano에서 Realsense 실행시 성능이 심하게 저하되고 Pointcloud값을 보지 못해 제외
3) Motor Driver 관련
- Desktop 환경에서는 모터가 정상 동작하나 Embedded Board 환경에서는 제대로 동작하지 못함
- RS485 통신 packet 중 Check sum bit가 overflow로 인해 제대로 전달되지 않아 motor driver의 source code 중 해당 bit를 계산하는 함수의 return type과 해당 bit의 data type을 uint8_t -> uint16_t로 변경
- 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
4) Navigation 관련
- Navigation Stack 완료 후 Rviz창에서 2D Goal을 부여하여 navigation을 진행하려 했으나 TF의 위치가 계속 변하는 문제 발생
- TF 구성을 수정하여 해결
- 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
- 향후 목표
- 현재 사용중인 ROS의 version을 1에서 2로 교체
- 원활한 Navigation 구현
참고 자료 :
1) ROS package
- RPLidar : https://github.com/Slamtec/rplidar_ros
GitHub - Slamtec/rplidar_ros
Contribute to Slamtec/rplidar_ros development by creating an account on GitHub.
github.com
- iAHRS : https://github.com/wookbin/iahrs_driver
GitHub - wookbin/iahrs_driver: iahrs ros package
iahrs ros package. Contribute to wookbin/iahrs_driver development by creating an account on GitHub.
github.com
ROS관련 자료(라이브러리 등) : 프로그램 다운로드 - 엠디로봇
ROS(Robot Operating System) related manual, and library
www.mtmkorea.co.kr
2) ROS System 구성 : https://automaticaddison.com/how-to-set-up-the-ros-navigation-stack-on-a-robot/
How to Set Up the ROS Navigation Stack on a Robot – Automatic Addison
In this tutorial, we will learn how to set up and configure the ROS Navigation Stack for a mobile robot. The video below shows the final output you will be able to achieve once you complete this tutorial. What is the ROS Navigation Stack? The ROS Navigatio
automaticaddison.com
Documentation - ROS Wiki
ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. ROS is licensed under
wiki.ros.org
3) Jetson Series 관련 : https://github.com/jetsonhacks
jetsonhacks - Overview
Code for NVIDIA Jetson Developer Kits. Please note that Jetson Nano code is on https://github.com/jetsonhacksnano - jetsonhacks
github.com
'Project > RIS' 카테고리의 다른 글
[RIS : 프로젝트 종료] (1) | 2023.03.10 |
---|---|
[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 |