環(huán)境配置
我們使用阿木實驗室的板載電腦allspark2(arm Orin-NX架構(gòu))+Pixhawk6C實機飛行測試ego-planner,文章尾部附arm QGC安裝教程 && arm機載電腦與Pixhawk6c組合下提高飛控imu頻率的方法。
【鳴謝】感謝阿木實驗室支持
配置cuda 11.4(根據(jù)自己板載電腦的算力去選擇cuda版本)
- jetop安裝
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install -U jetson-stats
- 查看機載電腦當(dāng)前環(huán)境(是否已經(jīng)配置cuda或者本身含opencv)
jetson_release
如果CUDA已經(jīng)安裝,檢查一下版本是否對應(yīng)。
- 安裝CUDA11.4
sudo apt-get install cuda-11-4
- 安裝cudnn(這個可能用不上,如果部署深度學(xué)習(xí)模型,還可以再配置TensorRT)裝一個也沒啥
sudo apt-get install libcudnn8
- 下載功能包,設(shè)置cuda
sudo apt-get install -y cmake libavcodec-dev libavformat-dev libavutil-dev \
libglew-dev libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng-dev libpostproc-dev \
libswscale-dev libtbb-dev libtiff5-dev libv4l-dev libxvidcore-dev \
libx264-dev qt5-default zlib1g-dev libgl1 libglvnd-dev pkg-config \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev mesa-utils
sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy
# To fix OpenGL related compilation problems
cd /usr/lib/aarch64-linux-gnu/
sudo ln -sf libGL.so.1.0.0 libGL.so //這一行代碼存疑,我感覺運行這行反而會導(dǎo)致后面的libGL.so在編譯的時候找不到?。?!可以先不運行這一行,先編譯
sudo vim /usr/local/cuda/include/cuda_gl_interop.h
注釋cuda_gl_interop.h 62~68行的下列部分,保留有顏色部分
//#if defined(__arm__) || defined(__aarch64__)
//#ifndef GL_VERSION
//#error Please include the appropriate gl headers before including cuda_gl_interop.h
//#endif
//#else
#include <GL/gl.h>
//#endif
下載Fast-Drone-250程序包
可以安裝在Home文件夾下
cd ~/Home
git clone http://github.com/ZJU-FAST-Lab/Fast-Drone-250
如果git很慢,可以自行科學(xué)下載該程序包
配置OpenCV with CUDA
以下步驟在~/Download文件夾下執(zhí)行即可,如果Opencv遇到編譯問題,提示在該文件夾下無法編譯,可以將其整體移動至Home文件夾即可解決。
- 暴力卸載原有的opencv 4.2.0 (感覺 nx更支持3.x,之前編譯4.x bug較多)
cd ~/Download
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
【此方法可能會誤刪一些ROS rqt之類的文件,建議后面魚香ROS重新補充安裝一下】
- 安裝opencv3.4.18和opencv_contrib3.4.18,并且進行帶cuda的的編譯
如果編譯遇到問題,對癥在網(wǎng)上尋求解答。
github官網(wǎng)下載opencv3.x的版本和對應(yīng)的 opencv_contrib3.x
opencv下載鏈接:https://hub.nuaa.cf/opencv/opencv/tree/3.4.18
opencv_contrib下載鏈接:https://hub.nuaa.cf/opencv/opencv_contrib/tree/3.4.18
下載后將opencv_contrib3.4.18解壓放入opencv3.4.18文件夾下,
然后可以在Download文件夾下執(zhí)行編譯?!厩杏浵旅娴腃UDA_ARCH_BIN盡量選擇7.2,網(wǎng)上其他博客都說7.2適合NX,8.7也許部分也可以,等大家測一測】
cd ~/Download/opencv-3.4.18
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=7.2 \
-D CUDA_ARCH_PTX="" \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_LIBV4L=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \
-D WITH_TBB=ON \
../
make -j8
sudo make install
到此編譯成功,然后如果不出意外,可以查到OpenCV with CUDA
jetson_release
- 安裝eigen3
sudo apt-get remove libeigen3-dev
cd ~/Downloads/
wget -O eigen.zip https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zip #check version
unzip eigen.zip
mkdir eigen-build && cd eigen-build
cmake ../eigen-3.3.7/ && sudo make install
pkg-config --modversion eigen3 # 檢查 Eigen 版本,判斷是否安裝成功
- 下載ceres1.14到Fast-Drone-250文件夾,替換掉里面的ceres 2.0.0rc1版本,保留壓縮包里面的glog文件
cd ~/Fast-Drone-250
sudo apt-get install -y cmake libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev
wget http://ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar zxf ceres-solver-1.14.0.tar.gz
- 修改cv bridge
進入opt/ros/melodic/share/cv_brige_cmake,更改cv_brigeConfige.cmake
cd /opt/ros/noetic/share/cv_bridge/cmake
sudo gedit cv_bridgeConfig.cmake
修改line 94-118,直接復(fù)制覆蓋!
#if(NOT "include;/usr/include/opencv4 " STREQUAL " ")
# set(cv_bridge_INCLUDE_DIRS "")
# set(_include_dirs "include;/usr/include/opencv4")
set(libraries "cv_bridge;/usr/local/lib/libopencv_core.so.3.4.18;/usr/local/lib/libopencv_imgproc.so.3.4.18;/usr/local/lib/libopencv_imgcodecs.so.3.4.18")
if(NOT "https://github.com/ros-perception/vision_opencv/issues " STREQUAL " ")
set(_report "Check the issue tracker 'https://github.com/ros-perception/vision_opencv/issues' and consider creating a ticket if the problem has not been reported yet.")
elseif(NOT "http://www.ros.org/wiki/cv_bridge " STREQUAL " ")
set(_report "Check the website 'http://www.ros.org/wiki/cv_bridge' for information and consider reporting the problem.")
else()
set(_report "Report the problem to the maintainer 'Vincent Rabaud <vincent.rabaud@gmail.com>' and request to fix the problem.")
endif()
foreach(idir ${_include_dirs})
if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir})
set(include ${idir})
elseif("${idir} " STREQUAL "include ")
get_filename_component(include "${cv_bridge_DIR}/../../../include" ABSOLUTE)
if(NOT IS_DIRECTORY ${include})
message(FATAL_ERROR "Project 'cv_bridge' specifies '${idir}' as an include dir, which is not found. It does not exist in '${include}'. ${_report}")
endif()
else()
message(FATAL_ERROR "Project 'cv_bridge' specifies '${idir}' as an include dir, which is not found. It does neither exist as an absolute directory nor in '\${prefix}/${idir}'. ${_report}")
endif()
_list_append_unique(cv_bridge_INCLUDE_DIRS ${include})
endforeach()
#endif()
- 補充ROS完整,因為有可能前面暴力刪opencv把ROS一些比如rqt等包刪除
wget http://fishros.com/install -O fishros && . fishros
系統(tǒng)資源:安裝中需要更換系統(tǒng)資源就換,不需要就不換
根據(jù)自己需求選擇具體的版本,記得一定是(ROS1)桌面版,選擇安裝完整的ROS
- Mavros安裝
sudo apt-get install ros-noetic-mavros
cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.sh
下載 VINS-GPU
cd ~/Fast-Drone-250/src/realflight_modules
mkdir -p vins_gpu/src
cd vins_gpu/src
git clone https://github.com/pjrambo/VINS-Fusion-gpu.git
//如果git很慢,建議自行下載安裝包解壓到vins_gpu/src目錄
需要更改vins_estimator/CMakeLists.txt和 loop_fusion/CMakeLists.txt文件,大概20行左右。需要把OpenCV路徑改成你自己的路徑
#include(/home/amov/opencv-3.4.18/build/OpenCVConfig.cmake)
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)
#message(WARNING "OpenCV_VERSION: ${OpenCV_VERSION}")
改成下面這樣:
還需要將四個功能包camera_models、global_fusion、loop_fusion、vins_estimator中catkin_include ros自帶的opencv鏈接去掉,即在四個cmakelist中的catkin_package( )后面加入去除你的系統(tǒng)之前本身含有的舊的 OpenCV庫的參數(shù)
,我的系統(tǒng)之前安裝的是OpenCV4.2.0
list(REMOVE_ITEM catkin_LIBRARIES "/usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2.0")
list(REMOVE_ITEM catkin_LIBRARIES "/usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2.0")
list(REMOVE_ITEM catkin_LIBRARIES "/usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.2.0")
如下圖:
編譯Fast-Drone-250
- 將realflight_modules文件夾下原本VINS-Fusion里面的config文件夾里面的全部文件復(fù)制到vins_gpu里面的config文件夾里面,遇到替換就替換。
然后將VINS-Fusion/vins_estimator/launch/fast_drone_250.launch文件復(fù)制到vins_gpu對應(yīng)的目錄里面
- 修改local_senseing/cmake.list為支持GPU還有改變 arch 和 code 的flags
line 8-9
set(ENABLE_CUDA false)
修改為
set(ENABLE_CUDA true)
下面這個似乎改不改影響不大,不確定,留個坑。
set(CUDA_NVCC_FLAGS
# -gencode arch=compute_xx,code=sm_xx;
-gencode arch=compute_61,code=sm_61;
)
如下圖所示然后開始編譯
cd ~/Fast-Drone-250
catkin_make
編譯時候請釋放所有性能,可以在系統(tǒng)右上角選擇0:MAXN,如下圖所示,編譯的適合拉滿了,8個核都拉滿了。
【重要】請檢查自己的~/.bashrc文件,關(guān)閉其他的連接方式,比如我這邊無人機需要注釋之前做動捕實驗的參數(shù)。
sudo gedit ~/.bashrc
一切沒問題后,source一下,然后就可以愉快的進行仿真實驗
source devel/setup.bash
roslaunch ego_planner single_run_in_sim.launch
在Rviz內(nèi)按下鍵盤G鍵,再單擊鼠標(biāo)左鍵以點選無人機目標(biāo)點
實機實驗
- 自行補充安裝
Terminator,VScode,net-tools,ssh
sudo apt install terminator
sudo apt install openssh-server
sudo apt install ros-noetic-plotjuggler
sudo apt install ros-noetic-plotjuggler-ros
sudo apt install net-tools
ifconfig
- 檢查飛控mavros連接正常
ls /dev/tty*
,確認飛控的串口連接正常。一般是/dev/ttyACM0
sudo chmod 777 /dev/ttyACM0
,為串口附加權(quán)限
roslaunch mavros px4.launch
rostopic hz /mavros/imu/data_raw
確認飛控傳輸?shù)膇mu頻率在200hz左右
- VINS外參精確自標(biāo)定
sh shfiles/rspx4.sh
rostopic echo /vins_fusion/imu_propagate
拿起飛機沿著場地盡量緩慢地行走,場地內(nèi)光照變化不要太大,燈光不要太暗,不要使用會頻閃的光源,盡量多放些雜物來增加VINS用于匹配的特征點,把 vins_output/extrinsic_parameter.txt 里的內(nèi)容替換到 fast-drone-250.yaml 的
body_T_cam0 和 body_T_cam1
重復(fù)上述操作直到走幾圈后VINS的里程計數(shù)據(jù)偏差收斂到滿意值(一般在0.3米內(nèi))
- 建圖模塊驗證
sh shfiles/rspx4.sh
roslaunch ego_planner single_run_in_exp.launch
roslaunch ego_planner rviz.launch
- Ego-Planner實驗
自動起飛
roslaunch ego-planner single_run_in_exp.launch
sh shfiles/record.sh
roslaunch ego_planner rviz.launch
按下G鍵加鼠標(biāo)左鍵點選目標(biāo)點使無人機飛行文章來源:http://www.zghlxwxcb.cn/news/detail-842186.html
【未完待續(xù),圖片沒加完】文章來源地址http://www.zghlxwxcb.cn/news/detail-842186.html
到了這里,關(guān)于【ARM NX環(huán)境下】最優(yōu)雅的配置ego-planner到arm架構(gòu)的nx機載電腦上(opencv3.4.18-cuda11.4+VINS-Fusion-GPU),并且實機試飛成功實驗記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!