硬件平台为戴尔G15,显卡为RTX3060,系统Ubuntu18.04,使用opencv版本为3.4.14并且安装opencv contrib。
1.安装nvidia显卡驱动
首先在bios设置中关闭secure boot,具体的关闭方法根据电脑不同有所区别。
关闭后进入nvidia官网下载显卡驱动。如果你后续要使用pytorch那这里就不建议安装最近的显卡驱动,截至2022年4月12日pytorch只支持到CUDA11.3。显卡驱动版本和CUDA的版本要求在这里查找:Release Notes :: CUDA Toolkit Documentation。我这里经过试错,选择了NVIDIA-Linux-x86_64-495.44版本的驱动,CUDA版本为cuda_11.3.0_465.19.01_linux。
如果之前安装过nvidia显卡驱动,需要完全删除原来的显卡驱动,执行:
sudo apt-get remove --purge nvidia*
然后安装一些必要依赖:
sudo apt-get install dkms build-essential linux-headers-generic
gcc-multilib xorg-dev freeglut3-dev libx11-dev libxmu-dev libxi-dev
libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev gcc-multilib xorg-dev
freeglut3-dev libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa
libglu1-mesa-dev -y
接下来查看系统内是否有多个内核版本,我之前系统内有三个版本的内核,安装完显卡驱动后出现了循环登陆进不去系统的现象。可能是个例,如果不用其他版本的内核,请将不用的内核删除。
接下来禁用Ubuntu自带的显卡驱动:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
添加如下内容:
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
然后执行如下指令更新配置:
$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
$ sudo update-initramfs -u
$ reboot
重启进入系统后执行指令:
lsmod |grep nouveau
终端无输出则说明禁用成功。
接下来将下载好的驱动放到/home/username/目录下,并且执行。显卡驱动换为你下载的版本
sudo chmod 777 NVIDIA-Linux-x86_64-495.44.run
执行sudo init 3进入指令行界面,会出现登陆提示,输入用户名和密码即可登陆。如果屏幕黑屏无任何字符,则ctrl+F4,一样使用用户名密码登陆。登陆成功后
sudo ./NVIDIA-Linux-x86_64-495.44.run --dkms --no-opengl-files
一路回车不用看,安装结束后输入nvidia-smi,此时屏幕会显示你的显卡信息,则说明安安装成功。reboot重启进入系统。
如果遇到重启好几次后都进不去图形界面的问题,则建议在Ubuntu的boot界面选择Ubuntu高级选项,进入恢复模式,然后选择root开头的选项,进去后输入init 3,用你的用户名和密码登陆,卸载nvidia驱动,reboot,接下来应该可以进入图形界面。然后选择尝试其他版本的驱动。
2.安装CUDA,CUDNN
apt-get install gcc-7 g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
CUDA下载完成后执行
注册账号并选择版本:https://developer.nvidia.com/rdp/cudnn-archive
$sudo sh cuda-你下载的版本.run
$ sudo gedit ~/.bashrc
添加如下内容
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
终端输入accept,然后注意,此时CUDA会试图安装显卡驱动,需要取消。在显卡驱动的选项上按空格即可取消。然后等待。此处以我安装的CUDA-11.3版本为例,安装完成后:
cd /usr/local/cuda-11.3/samples/1_Utilities/deviceQuery
make
./deviceQuery
终端有输出并且最后一行显示pass说明CUDA安装好了。
接下来安装CUDNN,我这里下载了四个文件,分别为libcudnn8_8.2.0.53-1+cuda11.3_amd64.deb
libcudnn8-dev_8.2.0.53-1+cuda11.3_amd64.deb
libcudnn8-samples_8.2.0.53-1+cuda11.3_amd64.deb
cudnn-11.3-linux-x64-v8.2.1.32.tgz
前三个文件按照我这里列出来的顺序,分别执行sudo dpkg -i 即可安装成功。按其他教程到这里应该就安装结束了,但是我没有成功,所以下了第四个.tgz文件。解压后
sudo cp cuda/include/* /usr/local/cuda-11.3/include/
sudo cp cuda/lib64/* /usr/local/cuda-11.3/lib64/
sudo chmod +x /usr/local/cuda-11.3/include/cudnn.h
sudo chmod +x /usr/local/cuda-11.3/lib64/libcudnn*
到这里CUDA和cudnn的安装就结束了。
3.安装ROS Gazebo mavros px4
添加源: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 update
安装ROS melodic:sudo apt install ros-melodic-desktop-full
sudo pip install rosdepc
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt install python-catkin-tools
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo rosdepc init
rosdepc update
$ mkdir catkin_ws
$ cd catkin_ws
$ mkdir src
$ catkin_make
这里没装rosdep的原因是rosdep update很容易失败,干脆换成大佬做的rosdepc,能减少很多困扰。
安装mavros
sudo apt install ros-melodic-mavros ros-melodic-mavros-extras
roscd mavros
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
安装mavros可能会有点慢,需要多等一会。
安装px4
$ sudo usermod -a -G dialout $USER
$ sudo apt-get remove modemmanager
$ sudo apt-get install gcc-arm-none-eabi
$ sudo apt-get install git
$ git clone https://github.com/PX4/Firmware
$ sudo apt-get install ros-melodic-dynamic-reconfigure
$ cd ./Firmware
$ git checkout -b xtdrone/dev v1.11.0-beta1
$ git submodule update --init --recursive
$ bash
$ bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools 这一步可能会由于网络问题而卡住,如果失败就多尝试几次。多次尝试不行后建议手动安装。在/etc/environment和/etc/profile文件中最后一段加入gcc-arm-none-eabi所在路径,具体那哪个我也不确定,建议都修改。(示例:PATH=/opt/gcc-arm-none-eabi-4_8-2014q3/bin:$PATH)手动安装参考此网页:https://blog.csdn.net/weixin_40093087/article/details/79411812修改完成后$ source /etc/profile /etc/environment
$ arm-none-eabi-g++ -v检测是否安装成功,有输出则成功,一般来说不会有问题。
$ sudo apt-get install lsb-core
$ sudo apt-get install python-packaging python-toml python-jinja2
libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libignition-math2
接下来执行:
$ sudo gedit ~/.bashrc,在文件最后根据你自己的实际情况写入下列内容
$ source /opt/ros/melodic/setup.bash
$ source ~/catkin_ws/devel/setup.bash
$ source ~/Firmware/Tools/setup_gazebo.bash ~/Firmware ~/Firmware/build/px4_sitl_default
$ export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware
$ export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware/Tools/sitl_gazebo
进入~/Firmware,执行make px4_sitl gazebo,应该一切顺利进入gazebo仿真环境。
4.安装opencv
在opencv官网下载源码,如果需要contrib拓展包也一并下载并解压缩,如果你和我一样用的opencv3.4.14,还需要下载ippicv_2020_lnx_intel64_20191018_general.tgz,这个压缩包不需要解压缩。其他更低版本的opencv需要其他版本的这个压缩文件。然后新建一个文件夹,把之前解压缩出来的文件夹和这个压缩包,三个文件放在一起。接着安装必要依赖
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
$ sudo apt-get install cmake-qt-gui
我这里把三个文件都放到了~/opencv3文件夹下,后面的路径操作都以此为例
$ sudo gedit /home/usrname/opencv3/opencv-3.4.14/3rdparty/ippicv/ippicv.cmake
找到"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"这一行,注释掉。改成"file:///home/usrname/opencv3/",或者其他你放ippicv那个压缩包的路径。
接着手动下载 face_landmark_model.dat
$ sudo gedit /home/usrname/opencv3/opencv_contrib-3.4.14/modules/face/CMakeLists.txt
找到"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"这一行,注释掉,改成
"file:///home/username/opencv3/opencv_contrib-3.4.14/modules/face/src/"这里的路径是你实际放face_landmark_model.dat的路径。
在https://pan.baidu.com/s/1ihQggYXevvgw7kcMKT8Uvg 提取码:9491这里下载另外的文件(感谢大佬),把解压缩出来的文件全部放进/home/username/opencv3/opencv_contrib-3.4.14/modules/xfeatures2d/src/,然后在/home/username/opencv3/opencv_contrib-3.4.14/modules/xfeatures2d/cmake这里修改文件夹里的两个make文件,在文件中把网址注释掉,改为"file:///home/username/opencv3/opencv_contrib-3.4.14/modules/xfeatures2d/src/",这里还需要检测一下你刚刚下载的文件和这里make文件里的hash值是否一样,不一样则需要修改。一切修改完毕后:
$ cd ~/opencv3/opencv-3.4.14
$ mkdir build
$ cd build
$ cmake-gui ..
初次进入会让你选择编译器,用默认选项就好,native什么的选项。在显示的页面中有几处需要修改,在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变。如果是RELEASE,DEBUG 就删除DEBUG。
在CMAKE_INSTALL_PREFIX中我修改为: /usr/local/opencv3 ,这是opencv的安装路径。单独设置文件夹不会与ros自带的opencv冲突,同时方便卸载。这里可以根据个人需求更改。在OPENCV_EXTRA_MODULES_PATH处,将路径指定到opencv_contrib-3.4.14/modules,不能只选中opencv_contrib-3.4.14。最后在CUDA_TOOLKIT_ROOT_DIR将路径修改为/usr/local/cuda-11.3,BUILD_opencv_world打勾,然后点configure,一切顺利无error的话点generate。
然后在build文件夹中make -j你的cpu核数,然后sudo make install。
sudo gedit /etc/ld.so.conf.d/opencv.conf
/usr/local/opencv3/lib
sudo ldconfig
sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3/lib/pkgconfig
export PKG_CONFIG_PATH
sudo gedit ~/.bashrc,添加:export LD_LIBRARY_PATH=/usr/local/opencv3.4.14/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3.4.14/lib/pkgconfig
opencv3安装完毕
5.配置yolov3
mkdir -p catkin_workspace/src (workspace叫什么都可以)
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git (如果没有SSH密钥,则换成https://github.com/leggedrobotics/darknet_ros.git。)然后手动下载
图片中的yolov2,v2-tiny,v3的权重文件,放入~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights。然后进入~/catkin_ws/src/darknet_ros/darknet_ros/launch,打开darknet_ros.launch,将default="$(find darknet_ros)/config/yolov2.yaml"/>改成default="$(find darknet_ros)/config/yolov3.yaml"/>
cd ..,进入刚刚创建的工作空间目录,
执行catkin_make -DCMAKE_BUILD_TYPE=Release 无报错则说明配置完成
如果出现 nvcc: unsupport xxxxxx compute 30之类的报错,说明当前配置的显卡算力和你的显卡算力不匹配,需要在catkin_自定义工作空间/src/darknet_ros/darknet/Makefile和catkin_自定义工作空间/src/darknet_ros/darknet_ros/CMakeLists.txt中修改算力配置,对于RTX3060,将原来的所有算力配置删除,分别改为
ARCH= -gencode arch=compute_86,code=[sm_86,compute_86]
和
-O3 -gencode arch=compute_86,code=sm_86cd