- Project 목표 : 실내 자율주행 퇴식 로봇 개발
- 2022년 8월부터 진행
- 성과
- 정부 지원사업 선정 (세종테크노파크 지역 과학문화 역량 강화 사업 '우리동네 과학클럽')
- 교내 창업동아리 선정
- 교내 학술제 우수상 수상
-System 구성
1) Turtlebot3 Waffle Pi 사용시
- OS : Ubuntu 20.04 - ROS Noetic
- 초기에 Ubuntu 18.04를 사용하려 했으나 Raspberry Pi4의 최신 firmware와 Ubuntu 18.04가 호환이 되지 않아 계속 설치가 되지 않아 Ubuntu 20.04로 변경
- 아래 구성은 전부 turtlebot3 waffle pi의 구성품들
- Controller Board : Raspberry Pi 4 +OpenCR(32bit ARM Cortex-M7)
- Motor : DYNAMIXEL(XM430-W210-T)
- IMU : MPU9250 (OpenCR 내장)
- Lidar : LDS-02
- Turtlebot3 수행 성과
- Turtlebot3를 통한 SLAM/Navigation 진행
- Turtlebot3 Waffle Pi를 개조하여 robot을 제작하려 했으나 목표 중량(60kg)을 견디지 못하여 hardware를 자체 제작하기로 결정
2) Hardware 변경 ( ~2022년 10월)
- OS : Ubuntu 20.04 - ROS Noetic
- Controller Board : Raspberry Pi 4 +Arduino
- Motor : RB-35GM 07TYPE (12V DC Motor)
- + 95mm Diameter Wheel
- Motor Driver : L298N
- IMU : iAHRS (Kalman Filter 기반의 9DOF(Acclerometer(3DOF) + Gyroscope(3DOF) + Magnetometer(3DOF)) ARHS)
- Lidar : RPLidar A1
3) 현재
- OS : Ubuntu 18.04 - ROS Melodic
- Controller Board : Jetson Nano Developer Kit 2GB
- Motor : MDRobot - BL9N2G30E0200 (24V BLDC Motor)
- Wheel 동일
- Motor Driver : MD200T (2 Channel 24V Motor Driver)
- IMU : 동일
- Lidar : 동일
- 각 sensor 선정/변경 사유
- iAHRS : 칼만필터 기반의 총 9DOF (가속도(3DOF) + 자이로(3DOF) + 지자기 센서(3DOF))를 가지는 센서로 값이 매우 정확하게 나옴
- RPLidar A1 : 가격 대비 효율이 우수하고 참고 자료가 많음
- 모터(BL9NG30E0200), 모터 드라이버(MD200T) : 로봇 제작 회사에서 해당 회사의 제품을 많이 사용하여 선정. 그리고 목표 스펙에 맞는 모터를 선정하고 해당 모터와 호환되는 동일 회사의 모터 드라이버 선정
- 변경 사유
- Motor / Motor Driver : 목표 spec(목표 중량 80kg, 속도 1.2m/s)을 만족시키지 못해 교체
- 교체 전 Motor spec
- Power : 12.8W
- Rated Torque : 0.25kgf-cm
- Reduction Ratio : 1/31
- 교체 후 Motor spec
- Power : 200W
- Rated Torque : 6.4kgf-cm
- Reduction Ratio : 1/16
- 교체 전 Motor spec
- Controller Board : Jetson Board가 Ubuntu 사용에 더 편리하다고 판단하여 교체
- OS 변경 사유
- Jetpack에서 Ubuntu 20.04를 지원한지 얼마 되지 않아 불안정하고 참고자료가 많지 않아 OS를 18.04로 변경 (Jetpack 4.6부터 Ubuntu 20.04 지원 (2021년 10월))
- rules file을 통한 각 센서들의 USB Port에 대한 Symbolic Link 생성
- Motor 변경 전의 system block diagram
- Source Code : https://github.com/YoungSeong98/Project_KUSMO
- ROS 구성
- initialpose, goal, odometry publisher 구성, ekf 를 통해 sensor fusion 진행
- https://youngseong.tistory.com/127
- Hardware 구성
- 알루미늄으로 로봇의 몸통을 구성하고 PVC로 겉면을 감쌈
- 상단부에 RPLidar 배치
- Arduino와 Raspberry Pi를 연결하고 Arduino + L298N를 통해 DC Motor 제어.
- Motor의 Encoder 핀을 bread board에 연결한 후 아래와 같이 pull up 저항을 통해 값을 받아옴
- 현재 서랍부까지 제작 완료
- 수행 성과
1) SLAM
- Hector SLAM, Cartographer SLAM을 통한 Mapping 진행
- Hector SLAM은 Odometry 정보를 필요로 하지 않아 Lidar 만으로 mapping 가능
- 추후 목표
1) Navigation 수행
2) 아래와 같은 간단한 구조로 기본적인 제어를 진행한 후
system의 block diagram중앙 제어 역할을 할 MCU 선정 후 (STM Serise 고려중) 아래와 같은 설계를 진행
- 고려 사항
- 손이 끼일 때 멈출수 있게 한다는 등의 안전상의 이유로 서랍에 센서를 달려 하는데
- 이때 사용 가능한 센서 : 토크 센서
- 서랍 제어용 MCU를 따로 만드는 것이 좋을 지
- 모터 드라이버는 RS485와 CAN 통신이 가능한데 둘 중 현 상황에 더 적합한 통신은
- 위와 같이 MCU들을 통해 로봇을 제어하려 할 때 주의할 점
3) 로봇 하드웨어 제작
- 서랍부를 구동부와 마찬가지로 PVC로 감싼 후 서랍부 위에 디스플레이 배치
- 현재 문제점
- ROS를 통한 navigation stack 구성은 완료되었으나 제대로 된 localization이 이뤄지지 않아 robot이 navigation을 제대로 수행하지 못함
- Project 수행 과정에서 겪은 문제점들과 해결 방법
1) OS 관련
- Jetson 공식 홈페이지에 올라온 Image file 설치시 오류가 발생하여 Jetpack 4.6 설치
- https://youngseong.tistory.com/136
2) 모터 드라이버 관련
- 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
3) 구동부 구성 관련
- Robot이 caster wheel을 통해 균형을 잡는데, 울퉁불퉁하거나 평평하지 않은 곳을 지나가면 구동바퀴가 공중에 뜨거나, caster wheel 쪽으로 중량이 가해지면 안으로 들어가버리는 문제 발생
- 구동 motor를 앞쪽으로 옮기고 caster wheel들을 뒤로 배치하여 구동 motor가 하중을 많이 받는 지역으로 이동시켜 항상 바닥에 붙어있을 수 있도록 함
- Caster wheel 교체
참고 자료 :
1) Turtlebot3 관련 : https://emanual.robotis.com/docs/en/platform/turtlebot3/slam/
2) ROS packages
- RPLidar : https://github.com/Slamtec/rplidar_ros
- iAHRS :https://github.com/wookbin/iahrs_driver
3) ROS System 구성 : https://automaticaddison.com/how-to-set-up-the-ros-navigation-stack-on-a-robot/
4) Jetson Series 관련 : https://github.com/jetsonhacks
'Project > KUSMO' 카테고리의 다른 글
[KUSMO] 3/26 ~ 4/18 (0) | 2023.04.18 |
---|---|
[KUSMO] 2/14 ~ 3/25 (0) | 2023.03.25 |
[KUSMO] 2/2~3 (Jetson Nano Navigation Stack 구성 완료) (0) | 2023.02.02 |
[KUSMO] 1/20 (Jetson Nano Developer Kit 2GB 설정법) (0) | 2023.01.20 |
[KUSMO] 1/8 (LN298N, USB Port 설정, 아두이노 stray ‘\302’ in program 에러) (0) | 2023.01.08 |