文章信息
题目:Towards Optimally Decentralized Multi-Robot Collision Avoidance via Deep Reinforcement Learning
作者:P Long,T Fan,X Liao,W Liu,H Zhang,J Pan
来源:2018 — ICRA
原文链接:https://arxiv.org/abs/1709.10082
原始代码链接:https://github.com/Acmece/rl-collision-avoidance
本文基于原始的代码进行了部分改进,以便在配置低一些的电脑上成功运行模型训练程序,百度网盘链接如下:
链接: https://pan.baidu.com/s/1rJnBML3A1Vo5UsXUGZFeGw?pwd=hurg 提取码: hurg
准备工作
1. 环境需求
- Python2.7
- ROS kinetic(对应Ubuntu16.04)
- mpi4py
- Stage
- Pytorch (=1.4.0)
- torchversion (=0.5.0)
- cudatoolkit (=9.2)
2. Anaconda环境搭建
可以使用程序包中提供的yaml文件进行环境的克隆,在py36.yaml
所在的文件中打开终端,输入指令:
conda env create -f py36.yaml
pip install -r 27.txt
但是,使用这种方法进行环境克隆大概率会报错,由于1.4.0版本的Pytorch和0.5.0版本的torchversion过于古老,因此anaconda默认的安装源早已不再维护这两个文件,而懒狗Anaconda则会以“找不到对应文件版本”为理由不去建立我们需要的虚拟环境。对于这种问题,我的解决方法如下:
- 删除
py36.yaml
文件的倒数后两行(对应的pytorch和torchversion)并保存 - 运行指令
conda env create -f py36.yaml
,此时,名为"rlpy2"的虚拟环境将会被建立 - 使用指令
conda activate rlpy2
进入新建立的虚拟环境 - 通过指定源的方式安装刚才欠下的两个文件,具体指令如下,默认下载GPU版的pytorch
pip install torch==1.4.0 torchvision==0.5.0 -f https://download.pytorch.org/whl/torch_stable.html
- 控制台输入
python
,进入python编辑器内,验证Pytorch是否被成功安装
(rlpy2) ygq@pc:python
Python 2.7.18 |Anaconda, Inc.| (default, Jun 4 2021, 14:47:46)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.4.0+cu92'
>>> print(torch.cuda.is_available())
True
3. 配置ROS空间
配置ROS空间可以按照以下终端指令来运行
mkdir -p catkin_ws/src
cp stage_ros-add_pose_and_crash catkin_ws/src
cd catkin_ws
catkin_make
source devel/setup.bash
需要注意的是,在进行第四步catkin_make
前,要先对catkin_ws 文件里的部分路径进行更改,否则直接运行程序会导致报错,具体操作方式如下:
- 查看catkin_ws 文件所在的路径
- 进入工作空间下的build文件夹,打开Makefile文件,将下图中的那两个路径改成现在的
- 删除build文件夹下CMakeCache.txt 和 src 文件夹下的CMakeLists.txt
- 重新进行
catkin_make
运行程序
1. 启动ROS与环境
roscore
cd catkin_ws
source devel/setup.bash
rosrun stage_ros_add_pose_and_crash stageros -g ../worlds/stage1.world
(-g 表示是否显示界面,删除-g则会出现GUI界面)
若前面未出现问题的话,此时会出现如图所示的场景:
2. 运行强化学习算法
在工程所在文件夹打开新的终端,并运行如下指令:
conda activate rlpy2
mpiexec -np 5 python ppo_stage1.py
这里有可能会因缺失模块而出现报错,因为前面在克隆环境时,有些历史悠久的模块无法被安装。解决方法是根据报错提示(traceback)来手动下载,补全缺少的模块:
博主在运行程序时,缺少了rospkg、yaml 两个包,因此使用如下指令进行补充安装
pip install pyyaml
sudo pip install --target=/opt/ros/kinetic/lib/python2.7/dist-packages rospkg
其他缺少的模块亦可使用pip或者conda来安装,使用科学上网的方法可以有效解决下载境外资源超时的问题。
当所有模块都补全以后,程序便可以正常运行。此时控制台会显示训练信息
场景中的小车也开始运动
算法每隔一段时间就会自动保存当前阶段的训练结果,并存储在名为Policy的文件夹中。
第二个场景与算法的运行方式同理,请大家自行研究。
至此,算法成功运行。