wn42
코딩이랑 이것저것
wn42
전체 방문자
오늘
어제
  • 분류 전체보기 (113)
    • 프로그래머스 (23)
      • LV1 (11)
      • LV2 (1)
      • LV3 (3)
      • 연습 (8)
    • 딥러닝 공부 (0)
      • 머신러닝&딥러닝 이론 (0)
    • 임베디드 (17)
      • Adventure Design (1)
      • 센서기반모바일로봇 (5)
      • ROS (9)
      • Google Coral (2)
    • C++ (38)
      • C++ 기초 (34)
      • 자료구조 및 알고리즘 (4)
    • Python (14)
      • 기본 파이썬 문법 (6)
      • Python 기초 (8)
    • 빅데이터 (9)
      • 빅데이터 첫걸음 시작하기(국비지원) (5)
      • 빅데이터 공부 (4)
    • 알고리즘 공부 (2)
      • 기본 알고리즘 (2)
    • 전자공학 (10)
      • 반도체 공정 (3)
      • 무선데이터통신 (7)
      • 반도체공학 (0)
    • C# (0)
      • C# 기본 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 바이트디그리
  • numpy
  • 클래스
  • 큐
  • 파이썬
  • 정렬
  • 노드
  • 내일배움카드
  • 빅데이터 첫걸음 시작하기
  • 스택
  • 조건문
  • 스택/큐
  • 반복문
  • ROS
  • 데이터분석
  • 변수
  • Queue
  • 패스트캠퍼스
  • Python
  • 빅데이터
  • 데이터분석 인강
  • c++
  • K디지털크레딧
  • 인스턴스
  • google coral
  • 딥러닝
  • 상속
  • 소멸자
  • stl
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
wn42

코딩이랑 이것저것

ROS 모바일로봇
임베디드/ROS

ROS 모바일로봇

2022. 3. 17. 14:55

대표적인 ROS의 모바일로봇으로 터틀봇이 있다.

여기서는 터틀봇을 위주로 모바일로봇에 대해 설명한다.

 

터틀봇(Turtle Bot)

  • 터틀(turtle)은 1967년에 개발된 교육용 컴퓨터 프로그래밍 언어인 로고(Logo)를 이용해 실제 로봇을 구동하기 위해 만들어진 터틀 로봇에서 유래되었음.
  • ROS의 공식 로봇 플랫폼이다.
  • SLAM, Navigation, Gazebo, RViz 등을 서포트함
  • TurtleBot3의 하드웨어는 오픈소스로 깃허브에 제공되어서 3D 프린터로 출력이 가능하다.

 

TurtleBot3 네트워크

PC와 TurtleBot을 연동하는 경우

  • gedit ~/.bashrc
  • 위 명령어로 bashrc 파일을 열어서 아래와 같이 변경한다. IP 주소는 터미널에서 ifconfig를 입력하면 알 수 있다.
  • ROS_MASTER_URI = http://IP_OF_REMOTE_PC:11311
  • ROS_HOSTNAME = IP_OF_TURTLEBOT

PC에서 시뮬레이션만 돌리는 경우

 

  • ROS_MASTER_URI = http://IP_OF_REMOTE_PC:11311
  • ROS_HOSTNAME = IP_OF_REMOTE_PC

 

TurtleBot3 원격 제어

  • roscore 구동 [Remote PC]
roscore
  • turtlebot3_robot.launch 런치 파일 실행 [TurtleBot]
roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen
  • turtlebot3_teleop_key.launch 런치 파일 실행 [Remote PC]
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch --screen

 

TurtleBot3 시각화

RViz 실습

터미널에서 아래처럼 코드를 입력한다. (모든 설치는 완료되었다고 가정, 패키지 미설치시 Robotis 사이트에서 설치 바람)

export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_bringup turtlebot3_model.launch

 

burger 모델을 기준으로 시각화를 진행한다. 만약 waffle 모델을 이용하는 경우 burger 대신 waffle을 입력하면 된다.

모두 입력하면 아래와 같은 RViz 시각화 tool이 열린다.

ctrl + c를 눌러서 위의 RViz를 닫고, 아래의 코드로 다시 RViz를 열자.

아래의 코드는 로봇이 바라보는 방향(오도메트리 정보)을 화살표로 나타내준다.

roslaunch turtlebot3_fake turtlebot3_fake.launch

 

방향키를 이용해서 로봇을 제어해보자. 터미널 창을 따로 열어서 아래의 코드를 입력하자.

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

방향키로 로봇의 속도를 제어하면 다음과 같이 로봇의 움직임이 어떤지를 시각화할 수 있다.

 

이번에는 오도메트리 정보를 끄고 TF를 확인해보자.

그림과 같이 오도메트리를 체크 해제하고, 하단의 TF를 체크한다.

TF는 로봇의 모듈들이 어떤식으로 연결되고 움직일 때 어떻게 구동되는지를 시각화할 수 있다.

 

 

Gazebo 실습

또다른 시각화 툴인 Gazebo를 실습한다.

아래의 코드를 입력하여 가제보 툴을 실행한다. 원하는 맵을 골라서 실행하면 되겠다.

roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_gazebo turtlebot3_house.launch

 

가제보를 실행하면 다음과 같은 프로그램이 실행된다.

 

아래의 코드로 키보드 입력을 활성화한다.

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

가제보 툴을 켠 상태로 RViz를 실행해보자. RViz로 로봇의 라이다 센서가 맵을 센싱하는 것을 시각화할 수 있다.

다음의 코드를 입력해서 RViz를 실행하자.

roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

실행하면 라이다 센서 데이터가 시각화된다. Size(m)을 레이저 포인터가 잘 보이도록 적당한 크기로 조정하자.

로봇을 방향키로 움직이면서 어떤 식으로 센싱이 이뤄지는지를 확인해보자.

 

종료하고 SLAM 시뮬레이션 RViz을 새로이 실행해보자. SLAM은 Localization과 Mapping가 동시에 이뤄진다.

roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

아래와 같이 맵이 나타난다. 로봇을 움직여서 맵이 어떻게 생성되는지 확인하자.

 

맵이 완성되면 다음의 명령어로 지도 저장이 가능하다. (pgm 파일로 저장된다.)

rosrun map_server map_saver -f ~/map

 

마지막으로 네비게이션을 실행한다. SLAM을 종료하고 다음의 명령어를 입력해서 네비게이션을 실행하자.

참고로 내가 제작한 지도를 사용한다.

roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

 

Navigation 시뮬레이션에서는 particle filter 방식을 이용한다.

2D Pose Estimate로 현재 로봇이 위치하고 바라보는 방향을 선택한다.

2D Nav Goal을 이용해서 로봇을 원하는 위치와 바라보는 방향으로 위치할 수 있다.

 

로봇이 스스로 방향을 찾고 장애물을 피해 목표 위치로 이동한다.

 

 

출처

  • ROS 강의 Chapter10. 모바일로봇: https://www.youtube.com/watch?v=rV-POzbzoHc&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=10
    '임베디드/ROS' 카테고리의 다른 글
    • 자율주행 로봇 프로젝트
    • SLAM & Navigation
    • ROS 임베디드 시스템
    • ROS 프로그래밍 실습(이동, 회전)
    wn42
    wn42
    코딩이랑 이것저것 하는 블로그

    티스토리툴바