[Simulation] Navigation

Yujin-Shim·2023년 6월 26일
0

심화편 소개

시뮬레이션에 활용될 로봇들

  • kobuki = turtlebot
  • Husky
  • Summit XL

목적

  1. ROS 기반의 Navigation Stack 학습
  2. Navigation Stack으로 프로젝트 진행

필요한 파일 다운로드 받기

~/sim_ws/src에 programmers_turtlebot 파일 다운로드 받기
아래 명령어로 dependency 설치 후 build 해주기

ubuntu 20.04의 code name = focal
ubuntu 18.04의 code name = bionic

자신의 ubuntu 버전에 맞게 code name을 바꿔서 아래내용을 terminal에 쳐주자

rosdep install --from-paths src --ignore-src -r -y --os=ubuntu:bionic
catkin_make
roslaunch turtlebot_navigation_gazebo main.launch

.
.

자율주행에 필요한 요소

  • ROS기반의 Navigation stack을 구성해서 로봇이 특정 환경을 자율적으로 탐색하도록 만들기 위해서는
  1. Mapping (로봇이 움직이며 lidar와 같은 센서로 주변환경을 지도로 얻는 과정)
roslaunch turtlebot_navigation_gazebo main.launch
roslaunch turtlebot_navigation_gazebo gmapping_demo.launch
roslaunch turtlebot_teleop keyboard_teleop.launch
roslaunch turtlebot_rviz_launchers view_mapping.launch

keyboard로 로봇을 움직이며 환경을 mapping 해보면 된다.

.
.

  1. Localization (지도 속에서 내가 어느 위치에 있는지, 어느 방향을 향하고 있는지 알아야 함)
roslaunch turtlebot_navigation_gazebo main.launch
roslaunch turtlebot_navigation_gazebo amcl_demo.launch
roslaunch turtlebot_rviz_launchers view_localization.launch
roslaunch turtlebot_teleop keyboard_teleop.launch

녹색화살표 = localization 추정치

로봇을 움직이다 보면 laser scan (red)와 map이 어느정도 일치하는 것을 확인할 수 있다.

  1. Path planning (경로 계획)

rviz 상에서

  • 2D Pose Estimate : 로봇의 위치와 방향을 지정해줄 수 있음
  • 2D Nav Goal : 로봇의 목표위치 지정 (로봇을 목표위치로 보내줄 수 있음)
roslaunch turtlebot_navigation_gazebo main.launch
roslaunch turtlebot_navigation_gazebo move_base_demo.launch
roslaunch turtlebot_rviz_launchers view_planning.launch
  1. Obstacle Avoidance
roslaunch turtlebot_navigation_gazebo main.launch
roslaunch turtlebot_navigation_gazebo move_base_demo.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch

민트색 cost map과 로봇 주위에 local cost map이 생성된 것을 확인할 수 있다.

cd ~/turtlebot_navigation/urdf
rosrun gazebo_ros spawn_model -file object.urdf -urdf -x 0 -y 0 -z 1 -model my_object

장애물을 spawn하고 로봇을 근처로 이동해보면 장애물을 감지하는 것을 확인할 수 있다
rviz상에서 장애물을 넘어가도록 2D Nav Goal을 설정해주면 장애물을 피해서 가는 것을 확인할 수 있다.
갑자기 object를 앞에 두어도 로봇이 잘 피해가는 것을 확인할 수 있다.

소소한 TIP
roslaunch를 실행하다보면 계속 다른 terminal을 켜야하는 경우가 생긴다.
이때는 terminator를 이용하면 편하다

sudo apt-get install terminator
ctrl + shift + O (가로분할) or 한영키 옆 menu + O
ctrl + shift + E (세로분할) or 한영키 옆 menu + E
.
.

Navigation Stack

  • 사용하려는 로봇을 올바르게 구성하고 정의하는 것이 중요
  • 로봇의 구성 및 정의 : URDF 파일

하드웨어 요구사항

  • kinematics
    - Differential drive
    • Holonomic Drive (Omnidirectional Drive)
    • Skid steer Drive
    • Ackermann Drive
  • Velocity control
    - x, y (linear)
    • z (angualr)
  • Sensor
    - LiDAR, Camera ...
  • Mobile Robot Shape
    - square, circular ...

Navigation Stack Setup

실습

목표

  • Navigation Stack 구성 요소를 시뮬레이션 환경에서 확인해보기

Mission

  • Kobuki와 Navigation 관련 Launch file 실행
  • Navigation stack에 필요한 Topic 체크
roslaunch turtlebot_navigation_gazebo main.launch
roslaunch turtlebot_navigation_gazebo move_base_demo.launch
rqt_graph
rostopic list
rosmsg show nav_msgs/Odometry

move_base 노드

  • move_base 노드와 연결되는 패키지들

    global-planner
    local planner
    rotate-recovery
    clear-costmap-recovery
    costmap-2D

  • move_base 노드와 연결되는 외부 패키지들

    map-server
    AMCL
    gmapping, slam-karto 등

0개의 댓글