一. 前言
人人为我,我为人人。
安装版本:
Ubuntu: 18.04
Autoware: 1.14
Nvidia Driver: recommend
Cuda: 10.0.130_410.48 + Patch
cudnn: 10.0-linux-x64-v7.6.5.32
opencv:3.4.0
caffe:recommend
cmake:3.20.1
百度网盘:https://pan.baidu.com/s/1NXwzxu_W-jpybRn6qdIA5Q 密码: d3lj
二. 安装
1. 安装nvidia driver
(1) 删除ubuntu自带的英伟达显卡驱动程序
卸载英伟达自带显卡驱动:
sudo apt-get remove --purge nvidia*
关闭自带的英伟达显卡驱动:
sudo gedit /etc/modprobe.d/blacklist.conf
在打开的文档最后添加:
blacklist nouveau options nouveau modeset=0
保存退出后运行:
sudo update-initramfs -u
使blacklist生效。
重启电脑后,输入
lsmod | grep nouveau
如果没有输出,说明显卡已经卸载。
选择推荐安装英伟达驱动版本
ubuntu-drivers devices
这里推荐版本为nvidia-driver-460。
在桌面模式下添加英伟达库,并安装驱动
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get install nvidia-driver-460
安装完成后,重启电脑,进入系统后,执行:
nvidia-smi
输出
说明安装成功。
2. 安装CUDA
去网盘下载:cuda_10.0.130_410.48_linux.run,默认下载到Downloads文件夹。
执行
sudo sh cuda_10.0.130_410.48_linux.run
出现说明之后,按Ctrl + C键跳过,会提示是否接受,键入accept。此时,注意:安装第一步会提示是否安装驱动,请一定键入n。之后每一步选择y,当需要确认路径时直接按回车,结束安装。
加入环境变量,键入:
sudo gedit ~/.bashrc
在结尾加入:
export PATH=/usr/local/cuda-10.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
保存、退出、重启。
重启后,验证安装是否成功:
cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery sudo make ./deviceQuery
如果输出提示PASS,那么说明安装成功。
如果需要卸载重装,运行下列命令卸载 cuda
cd /usr/local/cuda/bin sudo ./uninstall_cuda_10.0.pl
3. 安装cuDNN
去网盘下载:cudnn-10.0-linux-x64-v7.6.5.32.tgz,默认路径为Downloads文件夹
解压
tar -xzvf ~/Downloads/cudnn-10.0-linux-x64-v7.6.5.32.tgz
然后将解压内容拷贝到系统目录,并修改访问权限。
sudo cp ~/Downloads/cuda/include/cudnn.h /usr/local/cuda/include sudo cp ~/Downloads/cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
验证cuDNN是否安装成功,去网盘下载:cudnn_samples_v7.tar.gz,并解压
tar -xzvf ~/Downloads/cudnn_samples_v7.tar.gz
将cudnn_samples_v7文件夹拷贝到~目录
cp -r ~/Downloads/cudnn_samples_v7 ~/
进入mnistCUDNN,编译并运行
cd ~/cudnn_samples_v7/mnistCUDNN make clean && make ./mnistCUDNN
如果安装成功,会出现Test passed!
如果提示./mnistCUDNN: error while loading shared libraries: libcudart.so.10.0: cannot open shared object file: No such file or directory
是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,可以自建一个.conf文件(这里建立了cuda.conf),也可以修改其中任意一份conf文件,将lib所在目录写进去。
cd /etc/ld.so.conf.d/ sudo touch cuda.conf sudo gedit cuda.conf
在cuda.conf中添加:
/usr/local/cuda/lib64
然后运行:
sudo ldconfig
如果提示:/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link
说明libcudnn.so.7是一个文件,它本应是一个符号连接。运行
sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.7.6.5 /usr/local/cuda/lib64/libcudnn.so.7
可以解决
4. 安装ROS Melodic
参照ROS WIKI,这里不详述
如果出现在执行
$ sudo rosdep init
出现:
尝试
$ ping raw.githubusercontent.com
如果可以ping通的,于是可以直接访问https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list网址,如下
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
将上述内容拷贝到/etc/ros/rosdep/sources.list.d/20-default.list中。rosdep init的目的就是下载20-default.list文件
这是可以直接运行:
$ rosdep update
如果不能更新,出现timeout的错误,那么将20-default.list中的raw.githubusercontent.com替换为raw.github.com后保存文件,重新执行rosdep update。
5. OpenCV 安装
(1)安装依赖:
$ sudo apt install build-essential git pkg-config libgtk-3-dev $ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev $ sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr libopenblas-dev $ sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev
(2)下载源码
$ mkdir ~/opencv_build && cd ~/opencv_build $ wget https://github.com/opencv/opencv/archive/3.4.0.zip -O opencv-3.4.0.zip $ wget https://github.com/opencv/opencv_contrib/archive/3.4.0.zip -O opencv_contrib-3.4.0.zip $ unzip opencv-3.4.0.zip $ unzip opencv_contrib-3.4.0.zip
用CUDA 10.0以上版本编译opencv3.0以上版本,会报错:找不到dynlink_nvcuvid.h
需要下载:https://developer.nvidia.com/designworks/video_codec_sdk/downloads/v8.2-ga2,解压Video_Codec_SDK_8.2.16.zip
unzip Video_Codec_SDK_8.2.16.zip
在~/Downloads/Video_Codec_SDK_8.2.16/Samples/NvCodec/NvDecoder/找到cuviddec.h,在~/Downloads/Video_Codec_SDK_8.2.16/Samples/NvCodec/NvDecoder/找到nvcuvid.h,将这两个文件拷贝到/usr/local/cuda/include/。
$ sudo cp ~/Downloads/Video_Codec_SDK_8.2.16/Samples/NvCodec/NvDecoder/cuviddec.h /usr/local/cuda/include/ $ sudo cp ~/Downloads/Video_Codec_SDK_8.2.16/Samples/NvCodec/NvDecoder/nvcuvid.h /usr/local/cuda/include/
修改opencv-3.4.0下的modules下的一些头文件:
modules/cudacodec/src/precomp.hpp modules/cudacodec/src/frame_queue.hpp modules/cudacodec/src/cuvid_video_source.hpp modules/cudacodec/src/video_decoder.hpp modules/cudacodec/src/video_parser.hpp
将这些文件的
#if CUDA_VERSION >= 9000 #include <dynlink_nvcuvid.h> #else #include <nvcuvid.h> #endif 改为: #if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000 #include <dynlink_nvcuvid.h> #else #include <nvcuvid.h> #endif
编译,安装
$ cd ~/opencv_build/opencv-3.4.0 && mkdir build && cd build $ cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DINSTALL_PYTHON_EXAMPLES=ON -DINSTALL_C_EXAMPLES=OFF -DOPENCV_EXTRA_MODULES_PATH=/home/leon/opencv_build/opencv_contrib-3.4.0/modules -DPYTHON_EXCUTABLE=/usr/bin/python2.7 -DWITH_CUDA=ON -DWITH_CUBLAS=ON -DDCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DCUDA_ARCH_BIN="6.1" -DCUDA_ARCH_PTX="" -DCUDA_FAST_MATH=ON -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_GTK=ON -DWITH_OPENGL=ON -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCUDA_HOST_COMPILER=/usr/bin/g++-7 -DCUDA_PROPAGATE_HOST_FLAGS=oFF -DCMAKE_CXX_FLAGS="-std=c++11" -DBUILD_TIFF=ON -DBUILD_EXAMPLES=ON .. $ make -j$nproc $ sudo make install
查看opencv版本
$ pkg-config opencv --modversion
6. 安装caffe
(1)caffe相关包
$ sudo apt install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler $ sudo apt install -y --no-install-recommends libboost-all-dev $ sudo apt install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
(2)安装caffe
sudo apt install caffe-cuda
7. 安装autoware 1.14
(1)安装Ubuntu 18.04 依赖
$ sudo apt update $ sudo apt install -y python-catkin-pkg python-rosdep ros-$ROS_DISTRO-catkin $ sudo apt install -y python3-pip python3-colcon-common-extensions python3-setuptools python3-vcstool $ pip3 install -U setuptools
(2)安装eigen3.3.7
$ cd && wget http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz $ mkdir eigen && tar --strip-components=1 -xzvf 3.3.7.tar.gz -C eigen $ cd eigen && mkdir build && cd build && cmake .. && make $ sudo make install $ cd && rm -rf 3.3.7.tar.gz && rm -rf eigen
(3)安装autoware 1.14
建立workspace
$ mkdir -p autoware.ai/src $ cd autoware.ai
下载Autoware 1.14
$ wget -O autoware.ai.repos "https://gitlab.com/autowarefoundation/autoware.ai/autoware/raw/1.14.0/autoware.ai.repos?inline=false" $ vcs import src < autoware.ai.repos
1.14的源码在网盘可以直接下载
安装ROS依赖
$ rosdep update $ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
编译环境
$ AUTOWARE_COMPILE_WITH_CUDA=1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
8. 编译过程中可能产生的错误
(1)calibration_publisher
--- stderr: calibration_publisher CMakeFiles/calibration_publisher.dir/src/calibration_publisher.cpp.o: In function `main': calibration_publisher.cpp:(.text.startup+0x9b4): undefined reference to `cv::read(cv::FileNode const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' collect2: error: ld returned 1 exit status
修改/home/xxx/autoware.ai/src/autoware/utilities/calibration_publisher/CMakeLists.txt
target_link_libraries(calibration_publisher
${catkin_LIBRARIES}
${OpenCV_LIBS} # added
)
修改/home/xxx/autoware.ai/src/autoware/utilities/calibration_publisher/package.xml
<depend>cv_bridge</depend> <depend>image_transport</depend> <depend>tf</depend> <depend>libopencv-dev</depend> # added
原创博文,转载请标明出处。