본문 바로가기

Robotics

11일차 - Turtlebot3 시뮬레이션

반응형

TurtleBot3 개발 환경

  • 공식 터틀봇3 위키를 참조합니다.
    http://turtlebot3.robotis.com

  • 아래 패키지를 설치 후 SLAM, Navigation, Gazebo 실습을 진행합니다.

    cd ~/catkin_ws/src/
    git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
    git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
    git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
    cd ~/catkin_ws && catkin_make

실제 터틀봇을 작동할 때에는 연산량이 큰 rviz, gazebo 등을 실행하는 Remote PC와 터틀봇이 같은 네트워크 안에 있어야 합니다. 터틀봇과 Remote PC의 ROS_MATER_URIROS_HOSTNAME을 다음과 같이 설정합니다.

# ~/.bashrc
# env for turtlebot
export ROS_MSTER_URI=http://{IP_OF_REMOTE}:11311/
export ROS_HOSTNAME={IP_OF_TURTLEBOT}
# ~/.bashrc
# env for remote pc
export ROS_MSTER_URI=http://{IP_OF_REMOTE}:11311/
export ROS_HOSTNAME={IP_OF_REMOTE}

PC를 위한 패키지도 설치합니다. {VERSION} 부분을 설치된 ROS1 버전으로 치환합니다.

sudo apt-get install ros-{VERSION}-joy ros-{VERSION}-teleop-twist-joy ros-{VERSION}-teleop-twist-keyboard ros-{VERSION}-laser-proc ros-{VERSION}-rgbd-launch ros-{VERSION}-depthimage-to-laserscan ros-{VERSION}-rosserial-arduino ros-{VERSION}-rosserial-python ros-{VERSION}-rosserial-server ros-{VERSION}-rosserial-client ros-{VERSION}-rosserial-msgs ros-{VERSION}-amcl ros-{VERSION}-map-server ros-{VERSION}-move-base ros-{VERSION}-urdf ros-{VERSION}-xacro ros-{VERSION}-compressed-image-transport ros-{VERSION}-rqt-image-view ros-{VERSION}-gmapping ros-{VERSION}-navigation ros-{VERSION}-interactive-markers

3차원 시각화 도구 RViz를 이용하여 시뮬레이션 하기

아래 명령어를 통해 Turtlebot 시뮬레이션을 실행합니다. 매번 export하기 귀찮다면, export 내용을 .bashrc에 작성해줍니다.http://bbog.naver.com/PostView.nhn?blogId=mesa_&logNo=221469553957

# one shell
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_fake turtlebot3_fake.launch
# another shell
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

wxad가 전후좌우에 매칭되며 s는 멈춤을 의미합니다. 터틀봇을 이동하면 지속적으로 odometry 정보를 시각화하는 걸 볼 수 있습니다.

미리 정의된 tf 정보를 확인할 수도 있습니다.

이러한 시뮬레이션은 하드웨어 작업 이전에 정해진 병진 속도 및 회전 속도대로 작동하는 걸 확인하는 용도로 사용한다고 합니다.

3차원 물리 엔진 도구 Gazebo를 이용하여 시뮬레이션 하기

RViz가 센서 데이터를 시각화 하는 데에 특화되어 있다면 Gazebo는 시뮬레이션을 위한 도구입니다. 물리 엔진 기반으로 동작하며 지면 위의 마찰력, 장애물과 센서 데이터를 가상으로 생성합니다. 이런 데이터는 다시 RViz로 시각화 할 수 있어, Gazebo와 RViz에서 SLAM 데이터를 이용한 시뮬레이션을 터틀봇 없이 수행할 수 있습니다.

SLAM

# run Gazebo
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_world.launch

혹시 실행 도중 다음과 같은 에러가 발생하시는 분들은 아래와 같이 ~/.ignition/fuel/config.yaml 파일을 변경해주세요!

# The list of servers.
servers:
  -
    name: osrf
  # url: https://api.ignitionfuel.org 변경전
    url: https://api.ignitionrobotics.org # 변경후

  # -
    # name: another_server
    # url: https://myserver

# Where are the assets stored in disk.
# cache:
#   path: /tmp/ignition/fuel
~                                       

가제보 실행 화면입니다.

 RViz를 실행합니다. 현재 센서 데이터가 시각화되어 보입니다.

# run SLAM
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_slam turtlebot3_slam.launch

teleop_key 노드를 통해 이동 후에는 RViz에 지도가 반영됩니다.

# turtlebot remote control
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

충분한 양의 지도 데이터를 확보하였으면 아래 명령어를 통해 지도를 이미지 파일로 추출합니다.

# export map
rosrun map_server map_saver -f ~/map

홈 경로 아래에 map.pgm, map.yaml 파일이 생성됩니다.

image: ~/map.pgm
resolution: 0.050000
origin: [-10.000000, -10.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

Navigation

아까 사용한 가제보 파일을 재실행해야 합니다.

# run Gazebo
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_world.launch

아까 생성한 맵을 넣어줍니다.

# run Navigation
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

 

다음과 같이 지도와 실제 데이터가 차이가 납니다. 가제보 상의 터틀봇 위치와도 차이가 납니다. 어쨌든..... 작동은 합니다.

2D Nav Goal을 누르고 목적지가 될 지점을 눌러줍니다.

반응형