目录
前言
安装依赖环境
基本要求
ubuntu 16.04安装
ROS Kinetic安装
gazebo 7.16安装
gazebo_ros_pkg安装
anoconda3安装
gym安装
gym_gazebo安装
ROS部分
conda部分
快速入手
问题汇总
总结
首先说明,本人使用官方给的教程在ubuntu 16.04上安装gym-gazebo装了好多天都失败了,为此重装系统估计有十次,网上的安装教程跟着走也是不行,最终好不容易装成功了一次,不禁感叹gym-gazebo真特么难装。所以,为了对得起这几天的辛苦与努力,也为了后来人能够不走我的老路,因此,本篇文章决定仔细讲解gym-gazebo的安装教程。需要说明的是,本次安装是在一个全新的ubuntu 16.04系统上安装的,因为重装了系统好多次终于试成功了。
本次能够成功安装gym-gazebo,还得感谢这个github:https://github.com/zhaolongkzz/gym_gazebo_kinetic。这个github链接是作者在官方文件上做了一定的修改,方便ubuntu 16.04安装,我能够安装成功要感谢这个github的作者,不过安装过程中还是遇到了一些问题,我们待会慢慢说。
为什么gym-gazebo这么难装,个人觉得主要原因在于gym-gazebo需要gym这个python库,而gym要求python版本为3.5+,而gazebo需要依赖于ROS,而ROS中的python是python 2.7,这中间往往会产生冲突与矛盾,导致不兼容。这么多天的安装经验告诉我,安装的时候ROS部分的一定要在普通的环境下安装,而python的部分我们都统一安装在conda创建的虚拟环境中。这样应该可以避免conda中一些包和ros中的依赖干扰。而且我们最好统一使用pip或者pip3,不要一会pip install,一会pip3 install,具体原因我目前也不是太清楚,而且如果混着用会不会出问题其实我也没有试过,反正当初按照官方教程,有的地方pip,有的地方pip3,我没装成功,后来统一使用pip和pip3也失败了。因此,本篇博客安装如果用到pip的话都是使用pip而不是pip3,也许pip3也是可行的,不过我没有试过,如果有人试过了并且成功了,可以告诉我一声。另外,有一些教程上面python的命令他们会使用python3,本文也是出于谨慎,全部选择python,而不是python3。
例如,执行circuit2_turtlebot_lidar_qlearn.py,我是在conda环境下使用
pyhton circuit2_turtlebot_lidar_qlearn.py
补充说明:上述我的选择都是基于谨慎选择的,都是比较统一的,我怕如果一会pip,一会pip3,或者一会python,一会python3,会造成干扰,但具体是否会发生干扰,我目前也还不太清楚。
这个没啥好说的,网上教程多的是,而且我相信都来安装gym-gazebo了,ubuntu系统肯定是有的。
这里需要说明的是,为了后续安装能够快一点,我们最好把软件源换一下,具体参考链接:
https://www.cnblogs.com/hello-/articles/11151038.html
ros的安装其实也没啥好说的,按照官方的链接来就行。官方链接如下:
http://wiki.ros.org/kinetic/Installation/Ubuntu
需要注意的就是,我们最好一开始使用国内的清华镜像,否则ROS安装会很慢。具体链接为:
http://wiki.ros.org/ROS/Installation/UbuntuMirrors
另外,我们最好安装ros-kinetic-desktop版本,而不要安装ros-kinetic-desktop-full版本,ros-kinetic-desktop-full版本会自动安装gazebo7.0,我没有实测过行不行,反正我在电脑上安装gazebo 7.16是可以的。这里安全起见,安装ros-kinetic-desktop版本。
另外,如果你在step4的第一步sudo rosdep init出现问题,你就多试几次就行了。如果你在step4的第二步rosdep update,遇到error,试试下面这个链接的解决办法,如果还是不行,多试几次就行,个人感觉是网速问题:
https://blog.csdn.net/b2zcy/article/details/87986904
下面来汇总一下:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install ros-kinetic-desktop
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
gazebo的安装也很简单,参照官网的step by step方法,不要按照one-liner方法,one-liner方法会默认安装最新版本的gazebo。由于gazebo也许是因为国内没有镜像,安装的非常缓慢,我在家怎么也得1-2小时吧,慢慢等吧,目前没有找到比较好的解决方法。以下是链接:
http://gazebosim.org/tutorials?cat=install&tut=install_ubuntu&ver=7.0
以下是我汇总的步骤:
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install gazebo7
sudo apt-get install libgazebo7-dev
此时,gazebo7.16就安装好了,可以在终端输入
gazebo
测试一下,此时gazebo应该能打开。
gazebo_ros_pkg是ROS与gazebo的桥梁,只有通过这个包,ROS和gazebo才能相互通讯。实际上,上文的github链接里并没有这个步骤,不过我还是在这里装一下吧。其实那个github是在gym_gazebo_kinetic里面的gym_ws工作空间里有这个包。安装这个包很简单,只要一句命令:
sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control
anoconda3安装很简单,参照网上教程。需要注意的是,如果我们安装的时候设置anoconda初始化环境的话,其会在.bashrc文件中添加类似下面的代码:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/zpp/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/zpp/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/zpp/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/zpp/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
这段代码会导致我们我们每次打开终端都会自动进入conda环境,这通常不是我们所希望的,因此建议把.bashrc文件中的这段代码删去,并在文件尾部加入下面一段代码:
alias condaenv='. /home/zpp/anaconda3/etc/profile.d/conda.sh;export PATH="/home/zpp/anaconda3/bin:$PATH"'
这样以后我们在终端只要输入condaenv就会进入到conda环境,否则会进入到普通的环境。注意,上面的路径中的用户名要改成你自己的。
这个稍后再说,在此之前,你应该把我上面的基本要求都安装完毕了。
注意:这部分代码请在普通环境下执行,千万不要在conda环境下执行,否则可能会出问题。
安装ROS的一些依赖:
sudo apt-get install \
cmake gcc g++ qt4-qmake libqt4-dev \
libusb-dev libftdi-dev \
ros-kinetic-octomap-msgs \
ros-kinetic-joy \
ros-kinetic-geodesy \
ros-kinetic-octomap-ros \
ros-kinetic-control-toolbox \
ros-kinetic-pluginlib \
ros-kinetic-trajectory-msgs \
ros-kinetic-control-msgs \
ros-kinetic-std-srvs \
ros-kinetic-nodelet \
ros-kinetic-urdf \
ros-kinetic-rviz \
ros-kinetic-kdl-conversions \
ros-kinetic-eigen-conversions \
ros-kinetic-tf2-sensor-msgs \
ros-kinetic-pcl-ros \
ros-kinetic-navigation
安装本代码的依赖:
# Failed to find libusb
sudo apt-get install libusb-dev
# ftdi.h: No such file or directory
sudo apt-get install libftdi-dev
sudo apt-get install ros-kinetic-sophus
sudo apt-get install ros-kinetic-ar-track-alvar-msgs
sudo apt-get install ros-kinetic-rqt-joint-trajectory-controller
注意,这部分一定要在conda环境下执行。
首先,打开终端,输入condaenv,进入conda环境(因为之前在.bashrc文件中添加了condaenv别名,上文有提到)。为了能够让conda下载快一些,我们现在最好添加国内的下载通道,在终端一次输入下面三句命令,这样conda下载就快了。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
详见:https://www.cnblogs.com/Christina-Notebook/p/10273195.html
另外,后续我们也会用pip安装包,为了pip install快一些,我们在home目录下创建.pip文件夹,在该文件夹里创建文件pip.conf,在该文件里添加下面一段:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
详见:https://blog.csdn.net/mp624183768/article/details/81392435
好了,接下来创建conda的虚拟环境吧。
在终端输入下述命令,创建虚拟环境work。
conda create -n work python=3.5
注意,在上文给的github链接中,其创建的是python2.7的虚拟环境,实测发现这样是有问题的,因为后面要安装的gym要求python版本为3.5+,所以这里要创建python 3.5的环境。
接下来,输入下述命令激活刚刚创建的虚拟环境。
conda activate work
接下来安装gym和gym_gazebo
# install gym
git clone https://github.com/openai/gym.git
cd gym
pip install -e .
# install gym-gazebo
git clone https://github.com/zhaolongkzz/gym_gazebo_kinetic
cd ~/gym_gazebo_kinetic
pip install -e .
注意,如果你git clone很慢的话,可以使用gitee,参考该链接:https://blog.csdn.net/xy_zhangchn/article/details/81558144?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task或者下载我给的百度网盘文件也可。
接下来,继续在conda环境下安装一些python库,否则后续代码会有问题。
conda install numpy matplotlib
pip install rospkg catkin_pkg
pip install defusedxml
conda install scikit-image
pip install netifaces
其实,说实话,我也不是很清楚上面为什么一会用conda install ,一会又pip install,反正我照着做安装是可以的。另外,再次强调,这部分务必在conda环境下执行。
至此,该装的也已经装的差不多了。
现在,我们就可以快速入手了。不过,现在还不能运行强化学习的程序,我们先要编译一下源码包,主要是ROS的一些源码包。在终端输入下述命令,注意,在普通环境输入,不要在conda环境下执行该命令。
cd ~/gym_gazebo_kinetic/gym_gazebo/envs/installation
bash setup_kinetic.bash
cd ~/gym_gazebo_kinetic/gym_gazebo/envs/installation
bash turtlebot_setup.bash
有一点需要说明一下,主要是setup_kinetic.bash这个文件,github中该文件内容如下:
#!/bin/bash
if [ -z "$ROS_DISTRO" ]; then
echo "ROS not installed. Check the installation steps: https://github.com/erlerobot/gym#installing-the-gazebo-environment"
fi
program="gazebo"
condition=$(which $program 2>/dev/null | grep -v "not found" | wc -l)
if [ $condition -eq 0 ] ; then
echo "Gazebo is not installed. Check the installation steps: https://github.com/erlerobot/gym#installing-the-gazebo-environment"
fi
source /opt/ros/kinetic/setup.bash
# Create gym_ws
ws="gym_ws"
if [ -d $ws ]; then
echo "Error: gym_ws directory already exists" 1>&2
fi
src=$ws"/src"
mkdir -p $src
cd $src
catkin_init_workspace
# Import and build dependencies
cd ../../gym_ws/src/
vcs import < ../../gazebo_ros_kinetic.repos
cd ../
#catkin_make --pkg mav_msgs
#source devel/setup.bash
touch src/joystick_drivers/spacenav_node/CATKIN_IGNORE
touch src/joystick_drivers/wiimote/CATKIN_IGNORE
touch src/kobuki_desktop/kobuki_qtestsuite/CATKIN_IGNORE
catkin_make
bash -c 'echo source `pwd`/devel/setup.bash >> ~/.bashrc'
echo "## ROS workspace compiled ##"
# add own models path to gazebo models path
if [ -z "$GAZEBO_MODEL_PATH" ]; then
bash -c 'echo "export GAZEBO_MODEL_PATH="`pwd`/../../assets/models >> ~/.bashrc'
exec bash #reload bashrc
fi
echo "finish setup_kinetic!"
其中,
vcs import < ../../gazebo_ros_kinetic.repos
这句命令会将gazebo_ros_kinetic.repos文件中对应的各个URL中下载对应的源码包到src目录,实际上我运行
bash setup_kinetic.bash
的时候,卡在这条命令下面好久,原因就是他要到各个网站上下载源码包,总共有28个包,下载特别慢,可能是外网的原因吧,如果你等不急的话,我后面会将这个28个源码包上传网盘,供大家下载。
另外,该bash文件里的catkin_make命令,会对我们下载的源码包进行编译,编译的时候会报错,报错如下:
Traceback (most recent call last):
File "/home/zpp/gym_gazebo_kinetic/gym_gazebo/envs/installation/gym_ws/src/hector_gazebo/hector_gazebo_thermal_camera/cfg/GazeboRosThermalCamera.cfg", line 5, in
from driver_base.msg import SensorLevels
ImportError: No module named msg
这个时候我们应该在setup_kinetic.bash文件的catkin_make上一行添加
catkin_make -DCATKIN_WHITELIST_PACKAGES="driver_base"
但是实际运行的时候我发现,这句命令会导致后面只编译driver_base包,即使后面有catkin_make也不行。后来我查了一下,原来
DCATKIN_WHITELIST_PACKAGES选项具有记忆功能,会导致后续的catkin_make命令仍然只编译这个包。所以我们要将下面的catkin_make改为
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
这样就可以清除catkin_make的记忆功能,并且会把工作空间中的所有源码包都编译一遍。以下是我修改过的setup_kinetic.bash文件。
#!/bin/bash
if [ -z "$ROS_DISTRO" ]; then
echo "ROS not installed. Check the installation steps: https://github.com/erlerobot/gym#installing-the-gazebo-environment"
fi
program="gazebo"
condition=$(which $program 2>/dev/null | grep -v "not found" | wc -l)
if [ $condition -eq 0 ] ; then
echo "Gazebo is not installed. Check the installation steps: https://github.com/erlerobot/gym#installing-the-gazebo-environment"
fi
source /opt/ros/kinetic/setup.bash
# Create gym_ws
ws="gym_ws"
if [ -d $ws ]; then
echo "Error: gym_ws directory already exists" 1>&2
fi
src=$ws"/src"
#mkdir -p $src
cd $src
catkin_init_workspace
# Import and build dependencies
cd ../../gym_ws/src/
#vcs import < ../../gazebo_ros_kinetic.repos
cd ../
#catkin_make --pkg mav_msgs
#source devel/setup.bash
touch src/joystick_drivers/spacenav_node/CATKIN_IGNORE
touch src/joystick_drivers/wiimote/CATKIN_IGNORE
touch src/kobuki_desktop/kobuki_qtestsuite/CATKIN_IGNORE
catkin_make -DCATKIN_WHITELIST_PACKAGES="driver_base"
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
#catkin_make
bash -c 'echo source `pwd`/devel/setup.bash >> ~/.bashrc'
echo "## ROS workspace compiled ##"
# add own models path to gazebo models path
if [ -z "$GAZEBO_MODEL_PATH" ]; then
bash -c 'echo "export GAZEBO_MODEL_PATH="`pwd`/../../assets/models >> ~/.bashrc'
exec bash #reload bashrc
fi
echo "finish setup_kinetic!"
相较于原文件,我把mkdir -p $src这句注释了,vcs开头的那块注释了,还有catkin_make那个地方,其他的和原文件一模一样。
我的建议是如果你下载28个源码包很慢的话,直接按我给的百度网盘链接下载,直接将里面的gym_ws包拷贝到~/gym_gazebo_kinetic/gym_gazebo/envs/installation路径下,然后执行我修改过的setup_kinetic.bash文件。执行该文件会提示
Error: gym_ws directory already exists
这个没有关系,因为我们本来就是拷贝的gym_ws文件夹。
上面的语句都执行完了,.bashrc文件最后几行应该类似于这样
现在,.bashrc文件相较于最原始的.bashrc文件应该总共多了以下几行:
下面就可以运行代码啦,运行过程中有可能出现一些问题,我将在后面的问题汇总里面一一说明。以下是正常的运行步骤。
打开一个终端,依次输入
condaenv
conda activate work
cd gym_gazebo_kinetic/examples/turtlebot
python circuit2_turtlebot_lidar_qlearn.py
程序正常执行的效果应该为:
接下来,打开一个新的终端,输入
cd gym_gazebo_kinetic/gym_gazebo/envs/installation/
source turtlebot_setup.bash
export GAZEBO_MASTER_URI=http://localhost:12346
gzclient
此时,应该可以看到gazebo中turtlebot开始动了,激动啊!!!终于成功了!!!
接下来,我们可以再开一个终端,输入
condaenv
conda activate work
cd gym_gazebo_kinetic/examples/utilities
python display_plot.py
可以看到目前的一些训练情况,主要是目前的累计的奖励值。
好了,基本这就是完整的流程了,接下来汇总一下安装过程中遇到的各种问题。
Q1:执行bash setup_kinetic.bash的时候,提示以下错误
Traceback (most recent call last):
File "/home/zpp/gym_gazebo_kinetic/gym_gazebo/envs/installation/gym_ws/src/hector_gazebo/hector_gazebo_thermal_camera/cfg/GazeboRosThermalCamera.cfg", line 5, in
from driver_base.msg import SensorLevels
ImportError: No module named msg
A1:在setup_kinetic.bash文件的catkin_make上一行添加
catkin_make -DCATKIN_WHITELIST_PACKAGES="driver_base"
这个问题上文已经讲过,另外注意DCATKIN_WHITELIST_PACKAGES具有记忆功能,会导致后面只编译这个包,解决办法上文已说过。
Q2:运行 python circuit2_turtlebot_lidar_qlearn.py时出现(奇怪的是,我在之前的一个电脑上没出现这个问题)
/home/zpp/anaconda3/envs/work/lib/python3.5/site-packages/matplotlib/font_manager.py:280: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
'Matplotlib is building the font cache using fc-list. '
段错误 (核心已转储)
然后以后每次执行都是提示段错误
A2:应该是conda给我们安装的matplotlib库版本不对,在conda环境下输入(另一台电脑没出现这个问题)
pip install --upgrade matplotlib
Q3:Q2的问题解决以后,再运行 python circuit2_turtlebot_lidar_qlearn.py提示
Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
A3:在conda环境下输入
conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl
上述命令执行以后,应该是卸载了mkl库,导致了一些包的缺失,只要按照提示缺什么就安装什么就行了。我的是依次提示缺少six、pyparsing、cycler、dateutil,只要输入
conda install six
conda install pyparsing
conda install cycler
conda install python-dateutil
Q4:执行python circuit2_turtlebot_lidar_qlearn.py提示
ImportError: No module named cv2
A4:这种情况通常是ros路径下的cv2.so的问题,我们可以输入下述命令将cv2.so删除
sudo rm /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so
一般这样问题就解决了,如果还是不行,在conda环境下执行
conda install opencv-python
如若不行,请改为(注意这里是pip3,不知道为啥pip好像不行,也可以试试,不行的话只要pip uninstall对应的包即可)
pip3 install opencv-python
Q5:执行python circuit2_turtlebot_lidar_qlearn.py提示
from numpy.lib.arraypad import _validate_lengths
ImportError: cannot import name _validate_lengths
A5:需要升级scikit-image,conda环境下输入
pip install --upgrade scikit-image
Q6:执行python circuit2_turtlebot_lidar_qlearn.py提示
[spawn_turtlebot_model-3] process has died [pid 22795, exit code 1, cmd /home/zpp/gym_gazebo_kinetic/gym_gazebo/envs/installation/gym_ws/src/gazebo_ros_pkgs/gazebo_ros/scripts/spawn_model -unpause -urdf -param robot_description -model mobile_base __name:=spawn_turtlebot_model __log:=/home/zpp/.ros/log/fac134ea-6ea1-11ea-bacb-e470b8e684d0/spawn_turtlebot_model-3.log].
log file: /home/zpp/.ros/log/fac134ea-6ea1-11ea-bacb-e470b8e684d0/spawn_turtlebot_model-3*.log
A6:这是gym_gazebo_kinetic/gym_gazebo/envs/installation/gym_ws/src/gazebo_ros_pkgs/gazebo_ros/scripts路径下的spawn_model的问题,将该文件的首行的
#!/usr/bin/env python
改为
#!/usr/bin/env python2
即可,我个人感觉是这个py文件内部import rospy等ros的库,应该按python2来执行,因为ROS就是基于python2.7的。而我们是在conda环境下的python 3.5中执行,会导致错误,这里强行让他按照python2执行。具体是否是这个原因我尚不得知,我也是瞎试试出来的。另外,如果你直接按我给的gym_ws文件,我已经做了修改,应该不会遇到这个问题。
Q7:执行python display_plot.py提示
AttributeError: module 'gym' has no attribute 'monitoring'
A7:其实仔细研究以下gym软件包,你会发现确实gym中有monitoring,但确实模块不对,我觉得应该是gym版本的问题,和display_plot.py中的代码出现了不一致,其实gym中该有的模块都有,只是可能顺序路径发生了变化。解决办法是在display_plot.py文件的
import gym
的下一行添加
import gym.wrappers
然后将38行的代码修改为
results = gym.wrappers.monitor.load_results(self.outdir)
这样就行了,另外在网盘里,我会提供修改后的display_plot.py文件。
Q8:如果你成功执行了一次,后面又重新执行程序时发生错误,多半是你之前没有将gzserver或者gzclient关闭彻底.错误一般类似下面这个:
[gazebo-1] process has died [pid 21463, exit code 255, cmd /home/zpp/gym_gazebo_kinetic/gym_gazebo/envs/installation/gym_ws/src/gazebo_ros_pkgs/gazebo_ros/scripts/gzserver --verbose -e ode /home/zpp/gym_gazebo_kinetic/gym_gazebo/envs/installation/../assets/worlds/circuit2.world __name:=gazebo __log:=/home/zpp/.ros/log/f4c5e084-6f2a-11ea-8119-e470b8e684d0/gazebo-1.log].
log file: /home/zpp/.ros/log/f4c5e084-6f2a-11ea-8119-e470b8e684d0/gazebo-1*.log
A8:在终端执行
killall gzserver
killall gzclient
Q9:程序执行到最后显示
NameError: name ‘reduce’ is not defined
A9:因为reduce是python2的内置函数,在Python3中放到了 functools 模块下。而我们是在python3.5环境下执行程序的,所以可以在程序开头部分添加
from functools import reduce
Q10:程序运行提示
ImportError: No module named 'numpy.testing.nosetester'
A10:这通常是因为numpy与scipy库版本不兼容所致,在conda环境下依次输入
pip install numpy==1.18
pip install scipy==1.1.0
说实话,gym_gazebo真的很难装,网上的教程大多不是很仔细,本篇教程只讲解最精简的安装教程。另外,安装gym的时候我也没有输入pip install -e .[all]安装其他所有的库,只安装了基本的库。另外,官方教程要求ubuntu 16.04的gazebo的版本为8.1,但是我这里用的7.16是可以的,如果你们想安装gazebo8,也可以试一试,网站还是一样的,只不过在对应的网站选择8.0的就行,我不确定安装gazebo8最后会不会成功。另外,你也可以试着安装mujoco_py库,需要注意的是,务必安装的是1.5版本的,官网给的是2.0版本的,你需要手动选择1.5版本的,因为gym要求mujoco_py要为1.5版本。另外,官网要求的一些库我也没有装,实际测试发现也是可以运行的,例如Theano。如果以后需要的话可以再装。如果你安装过程中遇到其它一些问题,可以发我邮箱,我看看我有没有遇到过,遇到过的话一定为你解答,我的邮箱:[email protected]。安装过程太辛苦了,实在不想后来人继续受此折磨,浪费许多时间。另附百度云链接:链接:https://pan.baidu.com/s/1bq24B8T8oreMNQugwo8E9g
提取码:23lm