본문 바로가기
정나우/ROS

DQN을 활용한 Cartpole 문제 풀기

by 정_나우 2022. 4. 12.

Ros상에서 cartpole을 구현하고 이 문제를 해결하기 위해 dqn을 적용해보겠습니다.

 

https://github.com/PacktPublishing/Hands-On-ROS-for-Robotics-Programming

 

GitHub - PacktPublishing/Hands-On-ROS-for-Robotics-Programming: Hands-On ROS for Robotics Programming, published by Packt

Hands-On ROS for Robotics Programming, published by Packt - GitHub - PacktPublishing/Hands-On-ROS-for-Robotics-Programming: Hands-On ROS for Robotics Programming, published by Packt

github.com

다음 사이트를 참고했고 chapter11 내용입니다.

 

우선 설치를 하다가 많은 고생을 했으므로 앞으로 이런 일이 일어나지 않도록 예방하기 위해 가상환경을 이용합니다.

wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
chmod 755 Anaconda3-2020.11-Linux-x86_64.sh
./Anaconda3-2020.11-Linux-x86_64.sh

엔터를 계속 꾹 누르고, yes를 입력하다 보면 설치가 끝납니다.

 

그리고

gedit ~/.bashrc

을 입력한 후 맨 밑에

export PATH=~/anaconda3/bin:$PATH 
source ~/anaconda3/etc/profile.d/conda.sh

다음 내용을 넣어줍니다.

 

그리고

conda

를 입력하여 정상적으로 설치되었는지 확인합니다.

 

이제 가상환경을 만들어줍니다.

conda create --name cartpole python=2.7 anaconda
conda activate cartpole

저는 가상환경 이름을 cartpole로 지정하였고, 파이썬 2.7버전을 사용하기 위해 다음과 같이 입력하였습니다.

 

만약 나중에 진행하면서 문제가 생겨 가상환경을 지우고 새로 만든다면

conda env remove --n cartpole

다음과 같은 명령어로 가상환경을 삭제하고 새로 만들어서 진행하면 됩니다.

 


이제 텐서플로와 케라스를 깔아보겠습니다.

ROS는 18.04가 깔려있다는 가정하에 진행하도록 하겠습니다.

(저는 ROS를 가상환경에 설치하지 않고 base에 설치했었는데 가상환경에서도 잘 실행되어 따로 추가 설치는 하지 않았습니다.)

위에서 입력한 명령어로 cartpole이라는 가상환경에서 시작하면 됩니다.

pip install protobuf==3.17.3
pip install gym
conda install tensorflow
conda install keras

pip가 아닌 conda로 텐서플로와 케라스를 설치한 이유는 conda로 설치하면 성능이 더 좋고 pip로 설치했을 때 따로 추가로 설치해줘야 하는 CUDA와 CuDNN 라이브러리들을 conda에서는 알아서 다 깔아주기 때문입니다.

 

그리고 텐서플로와 케라스가 정상적으로 설치되었는지 확인하기 위해

python
import tensorflow as tf
tf.__version__ 

import keras
print(keras.__version__)

를 실행해봅니다. python에서 나오는 단축키는 ctrl+d입니다.

 


그리고 cartpole을 구현하기 위해 필요한 이것저것들을 설치하겠습니다.

cd ~/catkin_ws/src
git clone https://github.com/edowson/openai_ros.git
git clone https://github.com/PacktPublishing/Hands-On-ROS-for-Robotics-Programming
git clone https://github.com/ros-controls/ros_controllers
git clone https://github.com/ros-controls/urdf_geometry_parser
git clone https://github.com/ros-drivers/four_wheel_steering_msgs
sudo apt-get install ros-melodic-map-server
sudo apt-get install ros-melodic-slam-gmapping
sudo apt-get install ros-melodic-move-base
sudo apt install ros-melodic-amcl
cd ..
catkin_make
rosdep install openai_ros

그리고

gedit ~/.bashrc

으로 bashrc를 열어서

source ~/catkin_ws/devel/setup.bash

위 내용을 맨 밑에 넣어줍니다.

 

gedit ~/.ignition/fuel/config.yaml

yaml 파일을 열어서

https://api.ignitionfuel.org 을
https://api.ignitionrobotics.org로 수정

수정해줍니다.

 

이제 실행해봅니다.

roslaunch cartpole_description main.launch
roslaunch cartpole_dqn start_training.launch

다음 두 명령어를 순서대로 입력하면

 

잘 작동합니다!

 

제가 이걸 실행하기까지 발생했던 오류를 해결하는 방법은 다 적어놨는데 다른 오류가 발생했다면 그건 당신의 몫..^^

댓글