공대생 잡학사전/ROS

ROS2 Foxy 에서 Turtlebot3 Keyboard 오류 해결

내이릉망고 2022. 12. 18. 04:16

Robotis 에서 제공하는 Turtlebot3 패키지를 변경하여 간단한 프로젝트를 구현하려고 했는데 아래 사이트에서 나와있는 Turtlebot3 과 world를 launch 파일로 불러 오는 것에 성공을 했지만

https://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/#gazebo-simulation

 

ROBOTIS e-Manual

 

emanual.robotis.com

keyboard를 사용해 조작하려면 아래와 같은 오류가 발생한다...

오류 발생
사이트에서 제공한 명령어

난 정말 이 명령어 그대로 쳤는데.... 패키지를 다 지우고 다시 깔아봐도 오류가 생기고 전부 다 지우고 재설치 해도 똑같은 오류가 생긴다.. 오류 내용을 살펴보니 실행 과정에서 turtlebot3model을 못불러 오는거 같다.(export TURTLEBOT3_MODEL=burger 혹은  waffle 지정해줘도 문제가 발생한다...)

근데 다른 drive나 navigation 관련 명령어는 잘 돌아간다... 구글에 검색해도 나같은 오류가 생긴 사람이 거의 없고 정말 하루동안 매달린 와중에 의도치 않은 곳에서 정답이 나왔다...

 

유튜브 공식 계정에 ROS2 foxy로 keyboard 실행 영상이 있었다....! ( 왜 이걸 나는 삽질하다가 마지막에 발견했는지....ㅠ)

그래서 나처럼 다른 사람들은 삽질 하지 말라고 내용을 공유한다.

 

먼저 그동안 만들었던 디렉토리들을 다 지우고 처음부터 다시 시작한다.

 

항상 우분투에서 작업을 시작하기 전에 (설치를 해야한다면) update는 필수다 (작업 경로는 홈화면이다)

만약 자신의 경로가 어딘지 모르겠다면 pwd 를 입력해 경로를 확인한다.

sudo apt update && apt upgrade

이후 다음 패키지를 설치한다.

sudo apt install ros-foxy-gazebo-ros-pkgs
sudo apt install ros-foxy-cartographer
sudo apt install ros-foxy-cartographer-ros
sudo apt install ros-foxy-navigation2 ros-foxy-nav2-bringup
sudo apt install ros-foxy-turtlebot3-msgs
sudo apt install ros-foxy-dynamixel-sdk
sudo apt install ros-foxy-hls-lfcd-lds-driver

설치가 끝났으면 작업 디렉토리를 만든다.

mkdir -p ~/turtlebot3_ws/src

작업 디렉토리로 이동한다.

cd turtlebot3_ws/src

src 폴더에서 다음을 설치한다.

git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations

다음 빌드를 위해 상위 폴더인 turtlebot3_ws로 이동한다.

cd ..

ROS2 환경을 불러온다. (저는 단축어 ros2foxy 만들어 사용했습니다)

source /opt/ros/foxy/setup.bash

빌드를 시작한다.

colcon build --symlink-install --parallel-workers 1

colcon build

사진과 같이 빌드가 잘 된것이 확인 되면 상위 폴더로 이동한다. (cd ..)

 

아래 명령어를 입력해 주고

echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
source ~/.bashrc

불러올 Turtlebot3 model을 지정해준다.

export TURTLEBOT3_MODEL=burger

launch 파일을 실행해 Gazebo 상에서 turtlebot3을 불러온다.

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

그럼 Gazebo가 실행되어 Turtlebot3을 볼 수 있다.

Gazebo Turtlebot3

 

잘 불러온것이 확인 됬으면 Ctrl+Alt+t 혹은 Ctrl+Shift+t 를 눌러 새로운 터미널을 연다.

 

ROS2 환경 불러오고

source /opt/ros/foxy/setup.bash

불러올 Turtlebot3 model을 지정해준다.

export TURTLEBOT3_MODEL=burger

Keyboard를 실행한다.

ros2 run turtlebot3_teleop teleop_keyboard

Gazebo Turtlebot3 Keyboard

결론

사이트에서 keyboard를 사용해서 조작하고 싶으면 새로운 터미널에 ros2 run turtlebot3_teleop teleop_keyboard를 치면 된다고 나와있기도 하고,

다른 사람들이 다양한 ros환경에서 keyboard를 사용할때 keyboard 실행 명령어만 치길래 그거면 되는줄 알았지만

몇번의 시행착오 끝에 깨달은 것은  나와 같은 오류가 생기는 경우에는 ros2 run 명령어 전에 다시한번 모델을 지정하는

export TURTLEBOT3_MODEL=burger

이 명령어를 치고 keyboard 명령어를 쳐야지만 돌아가는것 같다.

 

참고한 유튜브 영상 이다.

https://www.youtube.com/watch?v=8w3xhG1GPdo