본문 바로가기

Project/RIS

[RIS] 최종 정리

728x90

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

[RIS] 12/26 (MDAS)

- MDAS 사용법 장치관리자에서 RS485 USB 연결 포트 확인 후 우측 상단의 Ports를 통해 해당 포트 입력 Baudrate 선택 후 Connected 클릭 Main Data Req.를 클릭하여 정상 연결 여부 확인 좌측의 Read/Write Parameters

youngseong.tistory.com

  • IMU : iAHRS
  • Lidar : RPLidar A2

System Block Diagram

 

- 각 sensor 선정 사유

  • iAHRS : Kalman Filter 기반의 9DOF (가속도(3DOF) + 자이로(3DOF) + 지자기 센서(3DOF))를 가지는 AHRS로 값이 매우 정확하게 나옴
  • RPLidar A2 : 가격 대비 효율이 우수하고 참고 자료가 많음
  • Motor / Motor Driver: 로봇 제작 회사에서 해당 회사의 제품을 많이 사용하여 선정. 그리고 목표 스펙에 맞는 모터를 선정하고 해당 모터와 호환되는 동일 회사의 모터 드라이버 선정

 

 

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

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

youngseong.tistory.com

 

 

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 구성 완료

 

Node Graph

 

TF Tree

  • Navigation Stack의 launch file 실행 시의 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

 

 

 

- Hardware 구성

  • 2 wheel differential + caster wheel

 

 
  • Solid Works를 통한 Robot의 Hardware 설계

 

  • Robot의 바닥부분으로 사용할 알루미늄 판 제작 의뢰
  • 3D 프린트 제작 외주를 맡겨 외피 제작

Robot의 내부 구성
외피 부착 후 사진

 

 

- 수행 성과

 

1) SLAM

  • 여러 SLAM algorithm을 사용하여 Mapping 수행 (Hector / Cartographer SLAM)
    •  Hector SLAM은 Odometry 정보를 필요로 하지 않아 Lidar 만으로 mapping 가능

 

Hector SLAM

Hector SLAM 결과물

 

Cartographer SLAM

 

Cartographer SLAM 결과물

  • Hector SLAM과 달리 Cartographer SLAM은 Odometry 정보를 통한 더 정밀한 Mapping이 가능
  • 따라서 Navigation에는 Cartographer SLAM을 통해 작성한 Map을 사용
  • Map의 내용을 토대로 Costmap 구성

Global / Local Costmap

 

 

2) Navigation

  • SLAM을 통해 작성한 Map상에서의 Navigation 진행
  • Rviz 화면에 Map topic을 불러온 후 AMCL을 통한 Map상에서의 Localization 진행

 
  • 초기위치를 부여하고 목표지점을 부여하여 로봇을 이동시킴
  • Base Local Planner로는 DWA 사용

DWA Path Planning

Navigation 진행 과정

 

 

 

 

 

 

- 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

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

 

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

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

 

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