之前写过一篇博客:详解ubuntu 16.04安装gym-gazebo,这篇博客详细介绍了如何在ubuntu 16.04环境下安装gym-gazebo,从而对turtlebot进行强化学习导航。由于其中ros中python是2.7版本的,而安装gym-gazebo需要安装gym包,它是python3版本的,两个python版本不一致,所以安装起来比较复杂,具体参加我的那篇博客。
最近,我发现了一个软件包,其可以避免安装gym,从而可以不用python3,这样就可以全程使用python2.7来进行强化学习了,不用担心python版本兼容问题了,安装过程我主要参考了这篇博客: ROS开发笔记(8)——Turtlebot3 Gazebo仿真环境下深度强化学习DQN(Deep Q-Learning)开发环境构建,整个安装过程非常简单。
接下来,我来讲解一下具体的安装步骤,首先假设你已经安装好ROS(kinetic版本)、gazebo(7版本)以及anoconda(2和3都可以)。备注:我是在用的anoconda3.
软件安装
首先,利用anoconda创建虚拟环境 tensorflow
conda create -n tensorflow pip python=2.7
接着激活虚拟环境
conda activate tensorflow
在虚拟环境中相继安装ROS包、tensorflow、keras和画图工具包(注意,都在conda虚拟环境中安装),这里我安装的tensorflow是gpu版本,注意tensorflow需要和keras版本相匹配。
pip install -U rosinstall msgpack empy defusedxml netifaces
pip install --ignore-installed --upgrade https://download.tensorflow.google.cn/linux/gpu/tensorflow_gpu-1.8.0-cp27-none-linux_x86_64.whl
pip install keras==2.1.6
pip install pyqtgraph
conda install pyqt
接下来安装cuda和cudnn(注意cuda和cudnn版本也需要匹配,版本对应关系参考:tensorflow各个版本的CUDA以及Cudnn版本对应关系)
conda install cudatoolkit==9.0
conda install cudnn==7.1.2
下载编译源码包
接下来下载并编译源码包(下载源码包可能比较慢,慢的话就用我给的gitee上的4个链接代替):
mkdir -p catkin_ws/src
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_machine_learning.git
#上面的4个git clone比较慢,可以用下面的4个代替
#git clone https://gitee.com/zthcool/turtlebot3_msgs.git
#git clone https://gitee.com/zthcool/turtlebot3.git
#git clone https://gitee.com/zthcool/turtlebot3_simulations.git
#git clone https://gitee.com/oliver_zxh/turtlebot3_machine_learning.git
cd ~/catkin_ws && catkin_make
然后在.bashrc文件中添加:
source /home/zpp/catkin_ws/devel/setup.bash
export TURTLEBOT3_MODEL=burger
设置参数并运行
设置参数:
打开源码文件 turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.gazebo.xacro,修改一下两处:
<xacro:arg name="laser_visual" default="false"/> # 如果想看到激光扫描线,设置成 'true'
<scan>
<horizontal>
<samples>360</samples> # 修改成24
<resolution>1</resolution>
<min_angle>0.0</min_angle>
<max_angle>6.28319</max_angle>
</horizontal>
</scan>
运行程序:
打开一个终端执行如下命令开启仿真环境:
roslaunch turtlebot3_gazebo turtlebot3_stage_1.launch
再打开一个终端执行如下命令启动强化学习节点:
conda activate tensorflow
roslaunch turtlebot3_dqn turtlebot3_dqn_stage_1.launch
再打开第3个终端并执行如下命令进行数据图形显示:
conda activate tensorflow
roslaunch turtlebot3_dqn result_graph.launch
问题及解决办法
在参考原博客ROS开发笔记(8)——Turtlebot3 Gazebo仿真环境下深度强化学习DQN(Deep Q-Learning)开发环境构建安装的过程中,遇到了一些问题,在此记录一下,按照我上面的教程应该不会遇到问题了。
Q1:运行roslaunch turtlebot3_gazebo turtlebot3_stage_1.launch时出现以下错误:
Invalid <arg> tag: environment variable 'TURTLEBOT3_MODEL' is not set.
A1:在.bashrc文件最后添加:
export TURTLEBOT3_MODEL=burger
Q2:运行roslaunch turtlebot3_dqn turtlebot3_dqn_stage_1.launch时出现以下错误:
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory Failed to load the native TensorFlow runtime
A2:原因是没有安装cuda,在conda虚拟环境中安装cuda和cudnn
conda install cudatoolkit==9.0
conda install cudnn==7.1.2
Q3:运行roslaunch turtlebot3_dqn turtlebot3_dqn_stage_1.launch时出现以下错误:
rospy.service.ServiceException: transport error completing service call: receive_once[/controller_manager/load_controller]: DeserializationError cannot deserialize: unknown error handler name 'rosmsg
A3:在普通环境(不是conda虚拟环境)下执行
sudo apt-get install ros-kinetic-rosmsg
sudo apt-get install ros-kinetic-genpy
Q4:运行roslaunch turtlebot3_dqn result_graph.launch时出现以下错误:
ModuleNotFoundError: No module named 'PyQt5.QtWidgets'
A4:在conda虚拟环境下执行
conda install pyqt