본문 바로가기

Project/KUSMO

[KUSMO] 2/14 (중간 요약)

728x90
  • 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)
 

ROBOTIS e-Manual

 

emanual.robotis.com

 

XM430-W210-T

12.0V / 3.00Nm / 77rpm / Coreless / Metal Gear / TTL

www.robotis.com

 

 

ROBOTIS e-Manual

 

emanual.robotis.com

 

 

- Turtlebot3 수행 성과

  • Turtlebot3를 통한 SLAM/Navigation 진행

학교 근처 식당에서 SLAM/Navigation 진행

 

 

 

 

Turtlebot3를 개조하여 hardware 구성

Arduino IDE를 통한 모터 제어

 

  • 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) : 로봇 제작 회사에서 해당 회사의 제품을 많이 사용하여 선정. 그리고 목표 스펙에 맞는 모터를 선정하고 해당 모터와 호환되는 동일 회사의 모터 드라이버 선정
  • 변경 사유
  1. 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
  2. Controller Board : Jetson Board가 Ubuntu 사용에 더 편리하다고 판단하여 교체

 

- OS 변경 사유

  • Jetpack에서 Ubuntu 20.04를 지원한지 얼마 되지 않아 불안정하고 참고자료가 많지 않아 OS를 18.04로 변경 (Jetpack 4.6부터 Ubuntu 20.04 지원 (2021년 10월))

 

 

[RIS] 1/2 (USB 장치의 Symbolic Link 생성법)

- USB Port 설정법 각 센서를 제작한 회사에서 지원하는 프로그램을 이용하여 윈도우에서 USB Port의 Serial을 변경 $ ls -al /dev/serial/by-id USB 장치에 부여된 이름 확인 (터미널 창 사진 추가) $ lsusb 위 명

youngseong.tistory.com

 

  • Motor 변경 전의 system block diagram

 

 

 

GitHub - YoungSeong98/Project_KUSMO

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

github.com

 

 

  • ROS 구성

 

Node graph

 

TF Tree

 

[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

 

 

TF tree구성, sensor fusion완료

 

 

- Hardware 구성

  • 알루미늄으로 로봇의 몸통을 구성하고 PVC로 겉면을 감쌈

 

  • 상단부에 RPLidar 배치
  • Arduino와 Raspberry Pi를 연결하고 Arduino + L298N를 통해 DC Motor 제어. 
  • Motor의 Encoder 핀을 bread board에 연결한 후 아래와 같이 pull up 저항을 통해 값을 받아옴

 

DC Motor + L298N + Arduino  Raspberry Pi를 통한 ROS에서의 Robot제어

 

  • 현재 서랍부까지 제작 완료

 

 

 

- 수행 성과

1) SLAM

  • Hector SLAM, Cartographer SLAM을 통한 Mapping 진행
    •  Hector SLAM은 Odometry 정보를 필요로 하지 않아 Lidar 만으로 mapping 가능

 

Cartographer SLAM을 통한 mapping

Cartographer SLAM 결과물

 

Hector SLAM

Hector SLAM 결과물

 

 

 

- 추후 목표

1) Navigation 수행

2) 아래와 같은 간단한 구조로 기본적인 제어를 진행한 후

 

system의 block diagram중앙 제어 역할을 할 MCU 선정 후 (STM Serise 고려중) 아래와 같은 설계를 진행

- 고려 사항

  • 손이 끼일 때 멈출수 있게 한다는 등의 안전상의 이유로 서랍에 센서를 달려 하는데
    • 이때 사용 가능한 센서 : 토크 센서
    • 서랍 제어용 MCU를 따로 만드는 것이 좋을 지
  • 모터 드라이버는 RS485와 CAN 통신이 가능한데 둘 중 현 상황에 더 적합한 통신은
  • 위와 같이 MCU들을 통해 로봇을 제어하려 할 때 주의할 점

 

3) 로봇 하드웨어 제작

  • 서랍부를 구동부와 마찬가지로 PVC로 감싼 후 서랍부 위에 디스플레이 배치

 

 

 

- 현재 문제점

  • ROS를 통한 navigation stack 구성은 완료되었으나 제대로 된 localization이 이뤄지지 않아 robot이 navigation을 제대로 수행하지 못함

 

 

 

 

 

 

- Project 수행 과정에서 겪은 문제점들과 해결 방법

 

1) OS 관련

 

[KUSMO] 1/20 (Jetson Nano Developer Kit 2GB 설정법)

준비물 : MicroSD 카드, WiFi 동글, 키보드, 마우스, 모니터 'Jetson Nano 2GB Developer Kit SD Card Image' 다운로드 Jetson 공식 홈페이지에 Image File이 존재하나 해당 file을 다운로드 받아 실행하면 아래 사진과

youngseong.tistory.com

 

 

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
 

[RIS] 모터 드라이버(MD 200T) 관련 문제점 (12/15 ~ 1/10. 해결)

1/10에 해당 문제 해결 (아랫 부분에 설명) 현재 자율주행 로봇의 메인 제어기로는 Jetson Xavier, 모터로 MDH100, 모터 드라이버로는 MD200T 사용중 Ubuntu 20.04, ROS Noetic 환경에서 MDROBOT사에서 제공하는 모

youngseong.tistory.com

 

3) 구동부 구성 관련

  • Robot이 caster wheel을 통해 균형을 잡는데, 울퉁불퉁하거나 평평하지 않은 곳을 지나가면 구동바퀴가 공중에 뜨거나, caster wheel 쪽으로 중량이 가해지면 안으로 들어가버리는 문제 발생
    • 구동 motor를 앞쪽으로 옮기고 caster wheel들을 뒤로 배치하여 구동 motor가 하중을 많이 받는 지역으로 이동시켜 항상 바닥에 붙어있을 수 있도록 함
    • Caster wheel 교체

 

 

 


참고 자료 :

1) Turtlebot3 관련 : https://emanual.robotis.com/docs/en/platform/turtlebot3/slam/

 

ROBOTIS e-Manual

 

emanual.robotis.com

 

2) ROS packages

- 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

- MD200T : https://www.mdrobot.co.kr/ProgramCommunication/?q=YToxOntzOjEyOiJrZXl3b3JkX3R5cGUiO3M6MzoiYWxsIjt9&bmode=view&idx=12566296&t=board 

 

ROS관련 자료(라이브러리 등) : 프로그램 다운로드 - 엠디로봇

ROS(Robot Operating System) related manual, and library

www.mdrobot.co.kr

 

3) 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

http://wiki.ros.org/

 

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

 

4) 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