在装机之前需要将电脑中的重要资料备份,以防误删。U盘启动盘使用Universal USB Installer,这是个免安装软件,可以简单制作多种系统启动盘,包括ubuntu、windows等,不过需要先下载对应的iso文件。具体制作过程不赘述。
为了规避比较复杂的分区配置,直接在安装步骤中选择“Erase disk and install Ubuntu”,这样启动盘会自己做分区,省得麻烦。
这些可以直接在 系统设置—文本输入/语言支持 中解决,这里也不过多叙述。注意,输入法的安装中不要选iBus,建议选fcitx。
网上的很多教程都是在命令行里疯狂操作,搞得很复杂,但实际上只要下载谷歌的deb文件,如 google-chrome-stable_current_amd64.deb 之后,运行如下命令安装即可:
sudo dpkg -i google-chrome-stable_current_amd64.deb
驱动版本的选择与后续安装的CUDA和cudNN等都有关,如果后续要安装CUDA9.0,那么就用 系统设置—软件和更新—附加驱动—使用NVIDIA binary driver-version384.130来自nvidia-384(专有,tested) 即可,但若要安装CUDA10.0或更高的版本,就需要手动下载符合要求的NVIDIA驱动。首先附上CUDA与NVIDIA驱动版本适配对照表如图1所示(参考CUDA Toolkit Document):
由上图可知,为安装CUDA10.0,需要410.48以上的NVIDIA驱动。
首先,检查现有驱动:
cat /proc/driver/nvidia/version
lsmod | grep nouveau
这说明尚未安装nvidia驱动,且nouveau正在运行。接下来需要禁用nouveau,也就是系统自带驱动:
sudo gedit /etc/modprobe.d/blacklist.conf
在文件末尾添加:
blacklist nouveau
options nouveau modset=0
保存并关闭文件后运行:
sudo update-initramfs -u
此时再度运行:
lsmod | grep nouveau
没有输入就说明禁用成功。此时做一个总的检查,安装NVIDIA之前电脑中显卡与驱动的状态如图3所示:
下载驱动的.run文件并将其移动到~ 路径( 注意,~路径就是用户路径,等同于/home/chandra)下(一般下载之后都是在 下载 文件夹下,这里之所以移动到~路径下,是因为系统汉化后,在禁用lightdm服务时,tty1的界面中无法显示中文,无法进入下载 文件夹):
NVIDIA-Linux-x86_64-410.78.run
安装:
cd ~
sudo chmod a+x NVIDIA-Linux-x86_64-410.78.run
sudo service lightdm stop
sudo ./NVIDIA-Linux-x86_64-410.78.run -no-x-check -no-nouveau-check -no-opengl-files
sudo service lightdm start
注意点一,这里sudo service lightdm stop是禁用桌面服务,之后会黑屏,此时同时按住Ctrl+Alt+F1进入tty1界面就可以运行你想运行的指令了。
注意点二,安装驱动指令后面的3个-no-一定不要忘记,尤其是-no-opengl-files,可以防止循环登录现象。
注意点三,如果出现循环登录现象,需要先将之前安装的额驱动删除,推荐使用 sudo apt-get remove nvidia-*,不推荐 sudo nvidia-uninstall 。
安装完成后,使用reboot重启即可,用如下命令查看:
nvidia-smi
得到如图4所示的结果,说明安装成功:
下载CUDA文件:
cuda_10.0.130_410.48_linux.run
直接运行:
sudo ./cuda_10.0.130_410.48_linux.run
对安装过程中显示的问题作如下答复:
accept
n
y
y
y
[Enter]
y
y
[Enter]
也就是除了不安装驱动(因为上一步我们已经安装好了),其他都是yes和默认路径。安装一会儿后然后报错,如图5所示:
看报错内容应该是少了5个.so文件,于是补装一些环境:
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libl1-mesa-glx libglu1-mesa libglu1-mesa-dev
再次运行 sudo ./cuda_10.0.130_410.48_linux.run 即可成功。
接下来是配置环境变量:
sudo gedit ~/.bashrc
添加3个路径:
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH
最后再输入命令:
source ~/.bashrc
测试CUDA是否安装成功的第一种方法,终端输入nvcc -V,显示如图6所示则说明成功:
测试CUDA是否安装成功的第二种方法,运行CUDA的samples:
cd /usr/local/cuda-10.0/samples/1_Utilties?deviceQuery
sudo make
./deviceQuery
结果如图7所示,表示CUDA安装成功:
下载与CUDA对应的cuDNN文件:
cudnn-10.0-linux-x64-v7.6.5.32.tgz
接下来是安装cuDNN10.0。cuDNN的安装很简单,就是解压、换路径和改权限:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
这就安装好了,现在检查安装结果,在终端输入:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果出现版本号,就说明安装成功。整个过程如图8所示:
首先下载opencv3.4.2的压缩包,并解压:
unzip opencv-3.4.2.zip
进入解压之后的文件夹,输入cmake --verson查看是否安装cmake,如果不显示版本号,说明没有安装,输入命令安装cmake:
sudo apt-get install cmake
然后安装依赖库:
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
接着就可以编译了,老套路:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j
平时安装时,cmake和make往往是出错最多的地方,不过这一次由于是纯净系统,所以安装过程十分顺利,一次成功。注意,如果电脑卡住,可能是算力不足导致,可将sudo make后的-j删去;同理,如果电脑算力充沛,可改为-j4或者-j8等。
编译通过后不要忘了安装:
sudo make install
至此编译安装完毕,接下来配置路径,将openCV的库添加到路径,从而可以让系统找到:
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开的是一个空文件,在文件末尾添加路径:
/usr/local/lib
保存并关闭文件,执行如下命令使得刚才的配置路径生效:
sudo ldconfig
接下来修改bash.bashrc文件:
sudo gedit /etc/bash.bashrc
在文件末尾添加两句:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存并关闭文件,执行如下命令使得配置生效:
source /etc/bash.bashrc
并更新数据库文件:
sudo updatedb
到这里所有的配置都已经结束。下面检查安装是否成功。方法一是运行我之前的博客SLAM学习 | 判断所安装的openCV版本中给出的例程,得到图9所示的结果:
方法二是到如下路径中:
opencv/samples/cpp/example_cmake
编译该例程,出现图10琐事结果并打开摄像头、左上角显示hello opencv:
至此可确定openCV3.4.2安装成功。
这一部分参考我之前的博客SLAM学习 | 使用小觅相机MYNTEYE-S1030收集数据集即可。由于openCV安装成功,且各版本皆适配,所以也是没有报错,一次成功。
在CUDA、cuDNN、openCV都成功安装的前提下,yolov4的安装配置非常简单,也不会报什么错(所以说前面的安装很重要)具体流程如下。
首先当然是下载源码:
git clone https://github.com/AlexeyAB/darknet
然后修改Makefile文件,若干行改为:
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
然后直接在命令行中输入:
make
编译结束后,会生成一个ubuntu系统下的可执行文件darknet,运行:
./darknet
如果编译成功,会出现:
usage: ./darknet
下面就是测试。首先是图片:
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
然后是视频:
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights YOUR_VIDEO_PATH -thresh 0.6
视频检测的某一帧结果如图11所示:
命令行中会显示物体的类别、帧率等相关信息,如图12所示:
至此,yolov4安装成功。
这里的安装主要参考了这篇博客 Ubuntu16.04系统运行vins mono(完整版环境配置及编译)的内容,这里把主要的命令记录下来,防止忘记:
$sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) 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 update
$sudo apt-get install ros-kinetic-desktop-full
$sudo rosdep init
$rosdep update
这里需要注意的是,原博客说“这一步通常会失败,因为网站的原因,直接跳过即可”,我在操作过程中确实遇到了这样的报错,开始也是跳过,但是后来这个错又会跳出来,参考了另一篇博客得以解决。继续:
$echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$source ~/.bashrc
$sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
到这里ros已经安装并配置完成,开始测试:
roscore
如果安装成功,会显示如图13所示界面:
接下来是小乌龟测试,再开启两个终端,并分别输入两条命令:
$rosrun turtlesim turtlesim_node
$rosrun turtlesim turtle_teleop_key
这样就可以用方向键控制小乌龟的移动了,效果如图14所示:
上文我提到的 $sudo rosdep init $rosdep update 的报错就是在乌龟测试这里出现的,解决措施摘抄如下:
输入
sudo rosdep init
出现报错
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
接着输入
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
出现
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update
接着输入
rosdep update 此处不可以加sudo
即可解决
ORB-SLAM2的安装有两种,既可以直接安装,也可以在ROS中安装。相关内容参考我之前写的博客:
SLAM学习 | Ubuntu16.04 下从零开始配置环境并运行ORB-SLAM2(TUM, ROS+USB, 自制数据集)
(以后再更)