一.  前言

人人为我,我为人人。

安装版本:

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