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_URI
와 ROS_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을 누르고 목적지가 될 지점을 눌러줍니다.
'Robotics' 카테고리의 다른 글
12일차 - SLAM 패키지 (0) | 2020.07.12 |
---|---|
12일차 - SLAM & Navigation 이론 (0) | 2020.07.12 |
11일차 - Ubuntu 18.04 apt-get install Error (E: Unable to correct problems, you have held broken packages.) (0) | 2020.07.11 |
10일차 - Embedded System with ROS (0) | 2020.07.11 |
10일차 - Docker에서 Arduino(tty.usbserial) 접근하기 (0) | 2020.07.11 |