一. 前言
人人為我,我為人人。
安裝版本:
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
原創博文,轉載請標明出處。
